主:192.168.2.67
从:192.168.2.211
主服务器操作
vi /etc/my.cnf
server-id=189 //可以用IP的后三位做唯一的标识
log-bin=mysql-bin //开启二进制文件,并已mysql-bin为文件头。
binlog-do-db=boolaw //指定需要备份的库,可设置多行
//binlog-ignore-db=mysql 设置忽略的库
binlog-format=mixed //设置日志格式,这里用混合的
/usr/local/mysql/bin/mysql -uroot -p
mysql>grant replication slave on *.* to rsync@'192.168.2.211' identified by '123456';//给用户rsync开启slave权限 注意 必须*.*不然报错
mysql>flush privileges;//刷新权限
mysql>flush tables with read lock; //锁定表操作 用来记录Position值 用来和从服务器同步 不然会出现问题
mysql>show master status; //查看File和Position值
mysql>unlock tables; //解锁 此操作一定要和从服务器同步操作 不然会照成Position值不同步而照成数据不同步
从服务器操作
vi /etc/my.cnf
server-id=190 //必须比主服务器要大
relay-log=mysql-relay
#master-host=10.10. 0.119 //设置主机
#master-user=boolaw //同步用户帐号
#master-password=123456 //设置密码
#master-port=3306
#master-connect-retry=60 //预设重试间隔60秒
replicate-do-db=boolaw //告诉slave只做boolaw数据库的更新
//replicate-ignore-db=mysql 设置忽略的库
上面注释掉的内容 在mysql重启以后命令设置比较好 不然有时候mysql启动不了
mysql>stop slave;
mysql>change master to 从指定位置重新同步运行这个命令即可
>master_host='192.168.2.67',
>master_user='rsync', master端创建的用于主从同步的账户和密码
>master_password='123456',
>master_port='3306', master端设置的client端使用的端口号。
>master_log_file='mysql-bin.000047', master端记录的file值
>master_log_pos=391592414; master端记录的position值
mysql>start slave; 一定要设置完这个值,并启动 再在主服务器unlock tables;
mysql>show slave status \G
查看上面的结果Slave_IO_Running: Yes 和Slave_SQL_Running: Yes 2个都为yes则证明主从同步正常,如果有任一个显示NO,则证明同步有问题。
主:show master status; 从:show slave status \G命令来查看是不是同步了
运行了1天 发现老是中断 可能是主键冲突
mysql主从同步常见异常及恢复方法
1. 一般的异常只需要跳过一步即可恢复
>slave stop;
>SET GLOBAL sql_slave_skip_counter = 1;
>slave start;
2.断电导致主从不能同步时,通主库的最后一个bin-log日志进行恢复
在主库服务器上,mysqlbinlog mysql-bin.xxxx > binxxxx.txt
tail -n 100000 binxxxx.txt > tail-binxxxx.txt
vim tail-binxxxx.txt 打开tail-binxxxx.txt文件找到最后一个postion值
然后在从库上,change host to 相应正确的值
>slave stop;
>change master to master_host='ip', master_user='username', master_password='password', master_log_file='mysql-bin.xxxx', master_log_pos=xxxx;
>slave start;
>show slave status\G;
3.主键冲突、表已存在等错误代码如1062,1032,1060等,可以在mysql主配置文件指定
略过此类异常并继续下条sql同步,这样也可以避免很多主从同步的异常中断
[mysqld]
slave-skip-errors = 1062,1032,1060