docker MySQL主从双备
Xy-Huang 人气:0环境配置
本地操作系统:Win10
虚拟机的操作系统:CentOS Stream 8
已安装docker,可以参考详细安装教程
MySQL基础知识
搭建MySQL主从双备是在docker情况下自定义MySQL的配置文件,在上一节我们讲述了如何挂载docker的MySQL数据文件,其中run指令参数-v /home/mysql/conf:/etc/mysql/conf.d是挂载MySQL的配置文件。
当我们通过指令进入docker内部查看MySQL配置文件的时候,发现/etc/mysql/conf.d只是一个文件夹,同目录情况下分别有配置文件my.cnf和my.cnf.fallback,如图所示
在MySQL中,/etc/mysql/my.cnf 是默认配置文件,/etc/conf.d/ 下的文件为自定义配置文件,比如 /etc/mysql/conf.d/my.cnf 文件。
由于docker的/etc/mysql/conf.d文件挂载到本地系统的/home/mysql/conf,因此我们只需在本地系统的/home/mysql/conf写入配置文件即可修改docker的MySQL配置。
搭建主MySQL
由于docker的mysql默认使用/etc/mysql/my.cnf的配置文件,如果要自定义配置文件,需要进入docker的MySQL获取默认配置文件/etc/mysql/my.cnf的配置信息,然后在本地系统的/home/mysql/conf编写配置文件。
假设主MySQL的容器名称为mysql10 ,docker启动指令如下:
docker run --name mysql10 -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 -d mysql
进入docker获取MySQL默认配置信息方法如下:
# 进入容器,mysql10 是容器名称 docker exec -it mysql10 bash # 查看MySQL默认配置文件 cat /etc/mysql/my.cnf
上述指令执行结果如图所示
将上图的配置信息写入本地系统的自定义配置文件/home/mysql/conf/mysql.cnf,并添加属性log-bin和server-id
[mysqld] pid-file=/var/run/mysqld/mysqld.pid socket=/var/run/mysqld/mysqld.sock datadir=/var/lib/mysql secure-file-priv= NULL # 开启二进制日志,属性值mysql-bin 是日志的基本名或前缀名 log-bin=mysql-bin # server-id可随便设置,但必须保证是唯一,数值为1到2的32次方–1之间的一个正整数 server-id=2
配置文件完成后,使用指令docker restart mysql10重启docker
搭建从MySQL
假设主MySQL的容器名称为mysql11,docker启动指令如下:
docker run --name mysql11 -p 3307:3306 -v /home/mysql11/conf:/etc/mysql/conf.d -v /home/mysql11/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 -d mysql
在本地系统的/home/mysql11/conf编写自定义配置文件mysql.cnf,如下所示:
[mysqld] pid-file=/var/run/mysqld/mysqld.pid socket=/var/run/mysqld/mysqld.sock datadir=/var/lib/mysql secure-file-priv= NULL # 开启二进制日志,属性值mysql-bin 是日志的基本名或前缀名 log-bin=mysql-bin # server-id可随便设置,但必须保证是唯一,数值为1到2的32次方–1之间的一个正整数 server-id=3
配置文件完成后,使用指令docker restart mysql11重启docker
配置主从复制
现在我们已搭建两个docker容器,每个容器分别运行端口3306和3307的MySQL,并且对每个MySQL设置了自定义配置文件。下一步在从MySQL设置主MySQL的监听功能,我们使用Navicat Premium 15连接从MySQL,然后执行下面SQL语句,这样就能实现主从复制,代码如下:
-- 监听主MySQL CHANGE MASTER TO -- 主MySQL的IP、端口、用户名和密码 MASTER_HOST = '192.168.3.250', MASTER_PORT = 3306, MASTER_USER = 'root', MASTER_PASSWORD = '1234'; -- 开启监听功能 START SLAVE; -- 查询监听状态 SHOW SLAVE STATUS;
执行上述SQL语句之后,在查询结果找到Slave_IO_Running和Slave_SQL_Running,如果两个字段的值皆为Yes则说明配置成功,如图所示:
如果配置失败,则可以通过docker指令查看日志记录,指令如下:
# mysql11是从MySQL的容器名称 docker logs mysql11 -f
大部分配置失败都是主MySQL的IP、端口、用户名和密码错误导致的,具体信息还得分析docker的日志记录。
拓展
至此,我们已完成2台MySQL服务的主从双备功能(从复制主),功能测试可以在Navicat Premium 15自行测试。
此外还可以实现主从互备(从复制主,主复制从)、搭建多台MySQL的主从关系等功能,这些功能主要在配置文件my.cnf添加相应配置属性和执行对应SQL语句。
加载全部内容