操作步骤
一、准备工作
- 在 Linux 中建立对应文件夹,用于存放MySql数据库相关,文件夹路径:
/usr/local/software/mysql
。 - 在mysql文件下创建如下目录结构的文件:(3306为主数据库文件夹,笔者这里以对端口号来命名;3310为从数据库文件夹,3311同理,可依次往下)
- 上传 my.cnf 文件到 conf 文件夹下
以下是 my.cnf 文件的内容:
# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# The MySQL Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
default_authentication_plugin=mysql_native_password
# Custom config should go here
!includedir /etc/mysql/conf.d/
server_id=200
-
将my.cnf文件拷贝到
3310/conf
,3311/conf
目录下,目录结构如下: -
查询 mysql 镜像
对应的docker指令:docker search mysql
-
拉取 mysql 镜像到本地
对应的docker指令:docker pull mysql
-
检查是否下载成功
对应的docker指令:docker image ls
- 在 docker 中创建运行 mysql 的容器
docker run
-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=123 \
-d mysql
以下是代码运行后的界面,出现一串无序字符代表创建成功。
- 进入 mysql 容器
进入我们上一步创建好的 mysql 容器 ,对应指令:docker exec -it mysql_3306 bash
docker exec
-it:以交互模式运行容器 ,为容器重新分配一个伪输入终端。
bash: bash(GNU Bourne-Again Shell)是最常用的一种shell(运行在终端的互动程序)。
成功进入容器后,前缀会变化,如图所示:
-
在容器中运行mysql客户端
完成上述步骤后,我们已经成功在 docker 中创建了能够运行 mysql 的容器,接下来可以在 docker 中运行 mysql 客户端了。
输入对应指令,登录 mysql 客户端:mysql -u用户名 -p密码
退出 mysql 客户端的指令:quit
退出容器的指令:exit
-
防火墙开放端口
这里如果不开放端口,会导致外部无法访问。
开放指定端口:
对应指令:firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd —zone=public —add-port=端口号/tcp —permanent
—zone: public 公开端口
—add-port: 端口号/协议名称
—permanent: 永久开放
修改防火墙配置后,要重新加载防火墙:firewall-cmd --reload
查看开放的端口号的指令:firewall-cmd --zone=public --list-ports
- Navicat 测试连接
第一步:打开 Navicat,新建连接。
第二步:输入对应信息,点击测试连接。弹出连接成功后即可!
注意这里的主机为运行 docker 的虚拟机的 IP。
二、搭建 MySql 主数据库(master)
- 配置 my.cnf 文件,配置完毕后重启 docker。
通过
vim my.cnf
修改 my.cnf 文件,在文件末尾加入以下程序:
server_id=200 #服务器id
log_bin=mysql-bin #binlog名称
binlog_format=row #binlog的格式
- 创建与从数据库(slave)进行服务通信的用户
第一步:在 Navicat 中,新建查询。
第二步:输入以下mysql语句,并运行。
-- 创建用户 slave --
CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password by '123';
-- 给用户授权 --
GRANT replication SLAVE,replication client ON *.* TO 'slave'@'%';
-- 应用权限 --
FLUSH PRIVILEGES;
-
查询 master 状态
在查询中输入show master status
。 -
获取 master IP地址
输入指令:docker inspect mysql_3306 |grep IPA
三、搭建 MySql 从数据库(slave)
- 配置
mysql/3310
路径下的 my.cnf 文件,配置完毕后重启 docker。
通过
vim my.cnf
修改 my.cnf 文件,在文件末尾加入以下程序:
server_id=201 #每个服务器的id都是唯一的,必须进行修改!
log_bin=mysql-slave01-bin
relay_log=wnhz-relay-bin
read_only=1 #从数据库不需要进行增删改等写入操作,所以设为只读
- 创建运行从数据库(slave)的容器
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=123456 \
-d mysql
这里要注意从数据库的路径与名称都需要进行修改!
以下是代码运行后的界面,出现一串无序字符代表创建成功。
-
开放防火墙端口
这一步在上面已经执行过相似的操作,这里同上。
打开对应端口:firewall-cmd --zone=public --add-port=3310/tcp --permanent
重新加载防火墙:firewall-cmd --reload
-
Navicat 测试连接
这一步操作也与之前相同,这里也不再过多赘述,直接上图。 -
关联从数据库(slave)与主数据库(master)
进入从数据库(slave)容器中,输入对应指令 。
change master to
master_host='172.17.0.3',
master_user='slave',
master_password='123456',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=855;
这里的 master_host 对应之前查询的 master 的 IP 地址。
-
开启从数据库(slave)
start slave;
-
查询 slave 状态
show slave status \G;
文章来源:https://www.toymoban.com/news/detail-708148.html -
功能测试
在主数据库中建表,查看从数据库中是否会自动生成相同的表 。文章来源地址https://www.toymoban.com/news/detail-708148.html
到了这里,关于基于docker搭建MySql主从数据库(详细步骤)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!