Docker高级篇

1.Mysql主从复制Docker版本

mysql主从复制原理 binlog

1.新建主服务器容器实例

bash 复制代码
docker run -d -p 3307:3306 --privileged=true \
-v /opt/mysql8.4.3/log:/var/log/mysql \
-v /opt/mysql8.4.3/conf:/etc/mysql/conf.d \
-v /opt/mysql8.4.3/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
--name mysql-master \
mysql:8.4.3

8.0启动加一行 -v /home/mysql/mysql-files:/var/lib/mysql-files \

2.进入 /opt/mysql8.4.3/conf目录下创建my.cnf

bash 复制代码
vim my.cnf
bash 复制代码
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式 (mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。 默认值为0 ;表示不自动清理
## expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如: 1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

3.重启mysql

bash 复制代码
docker restart mysql-master

4.进入mysql-master容器

bash 复制代码
docker exec -it mysql-master /bin/bash
bash 复制代码
mysql -uroot -p

输入密码

bash 复制代码
root

5.master 容器实例内创建数据同步用户

-

创建一个用户 slave 密码是 123456

sql 复制代码
CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; 

给用户slave 分配权限来拿到对应的数据

sql 复制代码
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';

6.新建从服务器容器实例 3308

bash 复制代码
docker run -p 3308:3306 --privileged=true  --name mysql-slave \
-v /opt/mysql-slave/log:/var/log/mysql \
-v /opt/mysql-slave/data:/var/lib/mysql \
-v /opt/mysql-slave/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.4.3

7.进入 /mydata/mysql-slave/conf 目录下新建my.cnf

bash 复制代码
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能 以备Slave作为其他数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式 (mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。 默认值为0 ;表示不自动清理
## expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如: 1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
##relay_log 配置中继日志
relay_log=mall-mysql-relay-bin
##log_slave_updates表示 slave将复制事件写进自己的二进制日志
log_slave_updates=1
##slave设置为只读 (具有super权限的用户除外)
read_only=1

8.修改完配置后重启slave实例

bash 复制代码
docker  restart mysql-slave

9.在主数据库中查看主从同步的状态

mysql5.7

bash 复制代码
show master status

mysql 8以上用这个

bash 复制代码
SHOW BINARY LOG STATUS;

10. 进入mysql-slave 容器

bash 复制代码
docker exec -it mysql-slave /bin/bash
bash 复制代码
mysql -uroot -proot

11.在从数据库中配置主从复制

mysql 5.7

sql 复制代码
change master to master_host='192.168.181.132',master_user='slave',master_password='123456',master_port=3307,master_log_file='mall-mysql-bin.000004',master_log_pos=158,master_connect_retry=30;

mysql 8以上

sql 复制代码
CHANGE REPLICATION SOURCE TO
SOURCE_HOST = '192.168.181.132',
SOURCE_USER = 'slave',
SOURCE_PASSWORD = '123456',
SOURCE_PORT = 3307,
SOURCE_LOG_FILE = 'mall-mysql-bin.000004',
SOURCE_LOG_POS = 158,
SOURCE_SSL = 1,
SOURCE_SSL_CA = '/etc/mysql/conf.d/cert/jmjca.cer',
SOURCE_CONNECT_RETRY = 30;

12.在从数据库中查看主从同步的状态

mysql5.7

sql 复制代码
show slave status;

键值对显示

sql 复制代码
show slave status \G;

mysql 8以上

sql 复制代码
SHOW REPLICA STATUS \G;

no 代表未开始同步

13. 在从数据库中开启主从同步状态

mysql 5.7

sql 复制代码
start slave;

##IO:no解决方法: 在备库执行 stop slave; reset slave; start slave;

mysql 8.0 以上

sql 复制代码
START REPLICA;

14.查看从数据库状态发现已经同步

sql 复制代码
SHOW REPLICA STATUS \G;

mysql 8.0 以上

但是第一个为 connecting 状态

需要在主机中执行如下命令

执行1:

sql 复制代码
ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

执行2:

sql 复制代码
flush privileges;

再重新启动slave即可为 YES

15.主从复制测试

相关推荐
XIAOHEZIcode18 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220701 天前
如何搭建本地yum源(上)
运维
武子康1 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn864 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化