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


相关推荐
爬山算法19 小时前
Redis(162)如何使用Redis实现消息队列?
数据库·redis·缓存
郑州光合科技余经理19 小时前
同城系统海外版:一站式多语种O2O系统源码
java·开发语言·git·mysql·uni-app·go·phpstorm
u***324320 小时前
【Redis】centos7 systemctl 启动 Redis 失败
数据库·redis·缓存
煎蛋学姐20 小时前
SSM社区生鲜电商平台dq96z(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·用户管理·ssm 框架·社区生鲜电商·商品信息管理
杨云龙UP20 小时前
从0搭建Oracle ODA NFS异地备份:从YUM源到RMAN定时任务的全流程
linux·运维·数据库·oracle
倔强的石头_20 小时前
从 Oracle 到 KingbaseES:破解迁移痛点,解锁信创时代数据库新可能
数据库
踢足球092920 小时前
Redis的典型应用
数据库·redis·缓存
hadage23320 小时前
--- redis 常见问题 ---
数据库·redis·mybatis
O***P57120 小时前
redis批量删除namespace下的数据
数据库·redis·缓存
5***262221 小时前
SQL Server导出和导入可选的数据库表和数据,以sql脚本形式
数据库·sql