前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql主从同步问题之釜底抽薪

mysql主从同步问题之釜底抽薪

作者头像
山行AI
发布2019-10-13 16:22:58
8060
发布2019-10-13 16:22:58
举报
文章被收录于专栏:山行AI山行AI

同步问题实在解决不了时,以主库为准。

导出主库数据

  1. 1 mysqldump方式
代码语言:javascript
复制
mysqldump -uroot -p  --single-transaction --master-data=2 --no-autocommit  -A >alldatas.sql
  1. 2 其他客户端工具导出

清空从库

将从库上的数据库清空,并还原为普通的数据库,(删除master.info relay-log.info relay-bin.index)

reset master和slave

一般情况下reset slave就可以了,如果reset slave也不行,那就需要reset master了。

  • 主库上,reset master(非必须,视实际情况而定,reset不会清除数据,但是会修改掉当前主库的binlog位置信息致使与上面dump出的sql中的binlog信息不一致):
代码语言:javascript
复制
mysql> reset master;mysql> show master status\G

如果reset master发生在mysqldump之后,则需要通过show master status\G;来确定从库需要更新的位置,这时如果没有在停机状态下是不准确的。如果需要reset master,最好是在reset之后再dump一份新的数据文件出来。

  • 从库上:
代码语言:javascript
复制
mysql> stop slave;mysql> reset slave;mysql> show slave status\G

将导出的数据导入从库

  • 如果是dump下来的数据,需要通过scp复制到从库上然后执行:mysql -uroot -p < alldatas.sql
  • 如果是通过客户端导出的需要使用客户端工具导入或者用source命令导入也可。这种情况下需要通过show master status\G;来确定从库需要更新的位置,这时如果没有在停机状态下是不准确的。

查看主库的binlog 位置

  1. 从dump文件中

这种情况需要注意上面提到的reset master与dump的先后顺序。

  1. show master status\G;
代码语言:javascript
复制
mysql> show master status\G;*************************** 1. row ***************************             File: bin.000002         Position: 77530910     Binlog_Do_DB:  Binlog_Ignore_DB: Executed_Gtid_Set: 1 row in set (0.00 sec)

这个在不停机状态下position和file都是在变化状态的,因为会有新的插入进来,需要注意。

修改slave的postition和file信息与最新的master关联起来

代码语言:javascript
复制
mysql> CHANGE MASTER TO    -> MASTER_HOST='192.168.1.99',     -> MASTER_USER='test99',     -> MASTER_PASSWORD='aA&12345',     -> MASTER_LOG_FILE='bin.000002',     -> MASTER_LOG_POS= 77530910;
mysql> start slave;Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G;*************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event                  Master_Host: 192.168.1.163                  Master_User: test123                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: bin.000002          Read_Master_Log_Pos: 77530910               Relay_Log_File: mysql-relay-bin.000002                Relay_Log_Pos: 314        Relay_Master_Log_File: bin.000002             Slave_IO_Running: Yes            Slave_SQL_Running: Yes              Replicate_Do_DB:           Replicate_Ignore_DB:            Replicate_Do_Table:        Replicate_Ignore_Table:       Replicate_Wild_Do_Table:   Replicate_Wild_Ignore_Table:                    Last_Errno: 0                   Last_Error:                  Skip_Counter: 0          Exec_Master_Log_Pos: 77530910              Relay_Log_Space: 521              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: 0Master_SSL_Verify_Server_Cert: No                Last_IO_Errno: 0                Last_IO_Error:                Last_SQL_Errno: 0               Last_SQL_Error:   Replicate_Ignore_Server_Ids:              Master_Server_Id: 163                  Master_UUID: ec5e1ee1-f6e2-11e8-949d-005033ee2217             Master_Info_File: /work1/data/mysql/master.info                    SQL_Delay: 0          SQL_Remaining_Delay: NULL      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates           Master_Retry_Count: 86400                  Master_Bind:       Last_IO_Error_Timestamp:      Last_SQL_Error_Timestamp:                Master_SSL_Crl:            Master_SSL_Crlpath:            Retrieved_Gtid_Set:             Executed_Gtid_Set:                 Auto_Position: 0         Replicate_Rewrite_DB:                  Channel_Name:            Master_TLS_Version: 1 row in set (0.01 sec)

执行成功之后主从数据不同步的问题就可以修复了。

总结

  1. 不停机:清除从库数据,然后采取dump方式,不reset master或先reset master之后再从master上dump,reset slave之后先将dump 出的文件导入从库中,然后从dump出的文件中找出当前的binlog文件和postition信息,执行change master命令。
  2. 停机: 清除从库数据,然后通过客户端工具或者dump方式,reset slave之后,将数据库文件导入从库中,然后通过在主库上show master status\G来找到当前主库的 binlog文件和position信息,执行change master命令。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开发架构二三事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导出主库数据
  • 清空从库
  • reset master和slave
  • 将导出的数据导入从库
  • 查看主库的binlog 位置
  • 修改slave的postition和file信息与最新的master关联起来
  • 总结
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档