目录

1.背景        

2.设备及软件版本

3.开始搭建(这里不介绍安装docker及mysql)

3.1创建主数据库容器(master)

3.2查看容器是否创建成功

3.3进入修改容器下的/etc/my.cnf文件

3.3.1先拷贝my.cnf到容器外修改完再覆盖容器原来的my.cnf文件

3.4重启mysql容器使配置文件生效

3.5查看是否启动

3.6进入容器

3.7进入mysql

3.8创建一个新的账户test(用来下面从数据库访问主数据库)

3.9查看当前主数据库binglog日志状态 

4.创建从数据库(slave)(下面类似命令就不解释了)

4.1创建从数据库

4.2修改/etc/my.cof文件(参考上面主数据库的方式修改)

4.3重新启动从数据库容器

4.4进入容器

4.5进入mysql

4.6准备从数据库连接主数据库内容

4.6.1获取主数据库容器的ip地址

4.6.2用上面参数替换下面命令中的参数

4.7开启主从复制

4.8查看是否开启

5.完结撒花。


1.背景        

        脑子抽风想研究一下 Docker 容器 搭建mysql集群。

2.设备及软件版本

  1. 电脑:Mac bookPro 2021 M1 14寸,系统:MOS 13.0.1 (22A400)
  2. Docker:Docker version 20.10.17, build 100c701
  3. mysql:mysql 5.7

3.开始搭建(这里不介绍安装docker及mysql)

3.1创建主数据库容器(master)

docker mysql 新建用户 docker创建mysql数据库_主数据

创建容器代码: 

docker run -id \
--name=mysql_master \
-p 3307:3306 \
-v $PWD/master/conf:/etc/mysql/conf.d \
-v $PWD/master/logs:/logs \
-v $PWD/master/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7

创建容器代码介绍:

docker run -id \                        
--name=mysql_master \
-p 3307:3306 \
-v $PWD/master/conf:/etc/mysql/conf.d \
-v $PWD/master/logs:/logs \
-v $PWD/master/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7

介绍:
-id : 是 -i, -d 的组合写法(也可以写成:-di)
• -i:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭。 

• -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。 

• -d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容器不会关闭。
• --name=mysql_master:容器的别名。
• -p 3307:3306**:将容器的 3306 端口映射到宿主机的 3307 端口。
• -v $PWD/conf:/etc/mysql/conf.d**:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。配置目录。
• -v $PWD/logs:/logs**:将主机当前目录下的 logs 目录挂载到容器的 /logs。日志目录。
• -v $PWD/data:/var/lib/mysql** :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。数据目录。
• -e MYSQL_ROOT_PASSWORD=123456:**初始化 root 用户的密码。
• 上面提到的“$PWD”是获取当前目录下路径

3.2查看容器是否创建成功

docker mysql 新建用户 docker创建mysql数据库_数据库_02

查看docker当前运行容器代码

docker ps

3.3进入修改容器下的/etc/my.cnf文件

3.3.1先拷贝my.cnf到容器外修改完再覆盖容器原来的my.cnf文件

docker mysql 新建用户 docker创建mysql数据库_主数据_03

 

docker mysql 新建用户 docker创建mysql数据库_数据库_04

 拷贝命令:

docker cp 0a70ced7b5e1:/etc/my.cnf /Users/hicheer/

注意事项:命令中的“0a70ced7b5e1”改为自己的容器id,“/Users/hicheer/”改为自己要拷贝的位置

原文件内容:

docker mysql 新建用户 docker创建mysql数据库_docker mysql 新建用户_05

修改后文件内容:

docker mysql 新建用户 docker创建mysql数据库_主数据_06

添加的代码:

log-bin=mysql-bin
server-id=1

注意事项:

  1. 一定要添加到 [mysqld] 下面 
  2. server-id=1(一定要唯一,如果有其他mysql容器配置了server-id=1,修改server-id为其他值)

将修改后的文件覆盖回去:

docker mysql 新建用户 docker创建mysql数据库_主数据_07

命令:

docker cp /Users/hicheer/my.cnf 0a70ced7b5e1:/etc/

 注意事项:

  1. 这次是拷贝回去文件,记得把位置颠倒一下

3.4重启mysql容器使配置文件生效

docker mysql 新建用户 docker创建mysql数据库_数据库_08

停止命名:

docker stop 0a70ced7b5e1

注意事项:命令中的“0a70ced7b5e1”改为自己的容器id

docker mysql 新建用户 docker创建mysql数据库_数据库_09

 启动命令:

docker start 0a70ced7b5e1

3.5查看是否启动

docker mysql 新建用户 docker创建mysql数据库_docker_10

3.6进入容器

 

docker mysql 新建用户 docker创建mysql数据库_docker_11

进入容器命令:

docker exec -it 0a70ced7b5e1 /bin/bash

 注意事项:代码中间的“0a70ced7b5e1”改为自己的容器id

3.7进入mysql

docker mysql 新建用户 docker创建mysql数据库_数据库_12

进入mysql命令

mysql -uroot -p123456

注意:命令中"-u"后面的是账户,“-p”后面的是密码

3.8创建一个新的账户test(用来下面从数据库访问主数据库)

docker mysql 新建用户 docker创建mysql数据库_docker_13

创建账户命令:

grant replication slave on *.* to 'test'@'%' identified by '123456'; flush privileges;

创建的账户信息:

账户:test,密码:123456

3.9查看当前主数据库binglog日志状态 

docker mysql 新建用户 docker创建mysql数据库_mysql_14

查看命令:

show master status;

 注意事项:

  1. 这里主要看看两个参数:“File” 与 “Position” 记住并复制到记事本上,等下要用。
  2. 其他参数有没有值都无所谓

4.创建从数据库(slave)(下面类似命令就不解释了)

4.1创建从数据库

docker mysql 新建用户 docker创建mysql数据库_数据库_15

创建命令:

docker run -id \
--name=mysql_slave \
-p 3308:3306 \
-v $PWD/slave/conf:/etc/mysql/conf.d \
-v $PWD/slave/logs:/logs \
-v $PWD/slave/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7

 查看是否创建成功:

docker mysql 新建用户 docker创建mysql数据库_docker mysql 新建用户_16

4.2修改/etc/my.cof文件(参考上面主数据库的方式修改)

修改后的内容:

docker mysql 新建用户 docker创建mysql数据库_docker_17

 添加的代码:

log-bin=mysql-bin
server-id=2

4.3重新启动从数据库容器

docker mysql 新建用户 docker创建mysql数据库_docker mysql 新建用户_18

命令:

docker stop ba369b71c60f; docker start ba369b71c60f;

4.4进入容器

docker mysql 新建用户 docker创建mysql数据库_数据库_19

 进入命令:

docker exec -it ba369b71c60f /bin/bash

4.5进入mysql

docker mysql 新建用户 docker创建mysql数据库_主数据_20

4.6准备从数据库连接主数据库内容

  1. 获取主数据库容器的ip地址,端口号(主意⚠️:这里的端口好是默认的3306,并不是主数据库的3307)
  2. 刚才保存的两个参数:“File” 与 “Position”
  3. 刚才创建的账户:test,密码:123456

4.6.1获取主数据库容器的ip地址

docker mysql 新建用户 docker创建mysql数据库_数据库_21

获取端口命令:

docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

4.6.2用上面参数替换下面命令中的参数

change master to master_host='你的IP', master_user='test账户名', master_password='test账户密码', master_port=默认端口号, master_log_file='你保存的File参数值', master_log_pos=你保存的Position参数值, master_connect_retry=30;

连接主数据实例:

docker mysql 新建用户 docker创建mysql数据库_docker mysql 新建用户_22

4.7开启主从复制

docker mysql 新建用户 docker创建mysql数据库_docker_23

命令:

start slave;

 注意我这边启动报错了!!!

先停掉主从复制,命令:

stop slave;

重新设置开启主从复制,命令:

reset slave;

开启主从复制,命令:

start slave;

docker mysql 新建用户 docker创建mysql数据库_数据库_24

4.8查看是否开启

命令:

show slave status\G

docker mysql 新建用户 docker创建mysql数据库_mysql_25

 注意:只要这两个参数不是YES(有些是TRUE),都是有问题的

5.完结撒花。

下面有mysql工具试一下吧,无论是写命令,还是直接在表里面添加数据都是可以同步的。