MariaDB 双主从同步
【项目设计】
在该项目中,目标是配置MariaDB
主从复制,以实现跨服务器的数据同步。项目涉及两台数据库服务器,分别为主服务器 (47.98.216.101) 和从服务器 (39.101.66.154),通过复制机制,确保主服务器上的数据变动能够实时反映到从服务器中。
双主从复制(Master-Master Replication)的原理是基于两台服务器互为主服务器和从服务器的关系进行数据同步。每台服务器既可以作为主服务器向另一台服务器发送数据更新,也可以作为从服务器接收并应用来自对方服务器的更新。其工作原理可以分为以下几个步骤:
1. 双向同步
双主配置中,两个数据库服务器各自保存对方的数据副本,A 服务器的更新会同步到 B 服务器,反之亦然。
每个数据库实例上都会记录并存储本机的二进制日志(Binary Log)。当有数据变化时,该服务器会将更新记录在自己的二进制日志文件中,并通过 I/O 线程传输到对方服务器。
2. 二进制日志和中继日志
每个服务器上的主库在接收到数据修改时,会将更改写入自己的二进制日志(binlog),同时充当从库的服务器读取并执行对方的二进制日志,存入中继日志(relay log)。
中继日志由 SQL 线程读取并在从服务器上执行。此时,服务器会跟踪其已读取和已执行的日志位置,以避免重复执行。
3. 主从切换
双主复制的关键在于双方都可以互为主库,这样系统在某一台服务器宕机时,可以无缝切换到另一台服务器进行读写操作。通常还可以配合负载均衡器或自动故障转移系统来实现高可用性。
系统架构设计
图1 主从复制原理
图 2:MariaDB 从主从复制系统架构图
项目配置说明
主服务器配置:
操作系统:CentOS
数据库版本:MariaDB
主服务器 IP:47.98.216.101
-
- 配置参数:需在主服务器的 MySQL 配置文件 /etc/my.cnf 中添加以下参数:
这将启用二进制日志,并指定要复制的数据库。
从服务器配置:
操作系统:CentOS
数据库版本:MariaDB
从服务器 IP:39.101.66.154
主从连接配置: 在从服务器上通过以下命令建立主从连接
CHANGE MASTER TO
MASTER_HOST='47.98.216.101',
MASTER_USER='repl_user',
MASTER_PASSWORD='repl_password',
MASTER_LOG_FILE='mariadb-bin.000002',
MASTER_LOG_POS=677;
数据库结构设计: 项目中的数据库 GlobalMall_DB 包含两个主要表:
Categories 表:存储商品分类信息。
Products 表:存储商品信息。
表 1:数据库结构设计
表名 | 字段名 | 数据类型 | 描述 |
Categories | category_id | INT | 分类 ID |
category_name | VARCHAR | 分类名称 | |
Products | product_id | INT | 商品 ID |
product_name | VARCHAR | 商品名称 |
表 1:数据库表结构
【项目实施】
实施步骤
1,分别要两台服务器上安装 MariaDB 并进行配置,启用二进制日志功能
- 配置 47.98.216.101 作为主服务器,启用二进制日志
编辑 /etc/my.cnf.d/mariadb-server.cnf,配置完重启服务
[mysqld]
log-bin
server-id=101 # 使用IP最后一字节作为ID
binlog-format=mixed
创建同步用户:
CREATE USER 'rp_zhouhengxu'@'39.101.66.154' IDENTIFIED BY ****';
GRANT REPLICATION SLAVE ON *.* TO 'rp_zhouhengxu'@'39.101.66.154';
3 配置 39.101.66.154 为 47.98.216.101 的从服务器
编辑配置文件 在 39.101.66.154 上编辑 /etc/my.cnf.d/mariadb-server.cnf
配置从库
配置好后,重启服务
运行 CHANGE MASTER TO 语句:执行以下 SQL 命令,用于设置主服务器的连接信息:
CHANGE MASTER TO
MASTER_HOST='47.98.216.101',
MASTER_USER='rp_zhouhengxu',
MASTER_PASSWORD='****',
MASTER_LOG_FILE='mariadb-bin.000001',
MASTER_LOG_POS=3038;
启动复制并查看状态
START SLAVE;SHOW SLAVE STATUS\G;
设置主服务器连接信息
4 配置 39.101.66.154 为主服务器
启用二进制日志 在 /etc/my.cnf.d/mariadb-server.cnf 添加:
log-bin
server-id=154
配置好后重启服务
创建授权账户 在 39.101.66.154 上创建一个用户,用于主服务器同步:
CREATE USER 'rp_zhouhengxu'@'47.98.216.101' IDENTIFIED BY '****';
GRANT REPLICATION SLAVE ON *.* TO 'rp_zhouhengxu'@'47.98.216.101';
获取二进制日志信息 运行 SHOW MASTER STATUS; 来获取同步所需的日志文件名和位置
5 配置 47.98.216.101 为从服务器
设置连接从服务器 在 47.98.216.101 上执行,启动复制并查看状态 启动从服务器复制:
【项目测试】
测试步骤
在47.98.216.101服务器上加数据:
INSERT INTO `GlobalMall_DB`.`Categories` ( `CategoryName`, `Description`, `CreatedAt`) VALUES ( 'good-4167', 'master', '2024-09-18 10:45:36');
添加数据
在39.101.66.154 数据库服务器上查看
查看数据
反向验证,
在39.101.66.154从数据,在47.98.216.101服务器上查看是否有同步数据
测试结论
通过上述测试,可以验证 MySQL 主从复制配置成功实现了跨服务器的数据同步。数据在主服务器和从服务器之间能实时同步,符合预期的设计目标。
作者:逐帆
出处:http://www.cnblogs.com/langhua/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。