通过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

 

posted @ 2022-04-17 21:04  此间的少年no  阅读(160)  评论(0编辑  收藏  举报