目录
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.设备及软件版本
- 电脑:Mac bookPro 2021 M1 14寸,系统:MOS 13.0.1 (22A400)
- Docker:Docker version 20.10.17, build 100c701
- 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
注意事项:
- 一定要添加到 [mysqld] 下面
- server-id=1(一定要唯一,如果有其他mysql容器配置了server-id=1,修改server-id为其他值)
将修改后的文件覆盖回去:
命令:
docker cp /Users/hicheer/my.cnf 0a70ced7b5e1:/etc/
注意事项:
- 这次是拷贝回去文件,记得把位置颠倒一下
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;
注意事项:
- 这里主要看看两个参数:“File” 与 “Position” 记住并复制到记事本上,等下要用。
- 其他参数有没有值都无所谓
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准备从数据库连接主数据库内容
- 获取主数据库容器的ip地址,端口号(主意⚠️:这里的端口好是默认的3306,并不是主数据库的3307)
- 刚才保存的两个参数:“File” 与 “Position”
- 刚才创建的账户: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),都是有问题的文章来源:https://www.toymoban.com/news/detail-478091.html
5.完结撒花。
下面有mysql工具试一下吧,无论是写命令,还是直接在表里面添加数据都是可以同步的。文章来源地址https://www.toymoban.com/news/detail-478091.html
到了这里,关于Docker 容器搭建mysql 集群(主从数据库)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!