如何使用Docker来部署MySQL的主从复制环境

1,创建Mysql主从数据挂载路径:

mkdir -p /data/mysql/master /data/mysql/slave

2,启动主服务器容器:使用官方的MySQL镜像启动主服务器,并设置必要的环境变量如MYSQL_ROOT_PASSWORD、数据挂载路径等:

docker run  --privileged=true --restart=always --name mysql-master -v /data/mysql/master:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mysql@2024 -d mysql:8 --log-bin=mysql-bin --binlog-format=row --server-id=1

docker ps

这里:

--name mysql-master 给容器命名。
-v /data/mysql/master:/var/lib/mysql 数据挂载宿主路径。
-e MYSQL_ROOT_PASSWORD=mysql@2024 设置root用户的密码。
mysql:8 是MySQL镜像的标签,比如8。
--log-bin=mysql-bin 开启二进制日志。
--binlog-format=row 设置二进制日志格式为行格式。
--server-id=1 设置服务器ID。

3,配置主服务器:登录到MySQL主服务器中,创建用于复制的用户,并授权:

docker exec -it mysql-master mysql -uroot -pmysql@2024
CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'slave123456';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES;

4,查看主服务器的状态:记录下文件名和位置,这些信息在配置从服务器时需要:

SHOW MASTER STATUS;

 ​​​​​​​​​​​​​​

exit;退出

创建从服务器

5,启动从服务器容器:使用与主服务器相同的MySQL版本启动从服务器:

docker run  --privileged=true --restart=always --name mysql-slave -v /data/mysql/slave:/var/lib/mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=mysql@2024 -d mysql:8 --server-id=2
docker ps

6,配置从服务器:登录到MySQL从服务器中,执行以下命令来配置复制。

docker exec -it mysql-slave mysql -uroot -pmysql@2024

7,设置要同步的主库信息:

change master to master_host='172.19.41.35', master_user='slave', master_password='slave123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=828, master_connect_retry=30;

## 参数说明:
master_host: 主数据库的IP地址;
master_port:主数据库的运行端口;
master_user:在主数据库创建的用于同步数据的用户账号;
master_password:在主数据库创建的用于同步数据的用户密码;
master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
master_connect_retry:连接失败重试的时间间隔,单位为秒。
 
# 查看 从库 状态 
show slave status;
## slave_io_running和slave_sql_running为 NO,说明未开启主从同步 

master_host查看本机IP地址:

master_log_file和master_log_pos从主库SHOW MASTER STATUS; 查看

运行结果如下:

 

8,开启主从复制:

START SLAVE;

 

9,检查复制状态:确保从服务器正确地连接到了主服务器,并且正在复制数据。

SHOW SLAVE STATUS\G

Slave_IO_Running 和 Slave_SQL_Running 都为 Yes,并且 Last_Error 为空,说明正常运行。

10,exit; 退出,并在主库进行校验:

docker exec -it mysql-master mysql -uroot -pmysql@2024

在主库进行创建数据库并插入数据:

CREATE DATABASE ncc
CHARACTER SET utf8
COLLATE utf8_general_ci;

use ncc;

CREATE TABLE students (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    age INT
);

INSERT INTO students (name, age) VALUES ('张三', 20);

exit;退出,在从库进行查看

docker exec -it mysql-slave mysql -uroot -pmysql@2024
use ncc;

select * from students;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值