首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >别只会装MySQL了!一文教你搞定MySQL主从复制,三台服务器也能玩转同步!

别只会装MySQL了!一文教你搞定MySQL主从复制,三台服务器也能玩转同步!

作者头像
IT咸鱼
发布2025-05-25 14:48:21
发布2025-05-25 14:48:21
7540
举报

「一、写在前面:为啥你必须学MYSQL主从复制?」

DBA这条路,最重要的核心能力之一就是能部署出一个「高可用、可扩展、安全的数据架构」

别怕,听起来高大上,其实就是搞清楚一台MySQL(主库)写入数据,另外几台(从库)自动同步的逻辑。


「二、开始前,准备这些东西先别急着动手」

「你得确认这些前置条件👇」

条件

是否具备?

已配置免密登录

✅(你说的已经配置好了)

每台机器已装 Docker

每台机器 Docker 已有 MySQL 镜像(比如 mysql:8.0)

防火墙(firewalld)已关闭或开放3306端口

⚠️需要确认!

你能执行 Shell 脚本,熟悉基本命令


「三、目标架构说明(带图)」

接下来我们搭建如下的 MySQL 主从复制架构:

「主库:」master 「从库:」node1、node2

主库上的数据写入后,将通过二进制日志(binlog)同步给两个从库,实现实时或延迟复制。

【MySQL主从复制机制图】

「四、正式开始干活了!(建议边看边敲)」

我们采用 Docker 来部署三个 MySQL 实例,并配置主从复制功能。整个流程分五步:


「第 1 步:启动主库容器(master)并开启 binlog」

登录 master 机器,运行如下命令:

代码语言:javascript
复制
docker run -d \

--name mysql-master \

-p 3306:3306 \

-e MYSQL_ROOT_PASSWORD=123456 \

-v /opt/mysql-master/conf:/etc/mysql/conf.d \

-v /opt/mysql-master/data:/var/lib/mysql \

mysql:8.0

接着,创建配置文件 /opt/mysql-master/conf/my.cnf

代码语言:javascript
复制
[mysqld]

server-id=1

log-bin=mysql-bin

binlog-do-db=testdb

注意:server-id 不能重复,主库设置为 1,从库设置为 2、3。

重启容器让配置生效:

代码语言:javascript
复制
docker restart mysql-master


「第 2 步:创建用于复制的账户」

进入主库容器:

代码语言:javascript
复制
docker exec -it mysql-master bash

mysql -uroot -p123456

在 mysql 命令行中执行:

代码语言:javascript
复制
CREATEUSER'repl'@'%' IDENTIFIED WITH mysql_native_password BY'replpass';

GRANT REPLICATION SLAVE ON*.*TO'repl'@'%';

FLUSH PRIVILEGES;

然后查看当前 binlog 状态:

代码语言:javascript
复制
SHOW MASTER STATUS;

记下文件名和位置,比如:

File

Position

mysql-bin.000001

154

「第 3 步:部署 node1、node2 的 MySQL 容器并配置为从库」

node1(server-id=2)配置如下:
代码语言:javascript
复制
docker run -d \

--name mysql-slave1 \

-p 3307:3306 \

-e MYSQL_ROOT_PASSWORD=123456 \

-v /opt/mysql-slave1/conf:/etc/mysql/conf.d \

-v /opt/mysql-slave1/data:/var/lib/mysql \

mysql:8.0

配置 /opt/mysql-slave1/conf/my.cnf

代码语言:javascript
复制
[mysqld]

server-id=2

relay-log=relay-log

read-only=1

重启容器:

代码语言:javascript
复制
docker restart mysql-slave1

⚠️ node2 机器执行相同步骤,server-id=3,端口改成3308,文件夹用 /opt/mysql-slave2/

「第 4 步:配置从库的主库连接信息」

进入 node1 的容器:

代码语言:javascript
复制
docker exec -it mysql-slave1 bash

mysql -uroot -p123456

配置复制参数:

代码语言:javascript
复制
CHANGE MASTER TO

  MASTER_HOST='你的master主机IP',

  MASTER_USER='repl',

  MASTER_PASSWORD='replpass',

  MASTER_LOG_FILE='mysql-bin.000001',

  MASTER_LOG_POS=154;

启动复制:

代码语言:javascript
复制
START SLAVE;

查看复制状态:

代码语言:javascript
复制
SHOW SLAVE STATUS\G

正常情况下,Slave_IO_RunningSlave_SQL_Running都应该是 Yes。


「第 5 步:测试主从同步效果!」

在 master 中创建数据库和表:

代码语言:javascript
复制
CREATE DATABASE testdb;

USE testdb;

CREATETABLE t_user (id INTPRIMARY KEY, name VARCHAR(20));

INSERTINTO t_user VALUES (1, 'ITxianyu');

然后登录 node1、node2 检查:

代码语言:javascript
复制
SELECT*FROM testdb.t_user;

如果看到了 ITxianyu这一行,就说明主从复制配置成功啦!

「五、遇到问题别慌,看这里!」

代码语言:javascript
复制
检查 binlog 文件名、位置是否正确;网络是否能 ping 通主机

你已经完成了「MySQL主从复制」的部署!

如果你能理解本文内容并亲手搭建成功,恭喜你,离成为“靠谱的DBA”更近了一步!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT咸鱼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 「二、开始前,准备这些东西先别急着动手」
    • 「你得确认这些前置条件👇」
  • 「三、目标架构说明(带图)」
  • 「四、正式开始干活了!(建议边看边敲)」
    • 「第 1 步:启动主库容器(master)并开启 binlog」
    • 「第 2 步:创建用于复制的账户」
    • 「第 3 步:部署 node1、node2 的 MySQL 容器并配置为从库」
      • node1(server-id=2)配置如下:
    • 「第 4 步:配置从库的主库连接信息」
    • 「第 5 步:测试主从同步效果!」
  • 「五、遇到问题别慌,看这里!」
  • 你已经完成了「MySQL主从复制」的部署!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档