标签:mysql - 星空

起因

前段时间在鼓捣数据表的数据上线,主要流程是将线下的数据同步到线上去,线上的部分需要需要和线下保持一直,并且每一次操作都需要自动化将表进行备份, 这个过程主要是靠自己进行代码同步,因为规则比较自定义,所以没有使用一些现有的数据同步。

主要流程如下:

1
2
3
4
5
6
7
8
9
- #备份NX的SCHEMA中的表并查询特定数据进行备用
NX-SCHEMA: 备份NX-TABLE ==> NX-TABLE_COPY ==> SELECT * FROM NX-TABLE_COPY WHERE ID =xx

- #备份JAPAB的SCHEMA中的表并且将上一步的数据写入到备份表中
JAPAN-SCHEMA: BEFEN JAPAN-TABLE ==> JAPAN-TABLE_COPY ==> INSERT INTO JAPAN-TABLE_COPY VALUE (xxx)

- #将JAPAN的SCHEMA中的原表和备份表进行重命名,将备份表的表名变成源表名,完成数据上线
JAPAN-SCHEMA: JAPAN-TABLE ==> RENAME JAPAN-TABL XXX ==> RENAME JAPAN-TABLE_COPY TO JAPAN-TABLE

在这个过程中,我们最主要的一步是在同一个schema下进行将原表进行备份,创建一个对应的不同表,后续所有的操作都改这个表中操作,在这个过程中也是出现了一些问题,后续经过实践后解决了相关问题,特此记录。

经过

我们在备份源Schema中的table时,直接采取了简单粗暴的SQL语句,如下:create table table_name_copy as select * from table_name,该SQL实现了创建table_name_copy并且将table_name中的数据也插入到对应的新表中,
看似满足了我们的需求:朴素的备份源表,不进行任何操作。

然而,简单的事情总是不会那么简单,在我们进行数据比对时,发现数据没啥问题,但是在校验表的DDL时,发现麻烦稍微有点大,此次备份基本没用,因为此时我们的表的主键、索引等等都丢失了,然后我们再查询相关的文档,发现弊端还挺多。

然后在此上进行了改进,先根据ddl创建表的结构,然后再讲数据导入进来,这样就避免了锁、和索引等问题。SQL如下:

1
2
3
4
5
6
7
8
9
10
第一步:创建表结构

方法一: 按照老表的结构创建新表
create table new_table like old_table;
方法二: 此种方法是先获取ddl,然后再修改表名再次执行DDL,进行表结构创建
SHOW CREATE TABLE old_table;

第二步:同步原表数据
INSERT INTO new_table SELECT * FROM old_table;

备份表的结构和数据都还是比较简单,但是这个只适用于少量数据的备份,大量数据的备份暂时还没有进行实践,我们大量的数据备份一般使用CSV或者ETL进行同步。

前因

场景1:线上的数据异步同步使用的是rabbitmq,当对数据库数据进行增删改时候会发送一条mq消息到同步服务,同时进行查库写入es。

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

举例如下:
表A记录如下:

我们先来了解什么是主从同步,主从同步,顾名思义也称为主从复制,用来建立一个和主数据库完全一样的数据库环境。主从同步使得数据可以从一个数据库服务器复制到其他服务器上,实现主数据库的数据和从数据库的数据保持一致。

集群是共享存储的,是data-sharing . 主从复制中没有任何共享 . 每台机器都是独立且完整的系统,是nothing-sharing.

1、 为查询缓存优化查询

像 NOW() 和 RAND() 或是其它的诸如此类的SQL函数都不会开启查询缓存,谨慎使用

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0

晚上闲来无事,想找点事做

于是手动删除了一些无用的数据库,手贱的是在从库里面删除了

起因

由于数据库系统的查询一直在使用es监控,某一天收到一条报警记录

命名规范

Ø库名、表名、字段名,使用小写字母

金额字段类型选择1.decimaldecimal(M,N) 0<M<65,0<N<30,且N<M,M和N的长度直接影响存储空间 默认情况,表示金额的情况,decimal(16,2),范围是99,999,999,999,999.99 to -99,999,999,999,999.99 占用空间为8个字节 存储时会四舍五入 2.bigint占用空间为8个字节 存...