docker搭建mysql主从全过程
一、linux创建配置文件、文件夹
在/usr/local/先创建software文件夹,再在software下创建mysql文件夹,文件结构如下
![]()


二、拷贝my.cnf文件到conf文件夹下

三、查询拉取mysql镜像
docker search mysql

四、拉取mysql镜像到本地(linux)
docker pull mysql
结果:拉取的是最新版本
![]()
五、查询镜像检查是否已下载到本地
docker image ls

六、创建运行mysql容器(master)
创建容器并运行
- i:以交互模式运行容器
-
t:为容器重新分配一个伪输入终端
-
name :容器名称
- privileged: 设置容器公开权限(默认为true)
- p :映射端口 linux端口: 容器内置端口(mysql默认端口为3306)
- v : linux挂载文件夹/文件和容器内路径的映射
-
e: 容器的环境变量(设置mysql默认用户名&密码)
-
d: 后台运行容器,并返回容器ID
注意路径要和自己实际情况保持一致
docker run -it \
--name mysql_3306 \
--privileged \
-p 3306:3306 \
-v /usr/local/software/mysql/3306/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/software/mysql/3306/data:/var/lib/mysql \
-v /usr/local/software/mysql/3306/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=sxq123456 \
-d mysql
七、进入容器
docker exec
- -it:以交互模式运行容器 ,为容器重新分配一个伪输入终端。
- bash: bash(GNU Bourne-Again Shell)是最常用的一种shell(运行在终端的互动程序)。
docker exec -it mysql_3306 bash
![]()
八、容器中运行mysql客户端
登录mysql客户端: mysql -u用户名 -p密码
如果登录成功,则docker安装mysql成功。

九、退出容器,防火墙开放端口
退出容器

开放指定端口
firewall-cmd —zone=public —add-port=端口号/tcp —permanent
—zone: public 公开端口
—add-port: 端口号/协议名称
—permanent: 永久开放
firewall-cmd --zone=public --add-port=3306/tcp --permanent
重新加载防火墙
firewall-cmd —reload
十、navicat测试连接

主机地址与ip地址相同,密码为设置的密码。

十一、检查binlog是否开启
mysql> show variables like 'log_%';
on 表示已开启

十二、查看当前mysql容器中的binlog日志文件
切换目录到 / var/lib/mysql,查看日志文件
mysql> quitByeroot@1b32ebb973d1:/# cd /var/lib/mysqlroot@1b32ebb973d1:/var/lib/mysql#

也可查看binlog.index查看日期情况
root@1b32ebb973d1:/var/lib/mysql# cat binlog.index./binlog.000001./binlog.000002./binlog.000003./binlog.000004
当前mysql数据库binlog情况
登录mysql客户端: mysql -uroot -p123
使用命令: show master status;
mysql> show master status;+---------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+---------------+----------+--------------+------------------+-------------------+| binlog.000004 | 156 | | | |+---------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)
当前显示/var/lib/mysql/日志文件的最后一个文件

十三、搭建mysql(master)服务器
编辑my.cnf


十四、创建与从(slave)服务通信的用户
-- 创建用户--
create user 'slave'@'%' IDENTIFIED WITH mysql_native_password by 'sxq123456';
-- 给用户授权 --
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';
-- 应用授权 --
flush PRIVILEGES

十五、查询master的状态
show master status

十六、获取master容器ip地址
[root@localhost conf]# docker inspect mysql_3306 |grep IPA

十七、搭建mysql(slave)从服务器3310
重复步骤一和二,文件夹命名为3310
十八、修改3310内的配置文件
重复步骤13,将my.cnf修改为如图下所示

十九、创建运行slave01容器
重复步骤6,如下所示
docker run -it \--name mysql_3310 \--privileged \-p 3310:3306 \-v /usr/local/software/mysql/3310/conf/my.cnf:/etc/mysql/my.cnf \-v /usr/local/software/mysql/3310/data:/var/lib/mysql \-v /usr/local/software/mysql/3310/mysql-files:/var/lib/mysql-files \-e MYSQL_ROOT_PASSWORD=123 \-d mysql
二十、防火墙开放3310端口
如步骤九所示,3306改为3310
二十一、navicat测试
重复步骤10,3306改为3310
二十二、配置主从
修改从(slave)服务器与master关联
进入从(slave)容器中,输入命令 change master to 参数 …
change master to
master_host='172.17.0.2',
master_user='slave',
master_password='sxq123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=8748;

MASTER_LOG_POS与Position的值一致。
二十三、开启并查询slave
在mysql容器中
start slave;
show slave status \G;
![]()
均为yes,则主从配置成功。