有同事需要把从库中的数据,同步一份到新环境,但发现在主库上执行count语句,和从库上执行count语句得出的结果不同。
场景:有同事需要把从库中的数据,同步一份到新环境,但发现在主库上执行count语句,和从库上执行count语句得出的结果不同。
解决思路:
在从库上执行 show slave status \g ,查看返回结果:
*************************** 1. row ***************************
slave_io_state: waiting for master to send event
master_host: 192.168.1.118
master_user: bak
master_port: 3306
connect_retry: 60
master_log_file: mysql-bin.000728
read_master_log_pos: 586670704
relay_log_file: mysqld-relay-bin.002178
relay_log_pos: 457911949
relay_master_log_file: mysql-bin.000709
slave_io_running: yes
slave_sql_running: no
replicate_do_db: mydb
replicate_ignore_db:
replicate_do_table:
replicate_ignore_table:
replicate_wild_do_table:
replicate_wild_ignore_table:
last_errno: 1062
last_error: error 'duplicate entry 'xxxxxxx' for key 2' on query. default database: 'mydb'. query: 'insert into `network` (`uuid`, `machine_name`, `port`, `update_time`) values ('5''
skip_counter: 0
exec_master_log_pos: 457911812
relay_log_space: 20988097167
until_condition: none
until_log_file:
until_log_pos: 0
master_ssl_allowed: no
master_ssl_ca_file:
master_ssl_ca_path:
master_ssl_cert:
master_ssl_cipher:
master_ssl_key:
seconds_behind_master: null
1 row in set (0.00 sec)
发现从库在同步时出错,没有能正常同步,解决方法:
第一:停止slave,slave stop;
第二:跳过一条出错的语句:set global sql_slave_skip_counter=1;
第三:启动slave,slave start;
第四:使用show slave status \g 查看当前的同步情况,如果slave_sql_running: yes,则成功,如果slave_sql_running: no,则再次执行一到四。如果不想一次次重复,可以在第二步中跳过多条错误的语句。
最后看看当前从库与主库的时间差:seconds_behind_master: 197011
,