> 数据库 > MySQL >

Mysql数据库主从不同步解决案例

问题说明:做了Mysql的主从,还没做主从分离,导致同事在mysql从服务器执行了写入操作,引起不同步(show slave status\G;Slave_SQL_Running: No)

解决方法:

1,

1
2
3
4
Mysql > slave stop;
Mysql > set global sql_slave_skip_counter =1 ;
Mysql > slave start;
Mysql > show slave status\G

因为插入的数据不止是1条,操作太慢且麻烦

2,

在主查询show master status\G,再从这个点执行

change master to master_host='master_ip', master_user='user', master_password='pwd',  master_port=3306,  master_log_file='mysql-bin.00000*',  master_log_pos=000000***;

数据会丢的更多。

 

因此,还是选择第一种方法,不过set global sql_slave_skip_counter=500 把这个数值调大,一次跳过去500条,一直循环那4条语句,直到

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

 

造成结果:这样操作的结果是丢失一些数据,不过少点,另外其中某一个表不同步了(因为有跳过从本来应该执行的语句),接下来解决这个问题,选择数据库插入频率很小的时候做,最好这时候不要有数据写入,以免影响生产环境(下面只是举例子说明解决步骤)

3,

用Navicat for MySQL登录主库,下面操作都是在主库进行

wKioL1PbMU_BkPRvAAMo-F26xnA808.jpg

1,在主库查询“SELECT COUNT(*) FROM date.table;”知道现在这个表有多少行,作为最后验证,选择“复制表”,复制后的表名称为 table_name_copy,复制的表数据也不会同步的

2,把复制的表导出,选择“转储SQL文件----结构和数据”,保存到硬盘上面

3,删除这个复制的表table_name_copy。在数据库右键选“运行SQL文件”,把刚才导出的数据再导入进去

wKiom1PbMOzB1BAAAADB04jtqr4962.jpg

现在的结果是刚导入的表table_name_copy主从肯定是同步的

4,关键的一步,继续查主库“SELECT COUNT(*) FROM date.table;” 看数据表有没有写入内容,如果没有写入,赶紧F2把table的名字改一下,3秒钟时间

table_name(数据对,没同步)改为table_name1

table_name_copy(趁着数据没写入table_name,已同步)改为table_name

再次“SELECT COUNT(*) FROM date.table;”查询,看有没有插入数据

 

5,总结,主从不同步会造成查询的数据不一致,做这个动作之前要和用这个表的人商量,保证不出现意外。主从做好了,要么做读写分离,要么控制权限,从只能查,没其他权限,这样才不会出问题



(责任编辑:IT)