设为首页收藏本站
查看: 44|回复: 0

[PHP] mysql数据库主从不同步的解决方法_MySQL-mysql教程

[复制链接]

论坛元老

Rank: 6Rank: 6

积分
34273
主题
17031
UID
1347
M币
67
贡献
17175

  • 发表于 2017-5-12 16:11:00 | 显示全部楼层 |阅读模式
    故障描述:  
    进入从数据库
    mysql> show slave status\G;
      
    结果如下:
    ...
    Slave_IO_Running: Yes
    Slave_SQL_Running: No
    Last_Errno: 1062
    ...
      
    原因:
      
    程序可能在slave上进行了写操作
      
    可能是slave机器重启后,事物回滚造成的
      
    多数是第二种造成的
      
    解决方法一:忽略错误后继续同步
      
    该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况
    mysql> slave stop;
    mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
    mysql> slave start;
      
    解决方法二:强制性从某一个点开始同步
      
    此方法会有部分没有同步的数据丢失,后续主服务器上删除记录同步也会有一些错误信息,不会影响使用
      
    到主服务器上查看主机状态:
      
    记录File和Position对应的值。
    mysql> show master status;
    +------------------+-----------+--------------+------------------+
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+-----------+--------------+------------------+
    | mysql-bin.000021 | 135617782 | | |
    +------------------+-----------+--------------+------------------+
    1 row in set (0.00 sec)
      
    3.到slave服务器上执行手动同步:
    mysql> change master to
    > master_host='master_ip',
    > master_user='user',
    > master_password='pwd',
    > master_port=3307,
    > master_log_file='mysql-bin.000021',
    > master_log_pos=135617782;
    1 row in set (0.00 sec)
    mysql> slave start;
    1 row in set (0.00 sec)
      
    再次查看slave状态发现:
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    ...
    Seconds_Behind_Master: 0
      
    解决方法三:重新做主从,完全同步
      
    该方法适用于主从库数据相差较大,或者要求数据完全统一的情况
      
    1.进入主库,进行数据备份
    mysqldump -u root -p --opt --master-data --single-transaction -B > mysql.bak.sql
      
    2.把mysql备份文件传到从库上,导入从库
    mysql > stop slave;
    mysql -u root -p
      
    3. 从备份文件中找到file和position
      
    grep -i "CHANGE MASTER TO" mysql.bak.sql会得到以下类似内容:
    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000021', MASTER_LOG_POS=135617782;
      
    4.设置从库同步
    mysql> change master to
    > master_host='master_ip',
    > master_user='user',
    > master_password='pwd',
    > master_port=3307,
    > master_log_file='mysql-bin.000021',
    > master_log_pos=135617782;
    mysql> slave start;
    1 row in set (0.00 sec)
      
    再次查看slave状态发现:
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    ...
    Seconds_Behind_Master: 0
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    在我站开通SVIP可同时获得17个站点VIP资源 立即登录 立即注册
    快速回复 返回顶部 返回列表