这篇文章主要详细介绍了mariadb的主从复制、主主复制、半同步复制的概念和方法,有需要的小伙伴可以参考下

主从服务器的时间要同步,数据库版本最好是一致的,以免造成函数处理、日志读取、日志解析等发生异常。

以下三个主从复制的设置是独立的。

注意防火墙和selinux的影响。

1、简单主从复制的实现

(1)主服务器的配置

1)安装mariadb-server

[[email protected] ~]# yum -y install mariadb-server

2)编辑/etc/my.cnf文件

[[email protected] ~]# vim /etc/my.cnf

在[mysqld]段的最后添加以下内容

skip_name_resolve = ON innodb_file_per_table = ON server-id = 1 (id号不能跟从服务器相同) log-bin = master-log (自定义二进制日志文件名)

3)授权可以复制本地数据库信息的主机

[[email protected] ~]# systemctl start mariadb.service (启动mariadb server)[[email protected] ~]# mysqlMariaDB [(none)]> grant replication slave,replication client on *.* to 'repluser'@'10.1.51.%' identified by 'replpasswd';MariaDB [(none)]> flush privileges;MariaDB [(none)]> show master status\G (查看主服务器的状态信息,在从服务器中要用到)
*************************** 1. row ***************************File: master-log.000003 (正在使用的二进制日志文件)Position: 497 (所处的位置)Binlog_Do_DB:Binlog_Ignore_DB:

(2)从服务器的配置

1)安装mariadb-server

[[email protected] ~]# yum -y install mariadb-server

2)编辑/etc/my.cnf文件

[[email protected] ~]# vim /etc/my.cnf

在[mysqld]段的最后添加以下内容

skip_name_resolve = ON innodb_file_per_table = ON server-id = 2 (id号不能跟主服务器相同) relay-log = slave-log (自定义二进制日志文件名)

3)设置要从哪个主服务器的那个位置开始同步

[[email protected] ~]# systemctl start mariadb.service[[email protected] ~]# mysqlMariaDB [(none)]> change master to master_host='10.1.51.60',master_user='repluser',master_password='replpasswd',master_log_file='master-log.000003',master_log_pos=497;MariaDB [(none)]> start slave; (启动复制功能)
MariaDB [(none)]> show slave status\G (查看从服务器的状态,下面显示的是部分内容)Master_Host: 10.1.51.60Master_User: repluserMaster_Port: 3306Connect_Retry: 60Master_Log_File: master-log.000003Read_Master_Log_Pos: 497Relay_Log_File: slave-log.000002Relay_Log_Pos: 530Relay_Master_Log_File: master-log.000003Slave_IO_Running: YesSlave_SQL_Running: YesMaster_Server_Id: 1

(3)测试

1)在主服务器导入事先准备好的数据库

[[email protected] ~]# mysql < hellodb.sql

2)在从服务器查看是否同步

MariaDB [(none)]> show databases;
+--------------------+
| Database|
+--------------------+
| information_schema |
| hellodb|(数据库已经同步)
| mysql|
| performance_schema |
| test|
+--------------------+
MariaDB [(none)]> use hellodb;
MariaDB [hellodb]> show tables; (hellodb数据库的表也是同步的)
+-------------------+
| Tables_in_hellodb |
+-------------------+
| classes|
| coc|
| courses|
| scores|
| students|
| teachers|
| toc|
+-------------------+

2、双主复制的实现

(1)服务器1的配置

1)安装mariadb-server

[[email protected] ~]# yum -y install mariadb-server

2)编辑/etc/my.cnf文件

[[email protected] ~]# vim /etc/my.cnf

在[mysqld]段的最后添加以下内容

skip_name_resolve = ON innodb_file_per_table = ON server-id = 1 (id号不能跟从服务器相同) log-bin = master-log (自定义主服务器的二进制日志文件名) relay-log = slave-log (自定义从服务器的二进制日志文件名) auto_increment_offset = 1 auto_increment_increment = 2

3)在服务器2上查看的master状态

MariaDB [(none)]> show master status\G
*************************** 1. row ***************************File: master-log.000003Position: 422Binlog_Do_DB:Binlog_Ignore_DB:

4)启动mariadb server并进行如下配置

[[email protected] ~]# systemctl start mariadb.service[[email protected] ~]# mysqlMariaDB [(none)]> grant replication slave,replication client on *.* to 'repluser'@'10.1.51.%' identified by 'replpasswd';MariaDB [(none)]> change master to master_host='10.1.51.50',master_user='repluser',master_password='replpasswd',master_log_file='master-log.000003',master_log_pos=422;MariaDB [(none)]> start slave;MariaDB [(none)]> SHOW SLAVE STATUS\G (仅是部分内容)Master_Host: 10.1.51.50Master_User: repluserMaster_Port: 3306Connect_Retry: 60Master_Log_File: master-log.000003Read_Master_Log_Pos: 422Relay_Log_File: slave-log.000002Relay_Log_Pos: 530Relay_Master_Log_File: master-log.000003Slave_IO_Running: YesSlave_SQL_Running: YesMaster_Server_Id: 2

(2)服务器2的配置

1)安装mariadb-server

[[email protected] ~]# yum -y install mariadb-server

2)编辑/etc/my.cnf文件

[[email protected] ~]# vim /etc/my.cnf skip_name_resolve = ON innodb_file_per_table = ON server-id = 2 relay-log = slave-log lob-bin = master-log auto_increment_offset = 2 auto_increment_increment = 2

3)在服务器1查看master状态

MariaDB [(none)]> show master status\G *************************** 1. row *************************** File: master-log.000003 Position: 245 Binlog_Do_DB: Binlog_Ignore_DB:

4)启动mariadb server并配置

[[email protected] ~]# systemctl start mariadb.service[[email protected] ~]# mysqlMariaDB [(none)]> grant replication slave,replication client on *.* to 'repluser'@'10.1.51.%' identified by 'replpasswd';MariaDB [(none)]> change master to master_host='10.1.51.60',master_user='repluser',master_password='replpasswd',master_log_file='master-log.000003',master_log_pos=245;MariaDB [(none)]> start slave;MariaDB [(none)]> show slave status\G (仅是部分内容)Master_Host: 10.1.51.60Master_User: repluserMaster_Port: 3306Connect_Retry: 60Master_Log_File: master-log.000003Read_Master_Log_Pos: 422Relay_Log_File: slave-log.000003Relay_Log_Pos: 530Relay_Master_Log_File: master-log.000003Slave_IO_Running: YesSlave_SQL_Running: YesMaster_Server_Id: 1

(3)测试

1)在任意一台服务器上创建mydb数据库

MariaDB [(none)]> create database mydb;

2)在另一台服务器上查看

MariaDB [(none)]> show databases;
+--------------------+
| Database|
+--------------------+
| information_schema |
| mydb|
| mysql|
| performance_schema |
| test|
+--------------------+

3、半同步复制的实现

(1)在主服务器上的配置

1)安装mariadb-server

[[email protected] ~]# yum -y install mariadb-server

2)编辑/etc/my.cnf

[[email protected] ~]# vim /etc/my.cnf skip_name_resolve = ON innodb_file_per_table = ON server-id = 1 log-bin = master-log

3)授权可以复制本地数据库信息的主机

[[email protected] ~]# systemctl start mariadb.service (启动mariadb server)[[email protected] ~]# mysqlMariaDB [(none)]> grant replication slave,replication client on *.* to 'repluser'@'10.1.51.%' identified by 'replpasswd';MariaDB [(none)]> flush privileges;MariaDB [(none)]> show master status\G (查看主服务器的状态信息,在从服务器中要用到)
*************************** 1. row ***************************File: master-log.000003 (正在使用的二进制日志文件)Position: 245 (所处的位置)Binlog_Do_DB:Binlog_Ignore_DB:

4)安装rpl semi sync_master插件,并启用

[[email protected] ~]# mysqlMariaDB [(none)]> install plugin rpl_semi_sync_master soname 'semisync_master.so';
MariaDB [(none)]> set global rpl_semi_sync_master_enabled = ON;

补充:

MariaDB [(none)]> show plugins;(可查看插件是否激活) MariaDB [(none)]> show global variables like 'rpl_semi%';(可查看安装的插件是否启用) MariaDB [(none)]> show global status like '%semi%';(可查看从服务器的个数,此时是0个)

(2)从服务器的配置

1)安装mariadb-server

[[email protected] ~]# yum -y install mariadb-server

2)编辑/etc/my.cnf文件

[[email protected] ~]# vim /etc/my.cnf

在[mysqld]段的最后添加以下内容

skip_name_resolve = ON innodb_file_per_table = ON server-id = 2 (id号不能跟主服务器相同) relay-log = slave-log (自定义二进制日志文件名)

3)设置要从哪个主服务器的那个位置开始同步

[[email protected] ~]# systemctl start mariadb.service[[email protected] ~]# mysqlMariaDB [(none)]> change master to master_host='10.1.51.60',master_user='repluser',master_password='replpasswd',master_log_file='master-log.000003',master_log_pos=245;

4)安装rpl semi sync_slave插件并启用

[[email protected] ~]# mysqlMariaDB [(none)]> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';MariaDB [(none)]> set global rpl_semi_sync_slave_enabled = ON;MariaDB [(none)]> start slave;

完成上面配置后,可以在主服务器上查看半同步复制的相关信息,命令如下:

MariaDB [(none)]> show global status like '%semi%';Rpl_semi_sync_master_clients 1 (从服务器有一台)

(3)测试

测试以个人实际情况而定 1)在主服务器上导入事先准备好的数据库hellodb.sql

MariaDB [hellodb]> source /root/hellodb.sql;

2)在主服务器上查看半同步复制的状态

MariaDB [hellodb]> show master status;
+-------------------+----------+--------------+------------------+
| File| Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000003 |8102 |||
+-------------------+----------+--------------+------------------+MariaDB [hellodb]> show global status like '%semi%';
+--------------------------------------------+-------+
| Variable_name| Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients| 1|
| Rpl_semi_sync_master_net_avg_wait_time| 1684 |
| Rpl_semi_sync_master_net_wait_time| 60630 |
| Rpl_semi_sync_master_net_waits| 36 |
| Rpl_semi_sync_master_no_times| 1|
| Rpl_semi_sync_master_no_tx| 1|
| Rpl_semi_sync_master_status| ON |
| Rpl_semi_sync_master_timefunc_failures| 0|
| Rpl_semi_sync_master_tx_avg_wait_time| 1884 |
| Rpl_semi_sync_master_tx_wait_time| 65965 |
| Rpl_semi_sync_master_tx_waits| 35 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0|
| Rpl_semi_sync_master_wait_sessions| 0|
| Rpl_semi_sync_master_yes_tx| 35 |
+--------------------------------------------+-------+

3)在从服务器上查看是否同步

MariaDB [(none)]> show databases;
MariaDB [(none)]> use hellodb;
MariaDB [hellodb]> select * from students;

补充:基于上面的半同步复制配置复制的过滤器,复制过滤最好在从服务器上设置,步骤如下

(1)从服务器的配置

1)关闭mariadb server

[[email protected] ~]# systemctl stop mariadb.service

2)编辑/etc/my.cnf文件

[[email protected] ~]# vim /etc/my.cnfskip_name_resolve = ONinnodb_file_per_table = ONserver-id = 2relay-log = slave-logreplicate-do-db = mydb (只复制mydb数据库的内容)

补充:常用的过滤选项如下

Replicate_Do_DB= Replicate_Ignore_DB= Replicate_Do_Table= Replicate_Ignore_Table= Replicate_Wild_Do_Table= Replicate_Wild_Ignore_Table=

3)重启mariadb server

[[email protected] ~]# systemctl start mariadb.service

4)重启mariadb server后,半同步复制功能将被关闭,因此要重新启动

MariaDB [(none)]> show global variables like '%semi%';
+---------------------------------+-------+
| Variable_name| Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled| OFF |
| rpl_semi_sync_slave_trace_level | 32 |
+---------------------------------+-------+MariaDB [(none)]> set global rpl_semi_sync_slave_enabled = ON;
MariaDB [(none)]> stop slave;(需先关闭从服务器复制功能再重启)
MariaDB [(none)]> start slave;

(2)测试

1)主服务器上的hellodb数据库创建一个新表semitable

MariaDB [hellodb]> create table semitable (id int);

2)在从服务器上查看hellodb数据库是否有semitable

MariaDB [(none)]> use hellodb
MariaDB [hellodb]> show tables;(并没有)
+-------------------+
| Tables_in_hellodb |
+-------------------+
| classes|
| coc|
| courses|
| scores|
| students|
| teachers|
| toc|
+-------------------+

3)在主服务器上创建mydb数据库,并为其创建一个tbl1表

MariaDB [hellodb]> create database mydb;

4)在从服务器上查看mydb数据库的是否有tbl1表

MariaDB [hellodb]> use mydb;
MariaDB [mydb]> show tables; (可以查看到)
+----------------+
| Tables_in_mydb |
+----------------+
| tbl1|
+----------------+
最新资讯
Uber CEO:和竞争对手相比,我们的盈利机会最大

Uber CEO:和竞争对手相

Uber首席执行官达拉·科斯洛沙希(Dara Khosrowshahi)表
嘀嗒出行:暂时关闭武汉城际和市内顺风车

嘀嗒出行:暂时关闭武汉

嘀嗒出行决定:于1月23日10时起,暂时关闭武汉城际顺风车
京东方A:2020年柔性AMOLED出货量目标有望大幅提升

京东方A:2020年柔性AMO

公司柔性AMOLED客户结构将更加丰富,2020年公司柔性AMOL
哪种动物最遵守一夫一妻制?

哪种动物最遵守一夫一

在交配方面,动物面临的障碍比人类少得多。动物不会感到
分析师预计到2024年苹果服务收入将达到1000亿美元

分析师预计到2024年苹

苹果公司的投资者低估了该公司服务业务的价值。到2024
孟晚舟案引渡听证会第三天 控辩双方激辩

孟晚舟案引渡听证会第

中国华为公司高管孟晚舟在加拿大被非法拘捕、美国要求
最新文章
Windows10系统下安装MariaDB 的教程图解

Windows10系统下安装M

MariaDB由MySQL的创始人麦克尔·维德纽斯主导开发
Exchange在接收连接器上启用匿名中继的方法

Exchange在接收连接器

这篇文章主要介绍了Exchange在接收连接器上启用匿名中
我是如何用2个Unix命令给MariaDB SQL提速的

我是如何用2个Unix命

我试图在 MariaDB(MySQL)上运行一个简单的连接查询,但性
Window7安装MariaDB数据库及系统初始化操作分析

Window7安装MariaDB数

这篇文章主要介绍了Window7安装MariaDB数据库及系统初
Windows Server 2016 服务器配置指南 之 MariaDB数据库环境搭建方法

Windows Server 2016

这篇文章主要介绍了Windows Server 2016 服务器配置指
CentOS 7中成功安装MariaDB的方法教程

CentOS 7中成功安装Ma

这篇文章主要给大家介绍了CentOS 7中成功安装MariaDB