首页 > 数据库 >高性能数据库架构:掌握主从复制技术

高性能数据库架构:掌握主从复制技术

时间:2024-08-01 23:24:44浏览次数:17  
标签:主库 主从复制 架构 -- 数据库 MASTER MySQL 从库

在这里插入图片描述

一、数据库主从复制的概念

数据库主从复制是一种常用的技术,用于提高数据库系统的可用性、性能和可靠性。通过将数据从主数据库(master)复制到从数据库(slave),可以实现数据的备份、负载均衡和高可用性。以下是对数据库主从复制的详细解释及其在MySQL中的具体实现步骤和示例。

1. 主从复制的基本原理

主从复制是指将一个数据库实例作为主库,将其数据实时地复制到一个或多个从库中。主库负责处理所有的写操作(如插入、更新、删除),而从库通常只处理读操作。通过主从复制,应用可以将读请求分布到多个从库上,从而提高系统的读性能。

2. 主从复制的类型

  • 异步复制(Asynchronous Replication):主库在执行完写操作后即返回,不等待从库完成复制。这种方式具有较低的延迟,但可能导致主从数据不一致。
  • 半同步复制(Semi-Synchronous Replication):主库在写操作完成后,会等待至少一个从库确认数据已被接收。这种方式保证了一定程度的数据一致性。
  • 同步复制(Synchronous Replication):主库在写操作完成后,必须等待所有从库都确认接收到数据才会返回。这种方式确保了主从数据的一致性,但会增加操作延迟。

3. 主从复制的优点

  • 数据备份:从库可以作为主库的实时备份,一旦主库发生故障,从库可以快速切换为主库。
  • 负载均衡:通过将读操作分配给从库,可以减少主库的负载,提高系统的整体性能。
  • 高可用性:主从复制提高了系统的容错能力,使得系统在单点故障时仍能保持服务可用。

二、MySQL主从复制的实现

以下是MySQL数据库中实现主从复制的详细步骤,基于CentOS系统进行演示。

1. 环境准备

假设我们有两台服务器:

  • 主库(Master)

    • IP地址:192.168.1.10
    • MySQL版本:5.7或更高
  • 从库(Slave)

    • IP地址:192.168.1.20
    • MySQL版本:5.7或更高

确保两台服务器上的MySQL版本兼容,并且从库可以通过网络访问主库。

2. 主库配置

在主库上进行以下配置:

2.1 修改MySQL配置文件

编辑MySQL的配置文件/etc/my.cnf,添加以下内容:

[mysqld]
# 开启二进制日志
log-bin=mysql-bin
# 设置服务器ID,确保在主从环境中唯一
server-id=1
# 配置用于复制的数据库(可选)
binlog-do-db=your_database_name
# 排除不需要复制的数据库(可选)
# binlog-ignore-db=example_db
2.2 创建复制用户

在MySQL中创建一个用于复制的用户,并赋予REPLICATION SLAVE权限:

-- 登录MySQL
mysql -u root -p

-- 创建复制用户
CREATE USER 'replicator'@'%' IDENTIFIED BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
2.3 锁定主库

为了获取当前的二进制日志文件名和位置,需要锁定主库以确保数据一致性:

-- 锁定数据库
FLUSH TABLES WITH READ LOCK;

-- 获取二进制日志状态
SHOW MASTER STATUS;

记下输出中的FilePosition信息,例如:

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      154 |              |                  |
+------------------+----------+--------------+------------------+
2.4 备份主库

锁定数据库后,立即进行数据库备份。可以使用mysqldump进行备份:

mysqldump -u root -p --all-databases --master-data > master_backup.sql

完成备份后,解除锁定:

-- 解除锁定
UNLOCK TABLES;

3. 从库配置

在从库上进行以下配置:

3.1 修改MySQL配置文件

编辑MySQL的配置文件/etc/my.cnf,添加以下内容:

[mysqld]
# 设置服务器ID,确保在主从环境中唯一
server-id=2
# 关闭二进制日志(从库通常不需要开启,除非从库也作为其他从库的主库)
# log-bin=mysql-bin
# 配置从库不需要同步的数据库(可选)
# replicate-ignore-db=example_db
3.2 导入主库备份

将主库备份文件master_backup.sql复制到从库,导入到MySQL中:

mysql -u root -p < master_backup.sql
3.3 配置复制参数

在从库中执行以下SQL语句,设置主库信息:

-- 登录MySQL
mysql -u root -p

-- 配置主库信息
CHANGE MASTER TO
MASTER_HOST='192.168.1.10',
MASTER_USER='replicator',
MASTER_PASSWORD='your_password',
MASTER_LOG_FILE='mysql-bin.000001',  -- 上述获取的二进制日志文件名
MASTER_LOG_POS=154;                  -- 上述获取的二进制日志位置
3.4 启动从库复制

启动从库复制线程,并检查复制状态:

-- 启动从库
START SLAVE;

-- 检查从库状态
SHOW SLAVE STATUS\G

在输出中,确保Slave_IO_RunningSlave_SQL_Running均为Yes,表示复制正常运行。

4. 验证主从复制

在主库中执行一些数据操作,然后在从库中验证数据是否同步:

在主库中执行操作
USE your_database_name;

-- 插入数据
INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2');

-- 更新数据
UPDATE your_table SET column1 = 'new_value' WHERE column2 = 'value2';

-- 删除数据
DELETE FROM your_table WHERE column1 = 'new_value';
在从库中验证
USE your_database_name;

-- 查询数据
SELECT * FROM your_table;

如果从库中的数据与主库一致,说明主从复制成功。

三、完整主从复制示例

示例1:MySQL主从复制

假设我们有一个数据库shop,其中包含一个商品表products。我们将在两台服务器上实现主从复制。

环境准备

  • 主库(Master)

    • IP地址:192.168.1.10
    • 数据库名:shop
  • 从库(Slave)

    • IP地址:192.168.1.20

主库配置

  1. 修改配置文件

    编辑/etc/my.cnf,添加:

    [mysqld]
    log-bin=mysql-bin
    server-id=1
    
  2. 创建复制用户

    mysql -u root -p
    
    CREATE USER 'replicator'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
    FLUSH PRIVILEGES;
    
  3. 锁定主库并获取日志位置

    FLUSH TABLES WITH READ LOCK;
    SHOW MASTER STATUS;
    

    输出示例:

    +------------------+----------+
    | File             | Position |
    +------------------+----------+
    | mysql-bin.000002 |      120 |
    +------------------+----------+
    
  4. 备份数据库

    mysqldump -u root -p --all-databases --master-data > master_backup.sql
    
  5. 解除锁定

    UNLOCK TABLES;
    

从库配置

  1. 修改配置文件

    编辑/etc/my.cnf,添加:

    [mysqld]
    server-id=2
    
  2. 导入主库备份

    mysql -u root -p < master_backup.sql
    
  3. 配置复制参数

    mysql -u root -p
    
    CHANGE MASTER TO
    MASTER_HOST='192.168.1.10',
    MASTER_USER='replicator',
    
    
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='mysql-bin.000002',
    MASTER_LOG_POS=120;
    
  4. 启动从库

    START SLAVE;
    
  5. 检查状态

    SHOW SLAVE STATUS\G
    

    确保Slave_IO_RunningSlave_SQL_Running均为Yes

验证主从复制

在主库中执行以下操作:

USE shop;

INSERT INTO products (name, price) VALUES ('Laptop', 999.99);

在从库中查询:

USE shop;

SELECT * FROM products;

如果从库中能看到插入的数据,说明主从复制成功。

示例2:MariaDB主从复制

MariaDB的主从复制配置类似于MySQL。假设我们在两个MariaDB服务器上实现主从复制。

环境准备

  • 主库(Master)

    • IP地址:192.168.1.30
    • 数据库名:inventory
  • 从库(Slave)

    • IP地址:192.168.1.40

主库配置

  1. 修改配置文件

    编辑/etc/my.cnf.d/server.cnf,添加:

    [mysqld]
    log-bin=mariadb-bin
    server-id=1
    
  2. 创建复制用户

    mysql -u root -p
    
    CREATE USER 'replicator'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
    FLUSH PRIVILEGES;
    
  3. 锁定主库并获取日志位置

    FLUSH TABLES WITH READ LOCK;
    SHOW MASTER STATUS;
    

    输出示例:

    +-------------------+----------+
    | File              | Position |
    +-------------------+----------+
    | mariadb-bin.00001 |      345 |
    +-------------------+----------+
    
  4. 备份数据库

    mysqldump -u root -p --all-databases --master-data > master_backup.sql
    
  5. 解除锁定

    UNLOCK TABLES;
    

从库配置

  1. 修改配置文件

    编辑/etc/my.cnf.d/server.cnf,添加:

    [mysqld]
    server-id=2
    
  2. 导入主库备份

    mysql -u root -p < master_backup.sql
    
  3. 配置复制参数

    mysql -u root -p
    
    CHANGE MASTER TO
    MASTER_HOST='192.168.1.30',
    MASTER_USER='replicator',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='mariadb-bin.00001',
    MASTER_LOG_POS=345;
    
  4. 启动从库

    START SLAVE;
    
  5. 检查状态

    SHOW SLAVE STATUS\G
    

    确保Slave_IO_RunningSlave_SQL_Running均为Yes

验证主从复制

在主库中执行以下操作:

USE inventory;

INSERT INTO items (item_name, quantity) VALUES ('Monitor', 50);

在从库中查询:

USE inventory;

SELECT * FROM items;

如果从库中能看到插入的数据,说明主从复制成功。

非常感谢您读到这里!如果您觉得这篇文章对您有帮助,可以关注一下博主。关注后,您将第一时间获得最新的AI、云计算、运维(Linux、数据库,容器等)技术,以及更多实用的技能干货。

提供丰富的学习资源和实践经验,让你快速掌握AI技能;提供最新的行业动态和应用案例,帮助你在AI领域脱颖而出。

标签:主库,主从复制,架构,--,数据库,MASTER,MySQL,从库
From: https://blog.csdn.net/zgt_certificate/article/details/140859751

相关文章

  • 深入理解MyCAT分库分表机制:架构师的秘密武器
    一、MyCAT分库和分表的概念1.分库(DatabaseSharding)分库是将一个大数据库拆分成多个小数据库,以减小单个数据库的压力并提高系统的扩展性。每个子数据库可以分布在不同的服务器上,从而分散负载并提高性能。示例:假设我们有一个用户信息数据库users_db,其中包含了大量的用......
  • MyCAT数据库中间件:让你的数据库无缝扩展!
    什么是MyCATMyCAT是一个开源的数据库中间件系统,设计用于支持分布式数据库环境。它被广泛用于大数据和高并发的场景中,作为传统关系数据库(如MySQL)的扩展,以提高性能和扩展能力。MyCAT提供了数据库分片、读写分离、负载均衡、以及跨库的事务支持等功能。MyCAT的详细解释及其......
  • 大厂的风控引擎架构设计
    1架构师能力思维模型全局思维抽象思维2新需求的思考路径需求是否合理,是否能解决问题?能划分多少个子系统?每个子系统能划分多少个模块?这个系统需要可靠性吗,需要扩展能力吗?成本需要控制吗?表如何设计?API如何设计?模块之间如何通信?3风控引擎设计的核心点架构会围绕核心点......
  • 【数据科学】Pandas数据库中的Series&DataFrame
    前言前文再续,书接上一回,前两回讲到了Pandas的Series和DataFrame,今天我们使用jupyternotebook来进一步聊聊series和dataframe之间的关系。之前的文章中,我们了解到series和dataframe之间可以相互转换,看完这篇文章,相信你对它们之间的关系会有进一步的了解。正文importdata首......
  • 基于Python+Django协同过滤算法的招聘信息推荐系统设计与实现(源码+数据库+讲解)
    文章目录前言详细视频演示项目运行截图技术框架后端采用Django框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • Mojo编程语言与云服务及微服务架构的协同之道
    在当今的软件开发领域,云服务和微服务架构已经成为了构建可扩展、灵活且易于维护的应用程序的关键技术。本文将探讨一种假想的编程语言——Mojo——如何与云服务和微服务架构相结合,以实现高效、可靠的软件开发。1.引言云服务提供了按需计算资源,而微服务架构则将应用分解为......
  • 架构演化学习思考(3)
    架构演化学习思考(3)接上一篇我们继续对命令模式进行学习。在这节内容中,我们聊一下经典的命令模式,还记得上一篇文章开头我们实现的简单的命令模式吗?来看代码,非常简单易解。publicinterfaceICommand{voidExecute();}publicclassPlayMusicCommand:ICommand{......
  • 1000W长连接,如何建立和维护?千万用户IM 架构设计
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • 数据库教程:从基础操作到高级应用
    数据库教程:从基础操作到高级应用大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!数据库是现代软件开发的核心组成部分之一。掌握数据库的基础操作以及高级应用技术对于开发人员而言至关重要。本文将从基础操作开始,逐步深入到数据库的高级应用,包括SQL语句......
  • Oracle数据库教程:入门到精通
    Oracle数据库教程:入门到精通大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!Oracle数据库是市场上最强大的关系数据库管理系统之一。无论是大数据分析、企业级应用还是高性能交易系统,Oracle都能提供卓越的性能和可靠性。本文将带你从Oracle数据库的基本操......