1
|
/usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysql.sock |
1 2 3 4 5 6 |
stop slave; set global binlog_transaction_dependency_tracking=COMMIT_ORDER; set global transaction_write_set_extraction=XXHASH64; set global binlog_transaction_dependency_tracking=WRITESET; set global slave_parallel_type='LOGICAL_CLOCK'; set global slave_parallel_workers=96; |
参数项 |
说明 |
备注 |
---|---|---|
transaction_write_set_extraction |
如果使用WriteSet进行并行复制,需设置该参数,该参数用于控制检测事务依赖关系时采用的hash算法。 |
有三个取值OFF|XXHASH64|MURMUR32 MySQL 5.7版本需要设置,MySQL 8.0版本默认是XXHASH64可以不用设置,而且设置该参数之前需要先设置binlog_transaction_dependency_tracking= COMMIT_ORDER |
binlog_transaction_dependency_tracking |
用于控制如何决定事务的依赖关系。 |
有三个取值:
|
slave_parallel_type |
该参数控制是否开启并行复制。 |
默认值DATABASE将会采用MySQL 5.6版本中SCHEMA级别的并行回放(基于库的并行复制),设置为LOGICAL_LOCK则会采用基于GroupCommit的并行回放(基于组提交的并行复制),同一个Group内的事务将会在Slave上并行回放。 |
slave_parallel_workers |
用于控制SQL线程的并行度。 |
|
关闭并行复制,先关闭主库的并行复制,然后关闭从库的并行复制。
1 2 3 4 |
set global binlog_transaction_dependency_tracking=COMMIT_ORDER; set global transaction_write_set_extraction=XXHASH64; set global slave_parallel_type='DATABASE'; set global slave_parallel_workers=0; |
1 2 3 4 |
show variables like '%transaction_write_set_extraction%'; show variables like '%binlog_transaction_dependency_tracking%'; show variables like '%slave_parallel_type%'; show variables like '%slave_parallel_workers%'; |
以上命令查询数值依次为XXHASH64、COMMIT_ORDER、DATABASE和0即成功关闭并行复制。
1 2 3 4 5 6 |
stop slave; set global binlog_transaction_dependency_tracking=COMMIT_ORDER; set global transaction_write_set_extraction=XXHASH64; set global slave_parallel_type='DATABASE'; set global slave_parallel_workers=0; start slave; |
或者
1 2 3 |
stop slave; set global slave_parallel_type='DATABASE'; start slave; |
1 2 3 4 |
show variables like '%transaction_write_set_extraction%'; show variables like '%binlog_transaction_dependency_tracking%'; show variables like '%slave_parallel_type%'; show variables like '%slave_parallel_workers%'; |
以上命令查询数值依次为XXHASH64、COMMIT_ORDER、DATABASE和0,即成功关闭并行复制。
查看所有线程(IO线程和SQL线程),
1
|
show processlist; |
只有1个IO线程和1个SQL线程,Id35的是IO线程(接收主库的binlog日志),Id36是SQL线程(解析二进制日志并执行SQL语句)。
1 2 3 4 |
show variables like '%transaction_write_set_extraction%'; show variables like '%binlog_transaction_dependency_tracking%'; show variables like '%slave_parallel_type%'; show variables like '%slave_parallel_workers%'; |
以上命令查询数值依次为XXHASH64、WRITESET、LOGICAL_CLOCK和96则说明生效。
如果发现某些值不生效,需要退出重新登录数据库,再次查看才会生效。
SQL协调线程:把二进制日志解析后分发给SQL线程执行。
1
|
show slave status\G; |
下面两项值均为Yes,表示从库启动成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果Last_IO_Error报错“The slave I/O thread stops because master and slave have equal MySQL server UUIDs......”,参考查看MySQL主从复制状态时提示The slave I/O thread stops的解决方法解决后,重新查看从库状态。
1
|
exit
|