【数据库管理】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;


相关推荐
0xDevNull21 分钟前
MySQL数据冷热分离详解
后端·mysql
科技小花38 分钟前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸39 分钟前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain41 分钟前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希1 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神1 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员2 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java2 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿2 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴2 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存