> 文章列表 > Docker部署mysql8.x版本互为主从

Docker部署mysql8.x版本互为主从

Docker部署mysql8.x版本互为主从

两台服务器拉取mysql8.x镜像

192.168.197.136

192.168.197.137

docker pull mysql:8.0.28

两台服务器配置免密登录

生成秘钥   ssh-keygen   (一路回车默认即可)

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.197.137   将公钥发送到另一个节点

ssh root@192.168.197.137   测试是否是免密登录

然后来构建mysql容器

Master1

docker run -itd --name=master1 --net=host --restart=always -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.28

docker cp master1:/etc/mysql/my.cnf .   将配置文件拷贝出来

vim my.cnf    编辑配置文件

[mysqld]

server-id=1

log-bin=mysql-bin

skip-name-resolve

log_replica_updates

lower_case_table_names=1

interactive_timeout=7200

wait_timeout=86400

max_connections=4000

back_log=100

binlog_expire_logs_seconds=3

max_binlog_size=100M

character_set_server=utf8

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO

docker cp my.cnf  master1:/etc/mysql/my.cnf   编辑好的配置文件在拷贝进容器

docker restart master1  重启master1

然后进入数据库中创建主从同步用户

docker exec -it master1  mysql -uroot -p123456

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';   创建主从同步用户

GRANT ALL PRIVILEGES ON *.* TO slave; 给同步用户授权

flush privileges; 刷新一下

show master status\\G   看下binlog日志起始位置

reset master;   清除binglog日志命令

master2操作

scp my.cnf  192.168.197.137:/root/    把配置文件直接发送一份给另一节点

vim my.cnf  修改一下 server-id 参数 两个节点不能相同

         

docker run -itd --name=master2 --net=host --restart=always -v /root/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.28     启动容器

然后进入数据库中创建主从同步用户

docker exec -it master2  mysql -uroot -p123456

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';   创建主从同步用户

GRANT ALL PRIVILEGES ON *.* TO slave; 给同步用户授权

flush privileges; 刷新一下

show master status\\G   看下binlog日志起始位置

master1节点操作

docker exec -it master1  mysql -uroot -p123456

下面进行主主同步配置change操作前要先

stop slave;

然后 \\e进入编辑  

报错了说是没有编辑器,需要下载一下

apt-get update

apt-get install vim

\\e   然后编辑

change master to

master_host='192.168.197.137',

master_user='slave',

master_password='123456',

master_port=3306,

master_log_file='mysql-bin.000001',

master_log_pos=157,

master_connect_retry=60;

配置好后保存退出

master2节点操作

docker exec -it master1 /bin/bash

apt-get update

apt-get install vim   下载一下vim

mysql -uroot -p123456

下面进行主主同步配置change操作前要先

stop slave;

然后 \\e进入编辑  

change master to

master_host='192.168.197.136',

master_user='slave',

master_password='123456',

master_port=3306,

master_log_file='mysql-bin.000001',

master_log_pos=157,

master_connect_retry=60;

配置好后保存退出

start slave;  两个节点都要启动slave

show slave status \\G; 启动后查看同步状态

发现             Slave_IO_Running: Connecting  是失败的

报错是mysql8.x版本密码插件导致的                Last_IO_Error: error connecting to master 'slave@192.168.197.136:3306' - retry-time: 60 retries: 1 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.

这边做一下修改slave用户密码插件的操作两个节点都操作

use mysql

select host ,user ,plugin  from user;      查看一下用户的密码插件

alter user 'slave'@'%' identified with mysql_native_password by '123456';   把slave的密码策略换成 mysql_native_password

  

两台服务器同步效果不正常,都要进行以下操作: 在2台机器数据保持一致的情况 下。 从节点: stop slave; #停止同步 reset slave; #清除主节点信息 主节点: reset master; #清除bin1og日志

然后操作stop slave; 然后 \\e进入编辑 按照上面的步骤在来一遍即可

  

show slave status \\G; 完成后查看同步状态

 

配置成功后在master1创建库表进行查看是否同步

create database db_2023888;

show databases;    master2节点查看

Mysql8.x版本互为主从配置完成。