主从同步错误
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)
mysql> set global sql_slave_skip_counter=1;
ERROR 1858 (HY000): sql_slave_skip_counter can not be set when theserver is running with @@GLOBAL.GTID_MODE = ON. Instead, for each transactionthat you want to skip, generate an empty transaction with the same GTID as thetransaction
解决方法:
根据当前的在从库的状态,手工设置下一个GTID值,并写一个空的事务提交后,相当于使得从库上执行了这个有冲突的事务(跟sql_slave_skip_counter一样,只是解决冲突,并不会修改不一致的数据),然后再把GTID值设置回auto模式
mysql> show master status;
+------------------+----------+--------------+------------------+-----------------------------------------------------------------------------------+
| File | Position| Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-----------------------------------------------------------------------------------+
| mysql-bin.000004 | 8319| | |09f5ef8b-8dd7-11e5-aa70-e8611f12a96a:1,
4e4592b2-8dd5-11e5-aa65-525400646024:1-33 |
+------------------+----------+--------------+------------------+-----------------------------------------------------------------------------------+
1 row in set (0.00 sec)
注意:找到4e4592b2-8dd5-11e5-aa65-525400646024:1-33这条记录,对应的当前从库的主库的uuid,将33改为34,不要找错
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> SET SESSION GTID_NEXT='4e4592b2-8dd5-11e5-aa65-525400646024:34';
Query OK, 0 rows affected (0.00 sec)
mysql> begin;commit;
Query OK, 0 rows affected (0.00 sec)
mysql> SET SESSION GTID_NEXT =AUTOMATIC;
Query OK, 0 rows affected (0.00 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec
mysqlbinlog解析后导入无效
原因分析:普通方式导出成sql文件后,sql文件中设置了下一次的gtid值,但是这个gtid在之前已经执行过,那么mysql就会跳过而不报错,自然就无效了
解决方法
首先保证mysqlbinlog版本为3.4及以上,然后在mysqlbinlog中添加--skip-gtids=true参数,即
/opt/udb/program/mysql/mysql-5.6.20/bin/mysqlbinlog--skip-gtids=true mysql-bin.000005>/tmp/jj1.sql
这时我们再看导出的sql文件就正常了
关于mysqldump的选择和新建一个gtid的从库方法
选择:5.5的mysqldump默认不会到处gtid信息,而5.6版本的mysqldump默认会导出gitd信息,这里的gtid信息指的就是在dump时会记录以下这些信息
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 0;
--
-- GTID state at the beginning of the backup
--
SET @@GLOBAL.GTID_PURGED='f79230ed-9970-11e5-b616-e8611f1041d0:1-4';
导出完成后再把sql_log_bin该回原来的值
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG