版本mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
原理:master启动一个I/O进程,当数据库发生更改操作时,I/O进程会记录下更改操作的sql语句并保存为日志,slave启动一个I/O进程,一个SQL进程,I/O进程会下载主库的日志放进中继日志里面,SQL进程会来取日志里面的语句去执行,这样就可以异步复制主库的数据
步骤: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后即成功
错误排查:MySQL同步故障:" Slave_SQL_Running:No" 两种解决办法 https://blog.csdn.net/heng_ji/article/details/51013710
原文:https://www.cnblogs.com/allmdzz/p/10436161.html