两台服务器拉取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 [email protected] 将公钥发送到另一个节点
ssh [email protected] 测试是否是免密登录
然后来构建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 '[email protected]: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版本互为主从配置完成。