系统 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-226,备份主服务器数据库 (这个里面有一个 --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-407,进入从服务器
这里可以使用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