概要

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必须不一样。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐