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;