【数据库管理】MySQL主从复制详解

1. 数据库主从复制

1.1 主从复制概念

数据库主从复制 是一种数据复制技术,它将一个数据库服务器(主库,Master )的数据自动同步到一个或多个其他数据库服务器(从库,Slave/Replica)。

  • 主库 :负责处理所有写操作INSERT, UPDATE, DELETE)。它是数据的唯一权威来源。
  • 从库 :通常负责处理读操作SELECT)。它通过复制机制从主库获取数据,保持与主库一致。

核心目标 :通过数据冗余,实现读写分离 ,从而提升系统的性能可用性可靠性

  1. 主库记录二进制日志 :主库在执行完写操作后,会将数据的变更事件(而非数据页本身)记录到其二进制日志 中。
  2. 从库拉取中继日志 :从库的 I/O线程 会与主库建立连接,并读取主库的二进制日志,然后将这些日志事件写入到从库本地的中继日志 中。
  3. 从库重放中继日志 :从库的 SQL线程 会读取中继日志中的事件,并在从库上重新执行这些SQL语句,从而使从库的数据与主库保持一致。
1.2 功能
  1. 读写分离
    • 场景:绝大多数应用都是"读多写少"。
    • 好处 :将大量的读请求分流到多个从库上,极大地减轻了主库的负载,提升了整个系统的查询吞吐量并发处理能力
  2. 数据备份与灾难恢复
    • 场景:需要数据容灾备份。
    • 好处 :从库就是一个实时、在线的逻辑备份。当主库发生故障(如硬盘损坏)时,可以快速将一个从库提升为新的主库,实现快速故障恢复,保证服务高可用。
  3. 数据分析与报表
    • 场景:需要运行复杂的统计报表或大数据分析任务。
    • 好处:这些任务通常非常消耗资源。可以在一个专用的从库上执行,避免对线上主库的业务造成性能冲击。

1.3 主从服务器配置

1.3.1 master服务器配置

环境准备:

虚拟机服务环境

Master服务器:192.168.65.131 mysql5.7

slave1服务器:192.168.65.128 mysql5.7

Slave2服务器:192.168.65.133 mysql5.7

① 安装ntp、修改配置文件

复制代码
# 安装ntp软件
yum -y install ntpdate ntp    
# 时间同步
ntpdate ntp.aliyun.com        

② 开启NTP服务、关闭防火墙和增强性安全功能

复制代码
systemctl start ntpd
systemctl stop firewalld.service 
setenforce 0
1.3.2 两台SLAVE服务器配置

① 安装ntp、ntpdate服务

复制代码
yum install -y ntp ntpdate 
ntpdate ntp.aliyun.com 
1.3.3 配置主从同步

① master服务器修改配置文件

复制代码
vi /etc/my.cnf
# 在mysqld模块下修改一下内容
# 开启二进制日志文件(之后生成的日志名为master-bin)
log_bin=master-bin     
# 开启从服务器日志同步
log_slave-updates=true
# 主服务器id为1(不可重复)
server_id = 1


# 重启服务
systemctl restart mysqld

# 配置规则
mysql -uroot -p

mysql> GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.65.%' IDENTIFIED BY '123456';

# 刷新权限表
mysql> flush privileges;

# 规则解析:GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.65.%' IDENTIFIED BY '123456';
# 给从服务器提权,允许使用slave的身份复制master的所有数据库的所有表,并指定密码为123456

# 查看master数据库状态
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      412 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> 
#以上可见产生了master-bin.000001日志文件,定位为412
#从服务器需要定位到此处进行复制

② 从服务器配置 192.168.65.133 192.168.65.128 设置都是一样的

复制代码
vi /etc/my.cnf
#开启二进制日志文件
log-bin=master-bin
#设置server id为22,slave2 为23
server_id = 22
#从主服务器上同步日志文件记录到本地
relay-log=relay-log-bin
#定义relay-log的位置和名称(index索引) 
relay-log-index=slave-relay-bin.index






# 开启从服务器功能
mysql -uroot -p
# slave01
mysql> change master to master_host='192.168.10.16',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=412;

# slave02
change master to master_host='192.168.10.16',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=603;

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

# 查看从服务器状态
mysql> show slave status\G;
1.3.4 测试数据同步

① 在主服务器上创建一个数据库

复制代码
mysql> create database work;
mysql> show databases;

②在两台从服务器上直接查看数据库列表

复制代码
mysql> show databases;


相关推荐
liudanzhengxi8 分钟前
巧用ULN2003A轻松扩展单片机IO口
数据库·mongodb
Teable任意门互动15 分钟前
深度解析:AI 赋能开源多维表格,实现企业全场景数据整合与高效应用
数据库·人工智能·低代码·信息可视化·开源·数据库开发
还是鼠鼠40 分钟前
AI掘金头条新闻系统 (Toutiao News)-相关推荐
后端·python·mysql·fastapi·web
DevOpenClub41 分钟前
职教高考及高职分类招生控制线 API 接口
java·数据库·高考
funnycoffee12343 分钟前
华为S5736交换机3层ECMP负载方式
linux·服务器·数据库
添砖java‘’43 分钟前
MySQL复合查询
数据库·mysql
星川水月1 小时前
Access数据库快速入门——外部数据导入和SQL简单查询
数据库·sql·access
ElevenS_it1881 小时前
MySQL慢查询监控与告警实战:从slow_log采集到分钟级定位慢SQL的完整链路配置
android·sql·mysql
My_Java_Life1 小时前
SpringAI基于Mysql jdbc方式存储对话记忆
mysql·ai