云原生 | Docker - [mysql 集群搭建]
@
§1 镜像
docker pull mysql:5.7
§2 主机目录
目录层级遵循
${prefix}/cluster/host/xx
如:
- /docker/mysql/cluster_01/master_01/log
- /docker/mysql/cluster_01/master_01/data
- /docker/mysql/cluster_01/master_01/conf
- /docker/mysql/cluster_01/slave_01/log
- /docker/mysql/cluster_01/slave_01/data
- /docker/mysql/cluster_01/slave_01/conf
§3 主从复制部署
§3.1 主节点
启动
docker run -d -p 13306:3306 \
-v /docker/mysql/cluster_01/master_01/log:/var/log/mysql \
-v /docker/mysql/cluster_01/master_01/data:/var/lib/mysql \
-v /docker/mysql/cluster_01/master_01/conf:/etc/mysql/conf.d \
--name=m1 \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7
添加 root 外部访问权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
增加主从复制用户 slave 并授权
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES;
连接验证

§3.2 从节点
启动
docker run -d -p 13307:3306 \
-v /docker/mysql/cluster_01/slave_01/log:/var/log/mysql \
-v /docker/mysql/cluster_01/slave_01/data:/var/lib/mysql \
-v /docker/mysql/cluster_01/slave_01/conf:/etc/mysql/conf.d \
--name=s1 \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7
添加 root 外部访问权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
连接验证

§3.3 配置主从
主节点查看主从同步状态
SHOW MASTER STATUS;

关联 主节点
CHANGE MASTER TO master_host = '192.168.3.11',
master_user = 'slave',
master_password = '123456',
master_port = 13306,
master_log_file = 'mall-mysql-bin.000003',
master_log_pos = 1182,
master_connect_retry = 30
参数说明
- master_host 主数据库 ip
- master_port 主数据库端口
- master_user 主数据库用于主从同步的账号
- master_password 主数据库用于主从同步的账号的密码
- master_log_file 从库监听的 binlog 日志文件,对应主节点组从同步状态的 FILE 字段
- master_log_pos 从库监听的 binlog 日志文件的位置,对应主节点组从同步状态的 POSITION字段
- master_connect_retry 失败重连时间间隔,单位 秒
从节点下开启主从复制
start slave;
从节点查看主从同步状态
命令行下可以添加 \G 以垂直显示
SHOW SLAVE STATUS \G
若未开启从节点的主从复制,红框处为 No

主从复制验证
在主库创建一个数据库验证效果


主从复制失效
主从复制失效时可以查看下图红框处,可能为 No
此时查看 Last_Errno,可以看到最后错误的编号,Last_Error 会有最后错误的描述

方式1:
-
停止主从同步
stop slave; -
忽略为执行的同步
set global sql_slave_skip_counter=1; -
重启同步
start slave;
方式2:
- 配置从库 slave_skip_errors 添加 Last_Errno
- 重启容器
§3.4 多主多从
示意图如下,每个红框为一组主从,每一组主从不一定只有一个从
mysql 的主从复制是从 从节点 开启的,因此,可以搭建多个主从结构,然后主节点之间互为主从即可


浙公网安备 33010602011771号