<-

这里想配置一下mysql主从,并归档,以备使用

 

https://www.php.cn/faq/1901122.html

 

这里打算用docker, 准备两个mysql, 第一个使用, 我需要使用两个docker的mysql镜像,5.7或者8.0的,这两个镜像,最新的也许好一些。然后将这些镜像备份到本地以备load使用

 

MySQL主从同步需主库启用binlog并创建repl用户,记录File和Position;从库设唯一server-id,用CHANGE MASTER TO指定主库信息及起始点,START SLAVE后验证Slave_IO_Running和Slave_SQL_Running均为Yes。

如何配置一主一从_mysql主从架构示例

一主一从 MySQL 主从架构的核心是让一台 MySQL 服务器(主库)将数据变更通过二进制日志(binlog)实时同步给另一台服务器(从库),从而实现读写分离、备份容灾或负载分担。配置本身不复杂,但关键步骤必须严格按顺序执行,尤其注意 server-id 唯一性、网络连通性、用户权限和 binlog 格式。

主库配置:开启 binlog 并创建复制用户

主库必须启用 binlog,并设置唯一 server-id;同时创建专用于复制的账号,授予 REPLICATION SLAVE 权限。

  • 编辑主库配置文件(如 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf),在 [mysqld] 段下添加:

server-id = 1

log-bin = mysql-bin

binlog-format = ROW

expire_logs_days = 7

  • 重启 MySQL 服务生效:systemctl restart mysqld(或 mysql.server restart)
  • 登录 MySQL,创建复制用户(例如用户名 repl,密码 Repl@123):

CREATE USER 'repl'@'%' IDENTIFIED BY 'Repl@123';

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

FLUSH PRIVILEGES;

  • 记录当前 binlog 文件名和位置,后续从库需从此处开始同步:

SHOW MASTER STATUS;

输出类似:File: mysql-bin.000001, Position: 154 —— 记下这两个值,配置从库时要用。

从库配置:设置唯一 server-id 并启动复制

从库不能与主库或其他从库的 server-id 冲突,且需关闭 binlog(可选,若需级联复制则开启)。

  • 编辑从库配置文件,在 [mysqld] 段下设置:

server-id = 2

# log-bin = mysql-bin   # 可注释掉,除非要做级联复制

read_only = ON

  • 重启从库 MySQL
  • 使用 CHANGE MASTER TO 命令指定主库连接信息和起始同步点(用上一步记下的 File 和 Position):

CHANGE MASTER TO

  MASTER_HOST='192.168.1.10',     # 主库 IP

  MASTER_USER='repl',

  MASTER_PASSWORD='Repl@123',

  MASTER_PORT=3306,

  MASTER_LOG_FILE='mysql-bin.000001',

  MASTER_LOG_POS=154;

  • 启动复制线程:

START SLAVE;

验证主从是否正常运行

仅执行 START SLAVE 不代表成功,必须检查关键状态字段。

Pixso AI
Pixso AI

Pixso AI是一款智能生成设计稿工具,通过AI一键实现文本输入到设计稿生成。

下载
  • 在从库执行:

SHOW SLAVE STATUS\G

重点确认以下两项均为 Yes:

  • Slave_IO_Running: Yes(IO 线程已连接主库并拉取日志)
  • Slave_SQL_Running: Yes(SQL 线程已解析并执行中继日志)

若任一为 No,查看 Seconds_Behind_Master(延迟秒数)和 LastError 字段排查问题,常见原因包括网络不通、复制用户权限不足、主从时间不同步、表结构不一致等。

简单测试同步效果

在主库建库、建表、插入数据,观察是否自动出现在从库。

  • 主库执行:

CREATE DATABASE testdb;

USE testdb;

CREATE TABLE t1(id INT PRIMARY KEY);

INSERT INTO t1 VALUES (1),(2);

  • 稍等片刻,从库执行:

SHOW DATABASES LIKE 'testdb';

SELECT * FROM testdb.t1;

应能查到相同结果。此时主从同步已基本就绪。

posted @ 2026-04-06 08:52  calochCN  阅读(6)  评论(0)    收藏  举报