0
点赞
收藏
分享

微信扫一扫

mysqlddl怎么看


数据库主从DDL是什么

谈到MySQL数据库主从同步延迟原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作,主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高,slave的Slave_IO_Running线程到主库取日志,效率很比较高,下一步,问题来了,slave的Slave_SQL_Running线程将主库的DDL和DML操作在slave实施。DML和DDL的IO操作是随即的,不是顺序的,成本高很多,还可能可slave上的其他查询产生lock争用,由于Slave_SQL_Running也是单线程的,所以一个DDL卡主了,需要执行10分钟,那么所有之后的DDL会等待这个DDL执行完才会继续执行,这就导致了延时。有朋友会问:“主库上那个相同的DDL也需要执行10分,为什么slave会延时?”,答案是master可以并发,Slave_SQL_Running线程却不可以。

mysql 对一个大表做在线ddl,怎么进行实施的才能尽可能降低影响

可以采用中间表。假设你原始表名是“test”,那么步骤如下

建立一个和“test”一样表结构的新表,表名为test_new。createtabletest_newliketest;

将test表中数据拷贝到test_new中。insertintotest_newselect*fromtest;

在test_new上执行ddl操作

最后将执行过ddl更新的test_new表改名为test,原test表改名为test_old。Renametabletesttotest_old,test_newtotest;

确认检查无误后drop掉test_old表

如果test表很大,在第二步会消耗很长时间,那么第二步可以以主键ID为准,采用分段导入,一次导入比如5000条数据,多次导入,这样不会对生产环境造成太大影响,假设test表上有自增主键“form_id",那么上面第二步命令变为:

insertintotest_newselect*fromtestwhereform_idbetween'1'and'5000';

insertintotest_newselect*fromtestwhereform_idbetween'5001'and'10000';

有个朋友总说MY DL ,是什么意思阿?

E,有你那么翻译的吗。你好

MY DL=MY DEAR LORD

就是我亲爱的主啊。就是英文 my darling,的意思,darling是亲爱的,但不一定要用在男女关系上,也可表示惊叹之类的。

希望对你要帮助。my darling?MY:没有 密钥 每月 美元 满意 等等

DL:队列 电路 到了 带来 对了 等等就是“亲爱的”

建筑符号DQL GZ DL是什么意思

DQL--表示地圈梁;

GZ--表示构造柱;

DL--表示地梁。

如有疑问,请Hi我。

举报

相关推荐

0 条评论