MariaDB 主从复制的配置
一、安装MariaDB
安装过程省略。
二、主从配置
环境
Master/Slave | 系统 | IP | 数据库版本 |
Master | CentOS6.7 | 10.10.3.211 | mariadb-10.1.19 |
Slave | CentOS6.7 | 10.10.3.212 | mariadb-10.1.19 |
1、Master的配置
(1)创建有复制权限的用户,命令如下:
CREATE USER 'test'@'10.10.3.212' IDENTIFIED BY '123456';
REVOKE ALL PRIVILEGES ,GRANT OPTION FROM 'test'@'10.10.3.212';
GRANT RELOAD,LOCK TABLES, REPLICATION CLIENT ,REPLICATION SLAVE ON *.* TO 'test'@'10.10.3.212';
FLUSH PRIVILEGES;
(2)启用二进制日志
修改配置文件/etc/my.cnf,增加如下行:
log-bin = /usr/local/mysql/binlogs/master-bin
注:目录没有话就先创建上
(3)修改配置文件/etc/my.cnf,修改如下行:
server-id = 1
重启Master数据库服务
2、Slave的配置
(1)修改配置文件/etc/my.cnf,修改如下行:
server-id = 2
注:可用 show variables like 'server_id'; 查看 server_id 设置是否正确
(2)修改配置文件/etc/my.cnf,启用中继日志,关闭二进制日志(如果启用了二进制日志就把配置文件里的注释或删掉)
relay-log = /usr/local/mysql/relaylogs/relay-bin
重启数据库服务,确定一下中继日志是否已开启。
SHOW GLOBAL VARIABLES LIKE 'relay_log';
(3)连接Master服务器
CHANGE MASTER TO MASTER_USER='test', MASTER_HOST='10.10.3.211', MASTER_PASSWORD='123456';
CHANGE MASTER TO MASTER_USER='test', MASTER_HOST='10.10.3.211', MASTER_PASSWORD='123456',MASTER_LOG_FILE = 'mysql-bin.000129',MASTER_LOG_POS = 720905150;
GTID方式(MASTER_USE_GTID=slave_pos)
CHANGE MASTER TO MASTER_HOST='10.10.14.63',MASTER_USER='test',MASTER_PASSWORD='123456',MASTER_USE_GTID=slave_pos;
(4)启动复制线程:
START SLAVE;
查看一下状态
SHOW SLAVE STATUS\G
(5)测试在Master上创建一个数据库,看Slave上有没有同步过来。
在测试过程中发现,如果在Slave上直接修改一条数据,Master上再去对该条数据进行修改就无法同步到Slave。
3、其他配置
#要复制的数据库
replicate-do-db = xsmart_drmp
#不复制的数据库
replicate-ignore-db = mysql
replicate-ignore-db = performance_schema
replicate-ignore-db = information_schema
#要复制的表
replicate-wild-do-table = xsmart_drmp.drmp_historyrecordsecond% (可用通配符%匹配)
#不复制的表
#replicate-wild-ignore-table =
RESET MASTER;
RESET SLAVE;
GTID复制还有另一种方式:current_pos,但这种不推荐使用,原因如下:
在MariaDB GTID复制中,使用current_pos方式可能会导致从服务器丢失数据。这是因为在current_pos方式下,从服务器从主服务器上复制的所有事务都是基于主服务器上的当前事务位置,而不是基于从服务器上已经成功应用的最后一个事务位置。
如果主服务器在从服务器复制事务期间崩溃或出现故障,那么current_pos位置可能会向前推进到一些尚未被复制的事务,从而导致从服务器丢失数据。此外,如果从服务器在复制期间发生故障或者由于其他原因停止复制,那么它将无法重新开始复制过程,因为它不知道从哪里开始复制。
为了避免数据丢失,建议在MariaDB GTID复制中使用slave_pos方式。因为slave_pos总是指向从服务器上已经成功应用的最后一个事务位置,所以即使在主服务器或从服务器出现故障时,从服务器也可以重新启动复制过程,并且只会复制丢失的那些事务。