博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql 主从同步
阅读量:6425 次
发布时间:2019-06-23

本文共 2987 字,大约阅读时间需要 9 分钟。

hot3.png

系统 centos6.5 至 centos7.0

mysql 5.6.15 至 mysql 5.6.29

下面程序中配置文件的位置根据自己服务器的情况进行修改

1,主服务器操作

修改 /etc/my.cnf
log-bin=mysql-bin   //[必须]启用二进制日志
server-id=123       //[必须]服务器唯一ID,默认是1,一般取IP最后一段

2,从服务器操作

修改 /etc/my.cnf
log-bin=mysql-bin   //[不是必须]启用二进制日志
server-id=456       //[必须]服务器唯一ID,默认是1,一般取IP最后一段

3,重启两台服务器的mysql

4,主服务器建立账户并且授权slave

mysql > GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by 'q123456'; //一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。

5,主服务器开始备份数据

安装在线的 yum库
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

安装

yum install percona-xtrabackup-22

6,备份主服务器数据库 (这个里面有一个 --database的参数可以指定数据库,不过这次是整库备份就没用,指定数据库和整库备份应该有不同的操作)

innobackupex --socket=/var/lib/mysql/mysql.sock --user=root --password=123456 --defaults-file=/etc/my.cnf --parallel=4 /data/backup/database

保持事物的一致性(上面备份完后会生成一个类似于 2016-07-28_15-17-40 的目录下面就填这个)

innobackupex --socket=/var/lib/mysql/mysql.sock --user=root --password=123456 --defaults-file=/etc/my.cnf --apply-log /data/backup/database/2016-07-28_15-17-40

7,进入从服务器

这里可以使用screen screen -S database

将主服务器的备份文件传输至从服务器

rsync -rP root@123.123.123.123:/tmp/backup/2016-07-28_15-17-40 /home/mysqlbackup/

恢复文件

innobackupex --socket=/tmp/mysql.sock --user=root --password=ShuaDuan#$%Mysql123 --defaults-file=/etc/my.cnf --copy-back /home/mysqlbackup/2016-07-28_15-17-40/

提醒一下恢复文件的目录是my.cnf中指定的 datadir的路径 这个路径不能是你传过来的路径,这个目录下必须为空,日过恢复文件时报 ibdata1 cannot overwrite 你需要将innodb_data_home_dir 和 innodb_log_group_home_dir改成 和datadir一样的路径 如果不改的话就在/usr/local/mysql/var 把 ibdata1、ib_logfile1、ib_logfile0删掉(当然 老实如我 还是改了)

恢复完后一定记得将恢复后的目录用户和用户组改为mysql 不然mysql启动不了

这时看一下远程传输过来的 尚未恢复的那个目录 里面有一个 xtrabackup_binlog_info 打开之后类似于 mysql-bin.000044        6061066

然后配置从服务器的slave,下面的master_log_file、master_log_pos就填刚才 xtrabackup_binlog_info里面的

mysql > change master to master_host='123.123.123.123',master_user='mysync',master_password='q123456',master_port=3306,master_log_file='mysql-bin.000044',master_log_pos=6061066;

开启slave服务

查看从服务器复制功能状态

show slave status\G

下面这两个必须是yes 否则就不行

Slave_IO_Running: Yes    //此状态必须YES
Slave_SQL_Running: Yes   //此状态必须YES

大功告成,看下从服务器的数据 是否和主服务器一致

以上主从同步参考 http://369369.blog.51cto.com/319630/790921/ 

以上数据库备份恢复参考 https://segmentfault.com/a/1190000003063874

 

如果同步出现后你还在从表插入数据那么会发生主键冲突,我当时直接把新增的数据删除后就好了(不知道是不是该怎么做)。

 

如果出现类似于 Could not execute Delete_rows event on table z.nidaye; Can't find record in 'nidaye', Error_code: 1032; 这样的1032错误 我当时是删除了主表数据,接着又删除了从表的同样数据(为毛没同步删除,我也不知道)然后就出现了这个错误,网上说是mysql的BUG,不管是什么,提供了几个方法。

1,说是5.5.13有bug,升级数据库就好(我没这么干)

2,利用配置参数 来躲避这个bug    vi /etc/my.cnf  slave-skip-errors = 1032,xxxx,xxxx ....(我也没这么干)

3.Replicate_Wild_Ignore_Table 发生错误的表。然后手工同步。(我干了但没成功,貌似是语法错误),

4,临时逃避此次错误。set global sql_slave_skip_counter=1;   stop slave; start slave; (这我倒是干了,那个sql_slave_skip_counter后面的数字貌似是执行忽略的条数,我当时大概删了十几条数据,那个数字我就填的 十几,然后重新启动slave 在看一下状态,成功了)

以上原文:http://blog.csdn.net/lxpbs8851/article/details/7914992

转载于:https://my.oschina.net/waterPlants/blog/719904

你可能感兴趣的文章
Win10系列:UWP界面布局进阶5
查看>>
ABP Zero 本地化语言的初始化和扩展
查看>>
转Hibernate 一对多关联的CRUD__@ManyToOne(cascade=(CascadeType.ALL))
查看>>
FCT需求分析
查看>>
开门人和关门人(杭电1234)
查看>>
万能adapter
查看>>
开发指南专题六:JEECG微云高速开发平台代码生成
查看>>
cocos2d-x 游戏优化方案
查看>>
1.3 Quick Start中 Step 6: Setting up a multi-broker cluster官网剖析(博主推荐)
查看>>
remote desktop connection manager
查看>>
开源库RxJava、ButterKnife
查看>>
JDK内置工具jstack(Java Stack Trace)(转)
查看>>
百度之星 / 初赛第二场 B题
查看>>
Http压测工具wrk使用指南
查看>>
Excel VBA 循环“我中毒了~”
查看>>
CSS 教程Part4 [盒子模型](摘录自 W3C School)
查看>>
android开发技巧
查看>>
五个有趣的拓扑变换问题 [转]
查看>>
asp.net中的比较完美的验证码
查看>>
HDU 3277 Marriage Match III(最大流+二分+并查集)
查看>>