mysql拉取镜像
docker pull mysql:8.0.22
mysql主数据库安装
docker run -p 10000:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0.22
这就表示安装成功,我们可以用docker ps -a进行查看
注意看status的状态,如果是Exited请使用docker logs 容器id 查看报错日志
接着我们需要进入容器内部
docker exec -it mysql-master /bin/bash
切换到目录到mysql下
cd /etc/mysql
由于是第一次进入该容器内部,没有vim命令,需要更新库并安装vim
apt-get update
apt-get install vim
中途会提示是否继续,输入y确认即可
接着编辑my.cnf文件,添加下面三行
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能
log-bin=master-bin
## 二级制日志格式
binlog-format=ROW
完成后shift+:输入wq保存退出
接着我们需要通过命令连接到mysql,因为应用数据是分开的,需要调整数据库的远程登录方案
mysql -uroot -proot
然后修改数据库root密码加密方式
ALTER USER 'root'@'%' IDENTIFIED BY 'root' password EXPIRE NEVER;
修改数据库的root密码为root
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
刷新数据库的权限
FLUSH PRIVILEGES;
输入quit退出数据库 ,然后输入exit退出容器执行docker restart mysql-master重启容器生效
主库到此结束
配置从库1
docker run -p 10001:3306 --name mysql-slave1 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0.22
接着我们需要进入容器内部
docker exec -it mysql-slave1 /bin/bash
切换到目录到mysql下
cd /etc/mysql
由于是第一次进入该容器内部,没有vim命令,需要更新库并安装vim
apt-get update
apt-get install vim
中途会提示是否继续,输入y确认即可
接着编辑my.cnf文件,添加下面四行
[mysqld]
## 同一局域网内注意要唯一
server-id=101
## 开启二进制日志功能
log-bin=mysql-slave-bin
## 中继日志
relay_log=mysql-relay-bin
## 配置只读开启
read_only=1
完成后shift+:输入wq保存退出
接着我们需要通过命令连接到mysql,因为应用数据是分开的,需要调整数据库的远程登录方案
mysql -uroot -proot
然后修改数据库密码加密方式
ALTER USER 'root'@'%' IDENTIFIED BY 'root' password EXPIRE NEVER;
修改数据库的root密码为root
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
刷新数据库的权限
FLUSH PRIVILEGES;
输入quit退出数据库 ,然后输入exit退出容器执行docker restart mysql-slave1重启容器生效
从库1到此结束
配置从库2
docker run -p 10002:3306 --name mysql-slave2 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0.22
接着我们需要进入容器内部
docker exec -it mysql-slave2 /bin/bash
切换到目录到mysql下
cd /etc/mysql
由于是第一次进入该容器内部,没有vim命令,需要更新库并安装vim
apt-get update
apt-get install vim
中途会提示是否继续,输入y确认即可
接着编辑my.cnf文件,添加下面四行
[mysqld]
## 同一局域网内注意要唯一
server-id=102
## 开启二进制日志功能
log-bin=mysql-slave-bin
## 中继日志
relay_log=mysql-relay-bin
## 配置只读开启
read_only=1
完成后shift+:输入wq保存退出
接着我们需要通过命令连接到mysql,因为应用数据是分开的,需要调整数据库的远程登录方案
mysql -uroot -proot
然后修改数据库密码加密方式
ALTER USER 'root'@'%' IDENTIFIED BY 'root' password EXPIRE NEVER;
修改数据库的root密码为root
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
刷新数据库的权限
FLUSH PRIVILEGES;
输入quit退出数据库 ,然后输入exit退出容器执行docker restart mysql-slave2重启容器生效
从库1到此结束
重启这三个容器,或者重启docker使配置生效
systemctl restart docker
接着开始配置主从连接
进入master容器
docker exec -it mysql-master /bin/bash
mysql -uroot -proot
输入show master status;
查看Master状态:
记下File和Position,后面要用,接着quit退出数据库,exit退出容器
输入docker inspect mysql-master | grep "IPAddress" 查看master的docker内网地址并记下,后面要用
接着进入从1库
docker exec -it mysql-slave1 /bin/bash
mysql -uroot -proot
接着输入从库绑定主库
change master to master_host='172.17.0.2', master_user='root', master_password='root', master_port=3306, master_log_file='master-bin.000001', master_log_pos=156, master_connect_retry=30;
注意这里面的host就是内网地址,账号密码为配置的主库的特定账号密码,再就是端口是内部的不是外部的,file为查看的主库file,pos一样,后面是重试次数
查看主从的状态
show slave status \G;
主要查看红框的状态现在是没有开启主从,如果出错在error中查找
接着输入start slave;开启主从(可配置其他账号,博主配制出错了),接着查看状态
show slave status \G;
这样就成功了,slave2同上
主从同步就ok了,切记不要对从库进行操作,只能读
参考 https://blog.csdn.net/abcde123_123/article/details/106244181