MYSQL8.0主从复制SLAVE搭建
环境准备:两个mysql服务器分别运行以下命令:
show VARIABLES like 'log_bin'
出现以下信息表示支持
如果value字段是false,需要配置bin_log日志开启
linux下 找到my.cnf在[mysqld]下加入以下配置
log-bin=mysql-bin
#主从库此值不能相等 从库 server-id=2
server-id=1
windos下.exe安装的mysql
找到my.ini配置相同配置
重启mysql服务
linux: service mysql restart
docker: docker restart 容器id
windos:
右键 重新启动
再次运行
show VARIABLES like 'log_bin'
完成以上操作后
查看mysql 端口是否开放
先看防火墙是否开启
systemctl status firewalld
以上表示防火墙关闭,跳过端口开放过程
lsof -i:端口号
lsof -i:3306
以上表示端口开放
上面命令执行不了的 可以运行下面的命令
firewall-cmd --query-port=3306/tcp
打开端口号
firewall-cmd --add-port=3306/tcp --permanent
重启一下防火墙
firewall-cmd --reload
环境准备好后 开始主从搭建
一、在主服务上创建一个slave用户
根据自己的mysql版本创建
mysql 5.7 默认身份验证插件default_authentication_plugin是:mysql_native_password
mysql 8.0 默认身份验证插件default_authentication_plugin是:caching_sha2_password
CREATE USER 'slave'@'ip地址' IDENTIFIED WITH caching_sha2_password BY 'password';
CREATE USER 'slave'@'ip地址' IDENTIFIED WITH mysql_native_password BY 'password';
以防万一这里可以执行以下刷新权限
flush privileges;
查询是否创建成功
SELECT Repl_slave_priv,Repl_client_priv FROM user WHERE User= 'slave';
给slave用户授权
grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’;
GRANT replication slave,replication client ON *.* TO 'slave'@'ip地址';
刷新权限
flush privileges;
再次执行
SELECT Repl_slave_priv,Repl_client_priv FROM user WHERE User= 'slave'
二、配置从库
查看当前是否有主库
show slave status;
若Slave_IO_State不为空,需停止,并清除相关信息
STOP SLAVE;
RESET SLAVE;
创建连接主库
change master to master_host='主库ip地址',master_user='slave',master_password='连接密码',master_port=3306,master_log_file='mysql-bin.000004',master_log_pos=57733409;
相关字段说明
master host:MySQL主的地址
master_user:备份的用户名
master_password:备份的用户密码
master_log_file:bin-log的文件名
master_log_pos:bin-log的位置
查询主库master_log_file、master_log_pos
在主库上运行
SHOW MASTER STATUS;
开始运行从库连接
START SLAVE;
查看从库连接主库状态
show slave status;
主要查看以下三个字段
表示成功了
接下来自己测试下吧
常见问题
(1)Slave I/O for channel '': error connecting to master 'slave@XXXXX:3306' - retry-time: 60 retries: 1 message: Access denied for user 'slave'@'XXXXX' (using password: YES), Error_code: MY-001045
很明显是从库配置的用户-密码不对
从库运行
STOP SLAVE;
RESET SLAVE;
change master to master_host='主库ip地址',master_user='slave',master_password='连接密码',master_port=3306,master_log_file='mysql-bin.000004',master_log_pos=57733409;
START SLAVE;
(2)Slave I/O for channel '': error connecting to master 'slave@XXXXX:3306' - retry-time: 60 retries: 20 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection. Error_code: MY-002061
主库运行
ALTER USER 'slave'@'主库ip' IDENTIFIED WITH mysql_native_password BY '密码';
刷新权限
flush privileges;
从库运行
STOP SLAVE;
START SLAVE;
若还不成功,建议重复二、配置从库
(3)Slave failed to initialize relay log info structure from the repository
slave_relay_log_info表中依然保留之前relay_log的信息,所以导致启动slave报错
STOP SLAVE;
RESET SLAVE;
(4)Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000004' position 157
我遇到这个错误是因为命令
change master to master_host='主库ip地址',master_user='slave',master_password='连接密码',master_port=3306,master_log_file='mysql-bin.000004',master_log_pos=57733409;
的master_log_pos 配置错误
建议重复二、配置从库