news 2026/5/27 1:16:03

MySQL 运维实战系列(七)mysql 主从配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL 运维实战系列(七)mysql 主从配置

一、环境规划

角色IP 地址主机名作用
主库 Master172.16.1.191db-master可读写,处理所有写操作
从库 Slave172.16.1.193db-slave只读,处理查询操作

前提条件

  • 两台服务器网络互通(能互相 ping 通)
  • MySQL 已安装(版本尽量一致)
  • 191服务器mysql有数据
  • 防火墙开放 3306 端口

二、主库配置(Master)

2.1 修改配置文件

# 编辑配置文件# CentOS: /etc/my.cnf# Ubuntu: /etc/mysql/mysql.conf.d/mysqld.cnfvim/etc/my.cnf

[mysqld]段添加以下配置:

[mysqld]port=3306basedir=/usr/local/mysqldatadir=/data/3306/datauser=mysqlsocket=/tmp/mysql.sock# ===== 主从复制核心配置 =====server-id=1# 唯一标识,必须为1log-bin=mysql-bin# 开启二进制日志binlog-format=ROW# 行级复制(推荐)sync-binlog=1# 每次事务提交同步到磁盘expire-logs-days=7# binlog保留7天# 可选:指定要复制的数据库(不设置则复制所有)# binlog-do-db = world# 可选:指定不复制的数据库# binlog-ignore-db = mysql

2.2 重启 MySQL

systemctl restart mysqld

2.3 创建复制专用用户

-- 登录 MySQLmysql-uroot-p-- 创建复制用户(允许从库IP连接)CREATEUSER'repl'@'172.16.1.193'IDENTIFIEDBY'123456';-- 授予复制权限GRANTREPLICATIONSLAVEON*.*TO'repl'@'172.16.1.193';-- 刷新权限FLUSHPRIVILEGES;

2.4 获取 binlog 位置

-- 锁表(防止数据写入导致位置变化)FLUSHTABLESWITHREADLOCK;-- 查看当前 binlog 文件和位置SHOWMASTERSTATUS;

记录输出结果:

+------------------+----------+ | File | Position | +------------------+----------+ | mysql-bin.000001 | 709 | +------------------+----------+

2.5 导出初始数据

# 另开一个 SSH 窗口执行导出mysqldump-uroot-p--all-databases --master-data --single-transaction>/tmp/master_backup.sql
参数含义作用
–all-databases备份所有数据库导出全部数据,包括系统库(mysql、sys等)
–master-data记录 binlog 位置在备份文件中记录主库的二进制日志坐标
–single-transaction单事务模式在不锁表的情况下获得一致性快照

2.6 解锁主库

-- 导出完成后执行UNLOCKTABLES;

2.7 传输备份到从库

# 将备份文件复制到从库scp/tmp/master_backup.sql root@172.16.1.193:/tmp/

三、从库配置(Slave)

3.1 修改配置文件

vim/etc/my.cnf
[mysqld] port=3306 basedir=/usr/local/mysql datadir=/data/3306/data user=mysql socket=/tmp/mysql.sock # ===== 主从复制核心配置 ===== server-id = 2 # 必须与主库不同 relay-log = mysql-relay-bin # 中继日志 read-only = 1 # 设置为只读 # 可选:指定要复制的数据库 # replicate-do-db = world # 可选:指定不复制的数据库 # replicate-ignore-db = mysql

3.2 重启 MySQL

systemctl restart mysqld

3.3 导入主库初始数据

-- 登录从库 MySQLmysql-uroot-p-- 导入数据source/tmp/master_backup.sql;

3.4 配置主从连接

-- 停止现有的复制(如果有)STOP SLAVE;-- 清除旧的配置RESET SLAVEALL;-- 配置主库连接信息CHANGE MASTERTOMASTER_HOST='172.16.1.191',-- 主库 IPMASTER_PORT=3306,-- 主库端口MASTER_USER='repl',-- 复制用户名MASTER_PASSWORD='123456',-- 密码MASTER_LOG_FILE='mysql-bin.000001',-- 主库的 FileMASTER_LOG_POS=709;-- 主库的 Position-- 启动复制STARTSLAVE;

3.5 验证复制状态

SHOWSLAVESTATUS\G

关键指标检查

字段期望值说明
Slave_IO_RunningYesIO线程正常
Slave_SQL_RunningYesSQL线程正常
Seconds_Behind_Master0无延迟
Last_IO_Errno0无IO错误
Last_SQL_Errno0无SQL错误

四、验证主从同步

4.1 在主库创建测试数据

-- 创建测试数据库CREATEDATABASEtest_replication;-- 使用测试数据库USEtest_replication;-- 创建测试表CREATETABLEusers(idINTPRIMARYKEYAUTO_INCREMENT,nameVARCHAR(50)NOTNULL,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP);-- 插入测试数据INSERTINTOusers(name)VALUES('张三');INSERTINTOusers(name)VALUES('李四');INSERTINTOusers(name)VALUES('王五');-- 查看主库数据SELECT*FROMusers;

4.2 在从库验证

-- 切换到测试数据库USEtest_replication;-- 查询数据(应该与主库一致)SELECT*FROMusers;

4.3 验证从库只读

-- 在从库尝试写入(应该报错)INSERTINTOusers(name)VALUES('测试');

预期报错:

ERROR 1290 (HY000): The MySQL server is running with the --read-only option

五、常用维护命令

操作命令
查看主库状态SHOW MASTER STATUS;
查看从库状态SHOW SLAVE STATUS\G
停止从库复制STOP SLAVE;
启动从库复制START SLAVE;
跳过错误(慎用)STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE;

六、快速排查指南

问题可能原因解决方案
Slave_IO_Running: Connecting网络不通/用户密码错误检查防火墙、重新授权
Slave_IO_Running: No主库 binlog 文件或位置错误重新CHANGE MASTER
Slave_SQL_Running: No数据冲突(主键重复等)跳过错误或重新同步
Seconds_Behind_Master持续增长主库写入量大/网络延迟开启并行复制

八、架构图

┌─────────────────────────────────────────────────────────────────┐ │ 应用程序 │ │ 写操作 → 主库 / 读操作 → 从库 │ └─────────────┬─────────────────────────────────┬───────────────┘ │ │ ▼ ▼ ┌───────────────┐ ┌───────────────┐ │ 主库 Master │ binlog │ 从库 Slave │ │ 172.16.1.191 │ ────────────────→ │ 172.16.1.193 │ │ (可读写) │ 异步复制 │ (只读) │ └───────────────┘ └───────────────┘ │ │ │ │ ▼ ▼ INSERT/SELECT SELECT 写操作入口 读操作入口
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/27 1:16:00

接手一个陌生项目,我让 OpenClaw 10 分钟理清了架构

周一早上, leader 丢给你一个 Git 仓库地址:“这个系统后面你负责维护,先熟悉一下。” 你 clone 下来,打开目录——几十个文件夹,成百上千个文件,配置文件、业务代码、测试用例、部署脚本混在一起。README…

作者头像 李华
网站建设 2026/5/27 1:11:04

C51中断服务程序中的浮点运算可重入性问题解析

1. C51中断服务程序中的浮点运算可重入性问题解析在嵌入式C51开发中,中断服务程序(ISR)与主程序共享资源时的可重入性(reentrancy)问题一直是开发者需要特别注意的技术难点。最近我在调试一个带浮点运算的温控系统时,就遇到了ISR中调用sin()函数导致数据…

作者头像 李华
网站建设 2026/5/27 1:10:05

Servlet Session 跟踪

Servlet Session 跟踪 引言 在Web应用开发中,Session跟踪是一种常用的机制,用于存储和管理用户会话数据。Servlet作为Java Web技术中的核心技术之一,提供了强大的Session跟踪功能。本文将详细介绍Servlet Session跟踪的原理、应用场景以及如何配置和使用。 什么是Session…

作者头像 李华
网站建设 2026/5/27 1:09:10

FPGA高层次合成技术:从原理到工业实践

1. FPGA高层次合成技术演进全景在硬件设计领域,FPGA高层次合成(High-Level Synthesis, HLS)技术正在经历从实验室原型到工业级部署的关键转型期。这项技术本质上是通过编译器将C/C等高级语言描述的算法,自动转换为Verilog/VHDL等硬…

作者头像 李华