mysql主从复制

版本mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz

原理:主从复制涉及三个线程,主库dump_log线程负责把主库的bin.log的文件名跟位置点跟文件发给从库,从库I/O线程把主库的bin.log文件名跟位置点记录在从库的master.info里面,并且把获取到的文件改成replay.bin.log文件,从库的SQL线程把replay.bin.log文件翻译成sql语句,执行,并把目前为止执行过的replay.bin.log文件名跟位置点保存在replay.info里面

步骤:1,主库先开启log-bin功能并修改server-id的值确保在局域网内唯一(/etc/my.cnf/mysqld)生成日志

           2,主库授权用户复制权限,让从库能够来主库获取日志,GRANT REPLICATION SLAVE ON *.* to 'rep1'@'192.168.8.11' identified by 'test123456' 注意,@后面是否可以改成网段或者%有待验证

           3,使用mysqldump -u -p -B 数据库名称 --master-data=1 --events > *.sql 注意:-B是导入数据库时不用先建库,--master-data=1是当备份数据库时进行短暂锁库,并记录下来change master to的数值,方便从库执行change master to时不用指定主库binlog日志的名称跟位置点,因为加了这个参数后,导出的备份数据里面已加有日志名称跟位置点,还有导出备份时最好不要把mysql默认的库也导出来(试过导出并导入从库中,从库的主从复制状态一直不对,后面没导出默认数据库就成功了),况且当没有指定只同步指定数据库时,默认会同步所有数据库。

           4,拷贝备份文件到从库并导入文件scp -P端口 文件 用户@从库IP:/目录      mysql -u -p < *.sql

           5,进入从库执行change master to语句 CHANGE MASTER TO MASTER_HOST='172.16.2.10', MASTER_PORT=3306, MASTER_USER='rep', MASTER_PASSWORD='oldboy123';

           6,检查从库状态 show slave status\G;当Slave_IO_Running: Yes   Slave_SQL_Running: Yes两个yes后即成功

生产环境下一般不会同步一些库不同步一些库,只会在同步时忽略一些表:

binlog-do-db:要同步的数据库名

还可以显示 设置不同步的数据库:

binlog-ignore-db = mysql 不同步mysql库和test库
binlog-ignore-db = test

错误排查:MySQL同步故障:" Slave_SQL_Running:No" 两种解决办法  https://blog.csdn.net/heng_ji/article/details/51013710

mysql错误代码表:https://www.cnblogs.com/JimCalark/p/7808575.html

忽略从库同步数据时错误代码 slave_skip_errors = 1007,1062,1032(/etc/my.cnf/mysqld)

 从库开启bin-log分两种情况:

a,从库做其他服务器的主库(即级联)

b,从库做备份服务器

开启方法:在my.cnf下面的mysqld模块下增加log-slave-updates  expire_logs_days=7(删除七天前的log日志)

          

posted on 2019-02-26 11:25  一直用这名字  阅读(121)  评论(0编辑  收藏  举报

导航