创建mysql持久化目录
mkdir -p /data/mysql-slave-node1/data
mkdir -p /data/mysql-slave-node2/data
mkdir -p /data/mysql-master-node/data
创建配置文件
my.cnf 更多配置可参考dev.mysql.com/doc/refman/…
[mysqld]
# 禁用主机名缓存
skip-host-cache
# 禁用DNS主机名查找
skip-name-resolve
# 持久化目录
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
# serverID 每个mysql节点唯一,注意修改
server-id=1
从服务的配置增加如下配置
# 切记从服务配置
read_only = 1
relay_log_purge = 0
搭建mysql主节点
mysql镜像版本可以选择 5.6, 5.7, 8.0, or latest
docker run --name=mysql-master-node \
-p 33061:3306 \
-v /etc/localtime:/etc/localtime:ro \
-v /data/mysql-master-node/my.cnf:/etc/my.cnf \
--mount type=bind,src=/data/mysql-master-node/data,dst=/var/lib/mysql \
-d mysql/mysql-server:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
搭建mysql从节点1
docker run --name=mysql-slave-node1 \
-p 33062:3306 \
-v /etc/localtime:/etc/localtime:ro \
-v /data/mysql-slave-node1/my.cnf:/etc/my.cnf \
--mount type=bind,src=/data/mysql-slave-node1/data,dst=/var/lib/mysql \
-d mysql/mysql-server:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
搭建mysql从节点2
docker run --name=mysql-slave-node2 \
-p 33063:3306 \
-v /etc/localtime:/etc/localtime:ro \
-v /data/mysql-slave-node2/my.cnf:/etc/my.cnf \
--mount type=bind,src=/data/mysql-slave-node2/data,dst=/var/lib/mysql \
-d mysql/mysql-server:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
每个节点执行以下命令 修改默认密码
获取初始密码
# 从日志中获取 初始密码
# 查看日志中password的字段
docker logs mysql-master-node
# 或者
docker logs mysql-master-node 2>&1 | grep GENERATED
- 如下:
2022-02-02T14:05:36.319858Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: /var/run/mysqld/mysqlx.sock
Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/tzdata.zi' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
[Entrypoint] GENERATED ROOT PASSWORD: 70%6E^j2,x%.yoti_HehG;2p*65bAzz5
#进入容器
docker exec -it mysql-master-node mysql -uroot -p'密码'
#修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
#创建用户
CREATE USER 'master_user'@'%' IDENTIFIED BY 'password';
#授权远程访问
grant all on *.* to 'master_user'@'%';
开放端口:
firewall-cmd --zone=public --add-port=33061/tcp -permanent
firewall-cmd --reload
查看主库状态
SHOW MASTER STATUS;
配置从库
在从库执行如下sql
CHANGE MASTER TO
MASTER_HOST='xx.xx.xx.xx',
MASTER_PORT=33061,
MASTER_USER='master_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='binlog.000002',
MASTER_LOG_POS=1757;
从库开启同步服务、查看状态
-- 开启从服务
start slave;
--查看从服务状态
show slave status;
参考文献