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


相关推荐
q***33372 小时前
数据库高安全—openGauss安全整体架构&安全认证
数据库·安全·架构
范纹杉想快点毕业2 小时前
《嵌入式开发硬核指南:91问一次讲透底层到架构》
java·开发语言·数据库·单片机·嵌入式硬件·mongodb
倚肆2 小时前
MySQL 配置文件属性详解
数据库·mysql
user_admin_god4 小时前
企业级管理系统的站内信怎么轻量级优雅实现
java·大数据·数据库·spring boot
百***22124 小时前
mysql的分区表
数据库·mysql
星光一影5 小时前
废品回收系统小程序源码
mysql·php·html5
humors2215 小时前
服务端开发案例(不定期更新)
java·数据库·后端·mysql·mybatis·excel
Wang's Blog5 小时前
MySQL: 服务器性能优化全面指南:参数配置与数据库设计的最佳实践
服务器·数据库·mysql
码农101号5 小时前
Mysql主从架构的搭建
数据库·mysql·架构