如何设置 MariaDB 主主复制?请收下这份教程~

MariaDB Master-Master 复制服务器,可提高速度并减少延迟。使用replication功能,两个独立的 MySQL 服务器充当一个集群。服务器相互同步,以便在发生故障时,其他服务器可以接管并且不会丢失数据。

环    境

OS:CentOS 8.5

MariaDB: MariaDB 10.3.28

两台主机名称如下:

Hostname: MasterA ,IP:192.168.232.130

Hostname: MasterB ,IP:192.168.232.131

安装MariaDB

使用下面命令在两天服务器中安装mariadb服务:

# MasterA中安装:
[root@MasterA ~]# yum -y install mariadb mariadb-server
# MasterB中安装:
[root@MasterB ~]# yum -y install mariadb mariadb-server

启动mariadb服务:

[root@MasterA ~]# systemctl enable mariadb --now
[root@MasterB ~]# systemctl enable mariadb --now

编辑my.cnf配置文件

编辑/etc/my.cnf.d/mariadb-server.cnf配置文件

修改MasterA节点的mariadb-server.cnf配置文件:

[root@MasterA my.cnf.d]# vim mariadb-server.cnf

在mysqld部分下面添加server-id,log-bin 和 log-basename

保存配置,并重启MasterA的MariaDB服务。

[root@MasterA ~]# systemctl restart mariadb

在MasterA的数据库中创建一个帐户,用户名为replica_user,密码为123456,指定slave的IP地址为192.168.232.131,也就是MasterB的IP地址。

MariaDB [(none)]> grant replication slave on*.* to 'replica_user'@192.168.232.131 identified by'123456';
Query OK,0 rows affected (0.000 sec)
MariaDB [(none)]> flush privileges;
Query OK,0 rows affected (0.001 sec)

修改MasterB节点的mariadb-server.cnf配置文件:

[root@MasterB ~]# vim /etc/my.cnf.d/mariadb-server.cnf

在mysqld部分下面添加server-id,log-bin 和 log-basename

保存配置,并重启MasterA的MariaDB服务。

[root@MasterA ~]# systemctl restart mariadb

在MasterB的数据库中创建一个帐户,用户名为replica_user,密码为123456,指定slave的IP地址为192.168.232.130,也就是MasterA的IP地址。

MariaDB [(none)]> grant replication slave on*.* to 'replica_user'@192.168.232.130 identified by'123456';
Query OK,0 rows affected (0.000 sec)
MariaDB [(none)]> flush privileges;
Query OK,0 rows affected (0.001 sec)

配置双主复制

首先进入MasterA操作系统,进入数据库,使用show master status;查看二进制日志名称和pos值:

[root@MasterA ~]# mysql -u root -p123456
Welcome to the MariaDB monitor. Commands end with ;or \g.
Your MariaDB connection id is19
Server version:10.3.28-MariaDB-log MariaDB Server

Copyright (c)2000,2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;'or'\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show master status;
+---------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------------+----------+--------------+------------------+
| master01-bin.000004|5078|||
+---------------------+----------+--------------+------------------+
1 row inset(0.000 sec)

MariaDB [(none)]>

在MasterB系统中进入数据库,指定MasterA服务器的信息,并指定刚才从MasterA获取的bin-log文件名和position值,并启动slave:

MariaDB [(none)]> change master to master_host='192.168.232.130',
-> master_user='replica_user',
-> master_password='123456',
-> master_log_file='master01-bin.000004',
-> master_log_pos=5078;
Query OK,0 rows affected (0.007 sec)

MariaDB [(none)]> start slave;
Query OK,0 rows affected (0.002 sec)

查看slave状态是否有报错:

看到上图中,Slave_IO_Running和Slave_SQL_Running​都为yes,Last_Error没有错误信息。

其次,在MasterB的数据库中查询master相关信息:

MariaDB [(none)]> show master status;
+---------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------------+----------+--------------+------------------+
| master02-bin.000001|1080|||
+---------------------+----------+--------------+------------------+
1 row inset(0.000 sec)

在MasterA系统中进入数据库,指定MasterB服务器的信息,并指定刚才从MasterB获取的bin-log文件名和position值,并启动slave:

MariaDB [(none)]> change master to master_host='192.168.232.131',
-> master_user='replica_user',
-> master_password='123456',
-> master_log_file='master02-bin.000001',
-> master_log_pos=1080;
Query OK,0 rows affected (0.010 sec)

MariaDB [(none)]> start slave;
Query OK,0 rows affected (0.002 sec)

查看slave状态是否有报错:

​看到上图中,Slave_IO_Running和Slave_SQL_Running​都为yes,Last_Error没有错误信息。

任意一台数据库,创建数据库后,另一台也可以看到了。下面实在MasterB中创建的数据库:​

MariaDB [test_replica]>create database mydb;
Query OK,1 row affected (0.000 sec)

在MasterA中查看是否有mydb数据库:

下面是在MasterA中创建数据库:

MariaDB [(none)]>create database mydb_02;
Query OK,1 row affected (0.000 sec)

在MasterB中查看是否有mydb_02数据库:

下面实例将MasterA数据库中的test_replica库备份,并导入到MasterB的数据库中,然后在MasterB中的数据库中添加数据,查看是否会同步:

[root@MasterA ~]# mysqldump -u root -p123456 test_replica > a.sql
[root@MasterA ~]# scp a.sql root@192.168.232.131:~

切换到MasterB操作系统,创建一个数据库名称为test_replica:

[root@MasterB ~]# mysql -u root -p123456 -e 'create database test_replica;'
[root@MasterB ~]# mysql -u root -p123456 -e 'show databases;'

将MasterA到处的数据导入到MasterB系统中的test_replica库中:

[root@MasterB ~]# mysql -u root -p123456 test_replica < a.sql

看到已经导入了数据表。

下面在MasterB中,进入test_replica库,向Admins表添加数据,然后在MasterA中查看是否也存在同样数据:

MariaDB [test_replica]>insertinto Admins values('user01','123');
Query OK,1 row affected (0.002 sec)

在MasterA中查看test_replica数据库中的Admins表:

[root@MasterA ~]# mysql -u root -p123456 -e 'select * from test_replica.Admins;'
+--------+------+
| Aname | Apwd |
+--------+------+
| admin |123|
| user01 |123|
+--------+------+

可以看到数据存在。下面在MasterA中向Admins表添加数据,查看MasterB数据库中是否会同步:

MariaDB [test_replica]>insertinto Admins values('user02','321');
Query OK,1 row affected (0.002 sec)

在MasterB中也可以看到刚刚创建的信息:

[root@MasterB ~]# mysql -u root -p123456 -e 'select * from test_replica.Admins;'
+--------+------+
| Aname | Apwd |
+--------+------+
| admin |123|
| user01 |123|
| user02 |321|
+--------+------+

这样就完成啦。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/277010.html<

(0)
管理的头像管理
上一篇2025-05-10 22:26
下一篇 2025-05-10 22:27

相关推荐

  • 高主频ecs服务器怎么迁移?ecs服务器迁移数据丢失怎么办

    高主频ECS服务器迁移的核心在于采用“停机快照+镜像创建”或“在线热迁移”方案,前者数据一致性最高且操作最稳妥,后者对业务连续性要求极高但技术门槛较大,在云计算领域,高主频实例通常用于处理高频交易、实时计算或大型游戏服务器等对CPU算力极度敏感的场景,这类业务一旦中断,损失往往是分钟级甚至秒级的,迁移不仅仅是数……

    2026-06-18
    0
  • 为什么高ping网络卡顿?高ping网络怎么解决

    高Ping网络的核心痛点在于数据包传输延迟过高,解决思路需从物理线路优化、路由器QoS设置及运营商节点选择三个维度入手,优先排查本地局域网拥堵与宽带套餐带宽不足问题,当你正在玩竞技类游戏或进行视频会议时,屏幕上的角色突然卡顿,或者对方声音断断续续,这种体验往往源于网络延迟(Ping值)过高,Ping值并非单纯的……

    2026-06-18
    0
  • 高IO存储选OSS还是NAS?高并发场景存储方案怎么选

    高IO存储场景下,OSS(对象存储)通常不是首选,NAS(网络文件存储)或更专业的块存储才是满足高并发、低延迟读写需求的正确选择,在2026年的云计算架构中,存储选型早已脱离了“一刀切”的时代,很多开发者在面对海量数据时,第一反应是“既然OSS便宜又无限扩展,能不能全用OSS?”这种想法在低并发、非结构化数据……

    2026-06-18
    0
  • 如何选购高主频ecs服务器?高主频ecs服务器适合什么业务

    高主频ECS服务器是处理高频交易、实时渲染及复杂计算任务的首选,其核心优势在于通过提升CPU单核性能显著降低延迟并提高吞吐量,适合对响应速度极度敏感的业务场景,在云计算日益普及的今天,选择云服务器已不再是简单的“买台机器”,而是根据业务特性进行精准匹配,对于大多数常规Web应用,标准型或通用型实例足以应付,但当……

    2026-06-18
    0
  • 高io版云数据库性能如何?高io版云数据库适合什么场景

    高I/O版云数据库通过提供更高的读写吞吐量和更低的延迟,是应对高并发、大数据量业务场景的核心基础设施,能显著提升系统响应速度并保障数据一致性,在数字化转型的深水区,传统关系型数据库往往成为业务增长的瓶颈,当用户请求量激增,或者需要处理海量实时数据时,普通的云数据库实例容易因I/O(输入/输出)性能不足而导致查询……

    2026-06-18
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注