通过Docker搭建Mysql主从复制
1. 更新yum镜像仓库
yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2,这两个是 devicemapper 必要依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
设置docker的源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2. 搭建Docker环境
安装docker
#查看docker版本
yum list docker-ce --showduplicates
#安装默认的docker-ce
yum install docker-ce
# 获取自己的阿里云镜像加速器地址地址 https://cr.console.aliyun.com/
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["镜像加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
3.尝试拉取并启动MySQL镜像
docker pull mysql:5.7 #拉取MySQL5.7版本
docker images #查看镜像文件
docker run -d -e MYSQL_ROOT_PASSWORD=mysql -p 13306:3306 c20987f18b13 #启动MySQL镜像,并将端口绑定到13306
mysql -h127.0.0.1 -u root -P3306 -pmysql #登录mysql,前提本地装有MySQL客户端
docker run -d -e MYSQL_ROOT_PASSWORD=mysql -p 13305:3306 c20987f18b13 #启动另一个mysql容器,并将端口绑定到13305
目前已经有两的mysql容器运行起来了
4.配置主从复制MySQL
4.1 修改MySQL的Master节点的配置
- 进入到master容器中 : docker exec -it a35bf635eabf /bin/bash
- 为容器安装vim工具: apt-get update && apt install vim procps
- 在my.cnf中添加如下配置(在容器中修改)
[mysqld]
log-bin = master-bin
log-bin-index = master-bin.index
server-id = 1
- 在master上创建一个复制用户,并对此用户赋予复制的权限
mysql> create user repl_user; Query OK, 0 rows affected (0.00 sec) mysql> grant replication slave on *.* to repl_user identified by 'passwd'; Query OK, 0 rows affected, 1 warning (0.00 sec)
- 重启mysql,即重启docker容器即可
4.2 修改MySQL的Slave节点的配置
- 在my.cnf中添加如下配置(在容器中修改)
[mysqld]
relay-log = slave-relay-bin
relay-log-index = slave-relay-bin.index
- server-id = 2
- 重启mysql,即重启docker容器即可
4.3 将slave指向master
下边的命令要在slave的MySQL中执行
mysql -h 127.0.0.1 -u root -P13305 -ppasswd mysql> change master to MASTER_HOST='192.168.226.101',MASTER_PORT=13306,MASTER_USER='repl_user',MASTER_PASSWORD='passwd'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> start slave; Query OK, 0 rows affected (0.00 sec) mysql> show slave status;
5. 数据同步结果查看
5.1 主节点mysql写入数据
mysql -h 127.0.0.1 -u root -P13306 -p
mysql> create database myTestDB -> ; Query OK, 1 row affected (0.00 sec) mysql> use myTestDB; Database changed mysql> create table myTestTable (id int ,name char(20) ); Query OK, 0 rows affected (0.00 sec) mysql> insert into myTestTable values (1,'zhangsan'),(2,'lisi'); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0
5.2 从节点mysql查询数据
6. 将容器保存为镜像
[root@hd1 ~]# docker commit a35bf635eabf mysql_master sha256:bf6f17a24929449a075558ad917f81f163366efb93c94542490bd64ef2c3fc66 [root@hd1 ~]# docker commit 235b9e1de859 mysql_slave sha256:b59e4b5f2071f8be86dd94106dd06aa5c083ac795d4acf51f66fe9646f5a7f7a [root@hd1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql_slave latest b59e4b5f2071 7 seconds ago 500MB mysql_master latest bf6f17a24929 23 seconds ago 500MB mysql 5.7 c20987f18b13 3 months ago 448MB centos/mysql-57-centos7 latest f83a2938370c 2 years ago 452MB
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了