docker实现MySQL主从双备的示例代码

 更新时间:2022年01月27日 10:27:14   作者:Xy-Huang  
本文主要介绍了docker实现MySQL主从双备,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

环境配置

本地操作系统: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语句。

到此这篇关于docker实现MySQL主从双备的文章就介绍到这了,更多相关docker实现MySQL主从双备内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker搭建fastdfs环境的方法步骤

    docker搭建fastdfs环境的方法步骤

    在实际使用中,通过源码编译安装过程非常复杂,但是通过docker快速构建却非常容易,本文主要介绍了docker搭建fastdfs环境,具有一定的参考价值,感兴趣的可以了解一下
    2022-06-06
  • 基于Docker镜像部署go项目的方法步骤

    基于Docker镜像部署go项目的方法步骤

    这篇文章主要介绍了基于Docker镜像部署go项目的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • ubuntu14.04+docker的安装及使用

    ubuntu14.04+docker的安装及使用

    这篇文章主要介绍了在ubuntu14.04中安装docker的方法以及docker的使用指南,非常简单实用,有需要的朋友可以参考下
    2014-10-10
  • Docker环境搭建Jenkins在构建任务时控制台日志出现中文乱码的问题

    Docker环境搭建Jenkins在构建任务时控制台日志出现中文乱码的问题

    这篇文章主要介绍了Docker环境搭建Jenkins在构建任务时控制台日志出现中文乱码的问题,本文通过图文并茂的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 详解如何获取docker容器(container)的ip地址

    详解如何获取docker容器(container)的ip地址

    这篇文章主要介绍了详解如何获取docker容器(container)的ip地址,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • CentOS 8安装docker最详细方法

    CentOS 8安装docker最详细方法

    本文给大家介绍CentOS 8安装docker最详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-11-11
  • docker compose快速开始超详细教程

    docker compose快速开始超详细教程

    docker-compose是基于docker的开源项目,托管于github上,由python实现,调用 docker服务的API负责实现对docker容器集群的快速编排,即通过一个单独的yaml文件,来定义一组相关的容器来为一个项目服务,本文给大家介绍docker compose快速开始,感兴趣的朋友一起看看吧
    2022-05-05
  • docker限制容器内存的方法详解

    docker限制容器内存的方法详解

    在服务器中使用 docker 时,如果不对 docker 的可调用内存进行限制,当 docker 内的程序出现不可预测的问题时,就很有可能因为内存爆炸导致服务器主机的瘫痪,本文将介绍使用 docker 进行容器内存限制的方法,感兴趣的朋友一起看看吧
    2023-11-11
  • docker如何部署带有界面的registry仓库

    docker如何部署带有界面的registry仓库

    这篇文章主要介绍了docker如何部署带有界面的registry仓库问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Docker搭建OpenLDAP+phpLDAPadmin统一用户认证的方法

    Docker搭建OpenLDAP+phpLDAPadmin统一用户认证的方法

    这篇文章主要介绍了Docker搭建OpenLDAP+phpLDAPadmin统一用户认证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12

最新评论