Mysql中搭建主从复制原理和配置

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。

使用主从复制的原因(优点)

主要原因包括提高性能、实现高可用性、数据备份和灾难恢复。

读写分离: 主从复制允许在主服务器上执行写操作,而在从服务器上执行读操作。这可以分担主服务器的负载,提高整体性能。从服务器可以分担读查询、报表生成等任务,减轻主服务器的压力。

高可用性: 当主服务器发生故障时,从服务器可以接管服务,从而提供高可用性。通过将从服务器配置为备份,可以确保在主服务器不可用时,系统仍然能够继续提供服务。

数据备份: 从服务器可以用作实时备份,以便在主服务器发生数据损坏或误操作时进行恢复。备份可以从从服务器上进行,而不会对主服务器的性能产生负面影响。

灾难恢复: 在发生灾难性事件(如硬件故障、数据中心故障等)时,从服务器可以用作快速恢复数据的副本。通过配置合适的地理位置分布,可以提高系统的灾难恢复能力。

数据分布: 主从复制还允许在不同地理位置的服务器上维护相同的数据副本。这对于全球分布的应用程序或具有多个地理位置的用户群体非常有用,可以提高用户访问数据的速度。

主从复制的过程(原理)

了解两大线程( I/O 和 SQL)

I/O线程:

目的:I/O线程主要负责与MySQL服务器之外的其他MySQL服务器进行通信,以便复制(replication)数据。 功能: 当一个MySQL服务器作为主服务器(master)时,I/O线程会将变更日志(binary log)中的事件传输给从服务器(slave)。从服务器上的I/O线程负责接收主服务器的二进制日志,并将这些事件写入本地的中继日志(relay log)。 配置: 在MySQL配置文件中,你可以通过配置参数如和来启用二进制日志和指定服务器ID。log-bin server-id

SQL线程:

目的:SQL线程主要负责执行从I/O线程接收到的二进制日志事件,将这些变更应用到从服务器上的数据库。

功能: 从服务器上的SQL线程会读取中继日志中的事件,并在从服务器上执行相应的SQL语句,以确保从服务器的数据与主服务器保持同步。

配置: 在从服务器上,你需要配置一些参数,如、和来启用二进制日志、指定服务器ID和指定中继日志。log-bin server-id relay-log

核心原理

就是主从复制的工作原理

了解以下部分就能对本章节 易如指掌

启用二进制日志: 主服务器在配置文件中启用二进制日志,记录所有对数据库的更改。这通过在主服务器的配置文件中设置log-bin选项来实现。二进制日志包含了对数据的所有修改操作,例如插入、更新和删除。

生成二进制日志事件: 当在主服务器上执行任何更改时,MySQL会将这些更改记录为二进制日志事件。每个事件都有一个唯一的标识,包括操作类型、受影响的表和相应的数据。

从服务器连接主服务器: 从服务器通过MySQL的复制线程连接到主服务器。在主从复制设置中,从服务器充当复制的被动一方,而主服务器则是主动一方。

获取主服务器的二进制日志信息: 从服务器向主服务器发送请求,获取主服务器上的二进制日志信息。从服务器要求主服务器提供自己的位置(File和Position),这将作为复制的起始点。

主服务器发送二进制日志: 主服务器从请求的起始点开始发送二进制日志信息给从服务器。这些二进制日志文件包含了在主服务器上执行的所有更改操作。

从服务器应用二进制日志: 从服务器接收到二进制日志后,将这些日志逐个应用到自己的数据库中。这样,从服务器的数据会与主服务器保持同步。

维护复制位置: 从服务器会定期记录自己复制的位置,以便在重新连接时从正确的位置开始复制。这通常由MySQL的relay-log和relay-log-index文件来管理。

处理主从同步延迟: 在一些情况下,由于网络延迟、从服务器负载等原因,可能会导致主从同步延迟。可以通过适当的调整和优化来降低同步延迟,确保从服务器的数据尽快与主服务器同步。

1.主从复制实验

通过以下实验深刻的理解

1.实验环境

注意事项:尽量使用同一版本的mysql

实验环境两个安装mysql5.7的CentOs7

SQL

代码解读

复制代码

每台的配置:关闭防火墙 selinux 配置静态ip 域名解析
第一台:master1        192.168.180.180
第二台:master2        192.168.180.181

域名解析:
vim /etc/hosts
加入
192.168.180.180 master1
192.168.180.181 master2
2.配置主服务器(master1)
开启二进制文件

SQL

代码解读

复制代码

vim /etc/my.cnf
log-bin=master-bin
server-id=1
 
systemctl restart mysqld

注释:

log-bin=master-bin:这一行配置启用二进制日志,并设置了二进制日志的文件名为 "master-bin"。二进制日志用于记录对数据库执行的更改操作,这对于主从复制是必要的。

server-id=1:这一行配置为服务器分配唯一的ID,即服务器ID。在主从复制中,每个参与复制的MySQL服务器都必须有唯一的服务器ID,以便在复制时进行标识。在这里,服务器ID被设置为1。

创建用户

grant replication slave on . to 'rep'@'192.168.180.%' identified by 'Sunshao-123';

查看状态

用于从服务器

 MASTER_LOG_FILE='二进制文件',   MASTER_LOG_POS=154;

来使用

SQL

代码解读

复制代码

show master status;

File:当前二进制日志文件的名称。

Position:二进制日志文件中的位置。

Binlog_Do_DB:要复制的数据库(如果指定)。

Binlog_Ignore_DB:复制期间要忽略的数据库(如果指定)。

查看端口号

SQL

代码解读

复制代码

SHOW VARIABLES LIKE 'port';

3.从服务器(master2)

SQL

代码解读

复制代码

vim /etc/my.cnf
server-id=2        *******标识符改为2
 
systemctl restart mysqld

从复制主配置(核心命令)

SQL

代码解读

复制代码

CHANGE MASTER TO
  MASTER_HOST='主服务器Ip或主机名',
  MASTER_PORT=数据库的端口号(默认3306),
  MASTER_USER='创建的用户',
  MASTER_PASSWORD='用户密码',
  MASTER_LOG_FILE='二进制文件',
  MASTER_LOG_POS=154;

主服务器show master status;

查看出的参数写入以下两个选项当中

MASTER_LOG_FILE='二进制文件',‘

’MASTER_LOG_POS=154;

端口号也是一样

启动复制

SQL

代码解读

复制代码

START SLAVE;

查看状态

SQL

代码解读

复制代码

show slave status \G;

测试

主服务器创建一个库表并且插入数据

SQL

代码解读

复制代码

mysql> create database test;
Query OK, 1 row affected (0.01 sec)
 
mysql> use test;
Database changed
 
mysql> insert into t1 values(1111),(2222);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0
 
mysql> select * from t1;
+------+
| id   |
+------+
| 1111 |
| 2222 |
+------+
2 rows in set (0.00 sec)
 

从服务器测试

SQL

代码解读

复制代码

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
6 rows in set (0.00 sec)
 
 
mysql> use test;
Database changed
mysql> show tables
    -> ;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
+----------------+
1 row in set (0.00 sec)
 
mysql> select * from t1;
+------+
| id   |
+------+
| 1111 |
| 2222 |
+------+
2 rows in set (0.00 sec)
 


转载来源:https://juejin.cn/post/7355389990531203124

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
19天前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
1天前
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
MySQL事务日志-Undo Log工作原理分析
|
5天前
|
NoSQL 关系型数据库 Redis
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
42 14
|
17天前
|
关系型数据库 MySQL 数据库
docker高级篇(大厂进阶):安装mysql主从复制
docker高级篇(大厂进阶):安装mysql主从复制
93 24
|
21天前
|
缓存 关系型数据库 MySQL
MySQL 索引优化与慢查询优化:原理与实践
通过本文的介绍,希望您能够深入理解MySQL索引优化与慢查询优化的原理和实践方法,并在实际项目中灵活运用这些技术,提升数据库的整体性能。
52 5
|
1月前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
2月前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
2月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
188 2
|
12天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
39 3
|
12天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
42 3

推荐镜像

更多