docker配置mysql9.2和8.0主从复制,实现mysql数据库集群
概要
docker配置mysql9.2和8.0主从复制,实现mysql数据库集群
配置流程
mysql安装前面讲过链接如下:
docker安装mysql
一、SQL命令来配置主服务器
mysql8.0写法:
CREATE USER 'myuser'@'%' IDENTIFIED BY 'myuser-password';
GRANT REPLICATION SLAVE ON *.* TO 'myuser'@'%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS; -- 记录下File和Position的值,稍后用于从服务器配置
以下mysql9.2写法:
CREATE USER 'myuser'@'%' IDENTIFIED BY 'myuser-password';
GRANT REPLICATION SLAVE ON *.* TO 'myuser'@'%';
FLUSH PRIVILEGES;
show binary log status; -- 记录下File和Position的值,稍后用于从服务器配置
注意:mysql9.2找不到show master status;命令改为show binary log status;。
SHOW BINARY LOGS;查询所有二进制日志文件
SHOW BINLOG EVENTS IN ‘mysql-bin.000004查看Position’;
myuser这里是给从库复制的链接用户名
myuser-password这里是给从库复制数据的链接密码
二、修改远程链接的密码策略,把证书策略改成旧的密码策略,不然需要弄证书
(1)mysql8.0
ALTER USER 'myuser'@'%' IDENTIFIED WITH mysql_native_password BY 'myuser-password'
这里%,查到myuser的主机是%的,不能写ip和localhost。
查看myuser账号是否生成,还有主机值
use mysql
select Host ,User from user
(2)mysql9.2
只能配置ssl证书,在主服务器配置证书
sudo yum install openssl
生成在当前目录的证书
openssl req -newkey rsa:2048 -days 365 -nodes -x509 -keyout server-key.pem -out server-cert.pem
配置my.cnf文件,指定证书路径
[mysqld]
ssl-ca=/<容器内部路径>/server-cert.pem
ssl-cert=/<容器内部路径>/server-cert.pem
ssl-key=/<容器内部路径>/server-key.pem
这里的容器内部路径,是之前启动run mysql时候挂载在宿主机对应的容器内部路径。
三、从库配置命令
mysql8.0写法
CHANGE MASTER TO
MASTER_HOST='192.168.1.5', -- 主服务器的Docker容器名或IP地址
MASTER_PORT=3306,
MASTER_USER='myuser', -- 主服务器上创建的用户名
MASTER_PASSWORD='myuser-password', -- 主服务器上创建的密码
MASTER_LOG_FILE='mysql-bin.000007', -- 从SHOW MASTER STATUS得到的File值
MASTER_LOG_POS=157; -- 从SHOW MASTER STATUS得到的Position值
START SLAVE;
SHOW SLAVE STATUS\G; -- 检查复制状态,确保Slave_IO_Running和Slave_SQL_Running都为Yes
mysql9.2写法
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='192.168.1.5', -- 主服务器的Docker容器名或IP地址
SOURCE_PORT=3306,
SOURCE_USER='myuser', -- 主服务器上创建的用户名
SOURCE_PASSWORD='myuser-password', -- 主服务器上创建的密码
SOURCE_LOG_FILE='mysql-bin.000007', -- 从SHOW MASTER STATUS得到的File值
SOURCE_LOG_POS=157; -- 从SHOW MASTER STATUS得到的Position值
START REPLICA;
SHOW REPLICA STATUS\G; -- 检查复制状态,确保Slave_IO_Running和Slave_SQL_Running都为Yes
这里用ssl证书密码策略,就算是主机装了证书,有可能会报caching_sha2_password错误。
解决办法:
远程链一次主服务器,由于使用自签名证书或者非标准CA签发的证书时。MySQL在首次连接时可能会缓存一些关于SSL会话的信息,这些信息在后续的连接中会被重用。
docker exec -it xinglei-mysql mysql -u myuser -h 192.168.1.5 -p
然后,stop replica;停止复制
reset replica;重置复制
重新看一次主机的二进制日志pos
再重复change replication source to**********
命令。
四、如果从库复制出错把主库日志刷新,重新配置从库命令
主库日志刷新sql命令:
FLUSH LOGS
环境
centos7
mysql8.0
mysql9.2.0
技术细节
修改复制链接密码策略
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 100;设置跳过错误次数
小结
各个数据库server_id必须不一样。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)