mysql的主从复制同步方案

avatar 2025年4月10日18:29:36 评论 21 次浏览

mysql的主从复制过程中,如果想配置主从复制结构,针对一个新的环境很简单,直接配置即可,然后在创建主从后在创建数据库,这样数据就会直接同步到从库里了,但是如果创建一个已经运行一段时间的mysql,那么就需要在备份的时候把binlog打印出来,避免同步时数据有丢失,或者同步时出现重复数据导致同步失败.已经也做过这种问题,没有纪录导致这次在同步时犯了这个错误,下面纪录一下.

方案一:

把主库进行锁表操作,这样备份时数据就不会写入,备份数据库在导入从库,然后开启主从同步,操作如下:

 FLUSH TABLES WITH READ LOCK;
 SHOW MASTER STATUS;

锁表后备份,并且查看一下一下binlog的位置,然后还原后,根据纪录位置进行同步即可.

 mysql> SHOW MASTER STATUS;
 +------------------+----------+--------------+------------------+-------------------+
 | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
 +------------------+----------+--------------+------------------+-------------------+
 | mysql-bin.000006 |     1998 |              |                  |                   |
 +------------------+----------+--------------+------------------+-------------------+
 1 row in set (0.00 sec)

方案二

备份主库时刷新一下binlog,在备份库中会显示打印备份的位置,从那个binlog位置进行备份,然后在从库中进行还原,还原后在根据备份的binlog位置进行同步,这样不影响主库的写,也不影响从库的同步.

 mysqldump -uroot -p --all-databases --single-transaction --flush-logs --master-data=2 > backup.sql

备份后,把备份后的文件copy到从库中,然后在从库中导入即可,导入后查看一下备份到binlog位置

 grep "CHANGE MASTER" backup.sql
 -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000051', MASTER_LOG_POS=376609350;

然后根据备份到位置进行同步,从新创建同步进行,然后开启同步

 change master to master_host='10.32.128.104', master_user='root', master_password='123456',  master_log_file='mysql-bin.000051', master_log_pos=376609350;
 START SLAVE;

这样同步就可以从备份位置同步,然后同步的过程中也不会影响到用户的使用,不影响同步进度.以上是两种同步方案仅供参考.

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: