1、离线centos7环境
2、docker18.09.5
3、mysql8.0.21
用docker新建两个mysql数据库,这里不赘述了。
max_connetions在配置文件中不起作用,进到容器里面把最大文件打开数调大
echo 'mysql hard nofile 65535' >> /etc/security/limits.conf
echo 'mysql soft nofile 65535' >> /etc/security/limits.conf
主库的配置文件
[mysqld]
## 设置server_id,一般设置为IP,注意要唯一
server_id = 48221
#default-character-set=utf8
## 忽略的库表
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
## mysql的最大连接数
max_connections = 60000
## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)
log_bin =mysql-bin
relay_log=mysql-relay-bin
log-slave-updates=on
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format = mixed
## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days = 180
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
# slave_skip_errors = 1062
## 控制binlog的写入频率。每执行多少次事务写入一次
## 经过1日志写操作就把文件写入硬盘1次,这个参数性能消耗很大,但可减小MySQL崩溃造成的损失,为0表示不控制
# sync_binlog = 1
# innodb_flush_log_at_trx_commit = 1
# auto_increment_increment=n有多少台服务器,n就设置为多少,
# auto_increment_increment = 2
# auto_increment,控制自增列AUTO_INCREMENT的行为
# 用于MASTER-MASTER之间的复制,防止出现重复值,
# auto_increment_offset=1设置步长,这里设置为1,这样Master的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID
# auto_increment_offset = 1
从库的配置文件
[mysqld]
## 设置server_id,一般设置为IP,注意要唯一
server_id = 48201
#default-character-set=utf8
## 忽略的库表
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
## mysql的最大连接数
max_connections = 60000
## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)
log_bin =mysql-bin
#relay_log=mysql-relay-bin
#log-slave-updates=on
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format = mixed
## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days = 180
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
# slave_skip_errors = 1062
## 控制binlog的写入频率。每执行多少次事务写入一次
## 经过1日志写操作就把文件写入硬盘1次,这个参数性能消耗很大,但可减小MySQL崩溃造成的损失,为0表示不控制
# sync_binlog = 1
# innodb_flush_log_at_trx_commit = 1
# auto_increment_increment=n有多少台服务器,n就设置为多少,
# auto_increment_increment = 2
# auto_increment,控制自增列AUTO_INCREMENT的行为
# 用于MASTER-MASTER之间的复制,防止出现重复值,
# auto_increment_offset=1设置步长,这里设置为1,这样Master的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID
# auto_increment_offset = 2
创建从库账号
mysql -uroot -p'密码'; // 登录mysql
CREATE USER 'slaveuser'@'%' IDENTIFIED BY '密码'; // 添加账号
GRANT replication slave,replication client ON *.* TO 'slaveuser'@'%'; // 配置权限
flush privileges; // 刷新权限
查看主库的binlog日志开始点
show master status;
关闭slave服务 stop slave;
重置主节点配置 reset master;
CHANGE MASTER TO \
MASTER_HOST = '192.168.223.128', \
MASTER_USER = 'slaveuser', \
MASTER_PASSWORD = '密码', \
MASTER_LOG_FILE = 'mysql-bin.000005', \
MASTER_PORT = 53306, \
MASTER_LOG_POS = 1085, \
get_master_public_key = 1; # mysql8注意加这个参数
start slave;
show slave status\G;
最后在主库新建一个数据库,create database xxx;
然后去从库里面确认。
常见问题:
问题1:
Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
解决1:
添加参数get_master_public_key = 1
问题2:
The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
解决2:
停止从库的mysqld服务,删除他的auto.cnf文件,再启动数据库服务即可:
mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak
问题3:
都配好了,但是同步不起作用。
要用命令才有用的,用navicat不行。
问题4:
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
解决4:
reset slave;
问题5:
Error 'Operation CREATE USER failed for 'slave'@'%'' on query. Default database: ''. Query: 'CREATE
解决5:
这个报错的原因可能是由于:(1)已创建过该用户 (2)已有该用户的授权信息
解决方法:删除此用户,刷新,并重启slave
#删除该用户
mysql> drop user 'zhangsan'@'%';
mysql> FLUSH PRIVILEGES;
# 重启同步
mysql> stop slave;
mysql> start slave;
# 最后查看是否同步正常
mysql> show slave status\G
问题6:如果从库的Slave_IO_Running为NO。
The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
解决方法6:
show variables like 'server_id';
set global server_id=不重复id;
slave start;