Docker 容器搭建mysql 集群(主从数据库)

目录

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 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当前运行容器代码

docker ps

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

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

 

 拷贝命令:

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

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

原文件内容:

修改后文件内容:

添加的代码:

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

注意事项:

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

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

命令:

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

 注意事项:

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

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

停止命名:

docker stop 0a70ced7b5e1

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

 启动命令:

docker start 0a70ced7b5e1

3.5查看是否启动

3.6进入容器

 

进入容器命令:

docker exec -it 0a70ced7b5e1 /bin/bash

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

3.7进入mysql

进入mysql命令

mysql -uroot -p123456

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

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

创建账户命令:

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

创建的账户信息:

账户:test,密码:123456

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

查看命令:

show master status;

 注意事项:

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

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

4.1创建从数据库

创建命令:

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

 查看是否创建成功:

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

修改后的内容:

 添加的代码:

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

4.3重新启动从数据库容器

命令:

docker stop ba369b71c60f; docker start ba369b71c60f;

4.4进入容器

 进入命令:

docker exec -it ba369b71c60f /bin/bash

4.5进入mysql

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

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

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

获取端口命令:

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;

连接主数据实例:

4.7开启主从复制

命令:

start slave;

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

先停掉主从复制,命令:

stop slave;

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

reset slave;

开启主从复制,命令:

start slave;

4.8查看是否开启

命令:

show slave status\G

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

5.完结撒花。

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

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值