MySQL主从复制

#王者杯·14天创作挑战营·第1期#

概念

        MySQL 主从复制(Master-Slave Replication)是 MySQL 数据库提供的一种数据同步机制,允许将一个 MySQL主服务器(Master)的数据自动复制到一个或多个其他 MySQL 服务器(从服务器或 Slave)。

  • 主服务器 (Master)

        接收所有写操作(INSERT, UPDATE, DELETE 等)

        将数据变更记录到二进制日志(Binary Log)中

        一个主服务器可以有多个从服务器

  • 从服务器 (Slave)

        复制主服务器的数据变更

        默认情况下只接受读操作(可配置)

        可以提升为新的主服务器(故障转移时)

  • 二进制日志 (Binary Log)

        记录所有对数据库的修改操作(从数据库根据日志文件redo)

        是主从复制的核心组件

        三种格式:STATEMENT(语句)、ROW(行)、MIXED(混合)

复制拓扑类型

  • 标准主从复制

        一主一从或一主多从,最简单的复制结构

  • 链式复制

        主→从1→从2 的级联结构,减轻主服务器压力

  • 多主复制

        多个主服务器相互复制, 需要特殊配置(如组复制)

  • 环形复制

        多个服务器形成环形复制,已不推荐使用

主从复制的优势

  • 读写分离

        主库写,从库读,提高整体性能

  • 数据备份

        从服务器作为实时备份

  • 高可用性
    主服务器故障时可快速切换到从服务器
  • 负载均衡

        将读请求分散到多个从服务器

  • 数据分析
    在从服务器上执行分析查询,不影响主服务器性能

主从复制的限制

  • 复制延迟

        从服务器数据可能落后于主服务器

  • 单点写入

        标准配置下只有主服务器可写

  • 配置复杂性

        需要维护主从服务器的配置和状态

  • 数据一致性风险

        异步复制可能导致数据丢失

MySQL主从复制主要特点 

  1. 主库产生问题,可以快速切换到从库提供服务。
  2. 实现读写分离,降低主库的访问压力。
  3. 可以在从库中执行备份,以避免备份期间影响主库服务。

Binlog 在主从复制中的流转

  1. 主服务器
    1. 事务提交时写入 Binlog

    2. 通过 Binlog Dump 线程发送给从库

  2. 从服务器
    1. I/O 线程接收 Binlog 并写入 Relay Log

    2. SQL 线程读取 Relay Log 并重放事件

搭建 

  • 主库(Master)配置 
#非生产环境,直接关闭防火墙
systemctl stop firewalld;

#关闭开机自启
systemctl disable firewalld;

#修改配置文件 etc/my.cnf (Linux)
[mysqld]
# 服务器唯一ID,默认是1
server-id = 1
#是否只读,1代表只读,0代表读写
read-only=0
# 启用二进制日志
log_bin = mysql-bin
# 需要复制的数据库(可选)
binlog-do-db = db_name
# 不需要复制的数据库(可选)
binlog-ignore-db = mysql

重启mysql服务
systemctl restart mysqld;

#创建复制专用账户
CREATE USER 'repl'@'从服务器IP或%' IDENTIFIED BY 'YourPassword123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'从服务器IP或%';

#获取主节点二进制日志文件位置和偏移量
show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 341      |              |                  |
+------------------+----------+--------------+------------------+

#备份主数据库(可选)
mysqldump -u root -p --all-databases --master-data > master_dump.sql
 从库配置
#修改配置文件 /etc/my.cnf
[mysqld]
# 服务器唯一ID,必须与主服务器不同
server-id = 2
# 启用中继日志
relay-log = mysql-relay-bin
# 可选:设置只读(超级用户仍可写)
read_only = 1
# 可选:记录从服务器自己的更新(级联复制时需要)
log_bin = mysql-bin
# 可选:复制的数据库
replicate-do-db = db_name

#重启 MySQL 服务
systemctl restart mysqld;

#导入主数据库备份(如果做了备份)
mysql -u root -p < master_dump.sql;

#配置复制连接
CHANGE MASTER TO
MASTER_HOST = '主服务器IP',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'YourPassword123!',
MASTER_LOG_FILE = 'mysql-bin.000003',  #记录的File值
MASTER_LOG_POS = 341; #记录的Position值

#启动复制
start slave;
验证主从集群的同步状态
1、通过从节点查看同步信息
#查看复制从属性线程基本参数的状态信息
SHOW SLAVE STATUS\G;

#提示信息:
Slave_IO_Running: Yes #线程启动成功
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0 或很小的数值
Last_IO_Error: 空
Last_SQL_Error: 空

2、验证数据是否同步
#在主节点添加数据
CREATE DATABASE test_repl;
USE test_repl;
CREATE TABLE test_table(id INT);
INSERT INTO test_table VALUES(1);
SELECT * FROM test_repl;

#验证从节点数据是否同步
SHOW DATABASES;
USE test_repl;
SHOW TABLES;
SELECT * FROM test_table;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值