mysql主从同步配置,版本8.0.22,多数据库主从同步
master库配置
1、编辑mysql配置文件,vi /etc/mysql/my.cnf
log-bin=mysql-bin # 开启binlog
server-id=1 # 主从复制链路中服务id不能相同
binlog-ignore-db=information_schema # 不开启binlog的数据库
binlog-ignore-db=sys
binlog-ignore-db=performance_schema
binlog-ignore-db=mysql
binlog-do-db=demo # 开启binlog的数据库,不能用逗号隔开
binlog-do-db=db1
binlog-do-db=db2
binlog-do-db=db3
binlog_format=MIXED # binlog格式
binlog_expire_logs_seconds=60* 60* 24 # binlog过期时间:1天
max_binlog_size=32m # binlog最大大小,超过这个值会创建新的binlog
binlog_cache_size=4m # binlog缓存大小,执行sql的时候会创建缓存,所有session的内存超过最大值,会报错
max_binlog_cache_size=128m #binlog最大缓存大小
2、在master中创建用户,并为用户设置复制权限
mysql>CREATE USER ‘repl3’@’%’ IDENTIFIED WITH mysql_native_password BY ‘****’;
mysql>GRANT REPLICATION SLAVE ON . TO ‘repl3’@’%’;
mysql>FLUSH PRIVILEGES;
3、查看master状态,记录master当前的binlog日志已经位置,slave库配置需要用到
mysql>show master status;
slave库配置
1、编辑mysql配置, vi /etc/mysql/my.cnf
server-id=2 #服务id,不能与其他主、从服务的id相同
replicate_do_db=demo #需要同步的数据库
replicate_do_db=db1
replicate_do_db=db2
replicate_do_db=db3
replicate_ignore_db=mysql #主从服复制忽略的数据库
2、配置master库地址以及同步开始位置
mysql>CHANGE MASTER TO
MASTER_HOST=‘172.17.0.3’,
MASTER_USER=‘repl3’,
MASTER_PASSWORD=’****’,
MASTER_LOG_FILE=‘mysql-bin.000012’,
MASTER_LOG_POS=19659;
注意:修改master配置,需要先执行 mysql>stop slave; 修改完主库配置后,执行 mysql>start slave;即可
3、开始同步
mysql>start slave;
4、查看同步状态,slave_io_running=yes,说明开始同步
mysql>show slave status\G;
遇到的问题
1、master进行修改后,查看master状态,binlog的position的位置没有改变,binlog没有更新
master配置文件的问题,binlog-do-db=db1这个配置,多个数据库不能用逗号分隔,配置多条即可;slave库的同步配置replicate_do_db=db1,如果多个库同样需要配置多条
2、查看mysql数据库日志路径
mysql>show variables like ‘log_%’;
3、slave_io_running=no,master库连接失败问题
1、telnet查看配置的master库的端口是否通
2、查看复制用户的用户名密码是否正确
3、查看复制用户用户的访问权限是否正确
4、检查辅助用户的认证方式
4、现有主从数据库中表结构不一致导致主从复制失败,mysql>show slave status\G;可以看到具体的错误
一旦出现从库,执行同步过来的binlog失败,主从同步就停止了;此时需要修改slave库表结构,保证主从数据库表结构一致,然后在执行mysql>stop slave; mysql>start slave; ,不生效的话就重启slave数据库实例;
注意:修改mysql配置文件必须要重启mysql才难生效