首先查看主服务器二进制日志所处的位置(show master status;),如果服务器已经运行了一段时间,可以先对主服务器进行备份(备份至某个位置),在从服务器上恢复,再从该位置进行同步。
MariaDB [(none)]> change master to master_host='192.168.1.106',master_user='repuser',master_password='repuser',master_log_file='master-bin.000007',master_log_pos=343;
从服务器上启动IO线程和sql线程
MariaDB [(none)]> start slave;
或者
MariaDB [(none)]> start slave IO_THREAD
MariaDB [(none)]> start slave SQL_THREAD
从服务器上查看运行状况:
相关线程已经启动,其中Seconds_Behind_Master显示了从服务器落后主服务器的时间,这个变量是通过当前服务器时间戳和二进制日志中事件的时间戳对比得到的(null为从库没有处于运行状态,0也有可能是复制中断了,这个参数经供参考)
在主服务器上可同过show slave hosts查看与自己同步的从服务器:
实现半同步复制
半同步就是主服务器上数据发生了更改,需要等待至少一个从节点把数据完整地复制过去,才能继续后续的操作。半同步功能是以插件的方式提供能,要启用此功能需要先安装插件。该插件位于mariadb安装目录下的lib/plugin目录中,登入数据库后直接安装即可。
主节点上安装插件
MariaDB [(none)]> install plugin rpl_semi_sync_master soname 'semisync_master.so';
在配置文件中添加如下几项:
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_master_timeout = 1000
重启服务后查看相关变量:
MariaDB [(none)]> show global variables like '%semi%';
+------------------------------------+-------+
| Variable_name | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_master_timeout | 1000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_no_slave | ON |
+------------------------------------+-------+
从节点上安装插件
MariaDB [(none)]> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
在配置文件中添加:
rpl_semi_sync_slave_enabled = 1
重启服务后查看相关变量:
MariaDB [(none)]> show global variables like '%semi%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled | ON |
| rpl_semi_sync_slave_trace_level | 32 |
+---------------------------------+-------+
该功能已启用.................^_^
双主复制架构
实验环境:node1(192.168.1.106),node2(192.168.1.126)
配置双主模型是需要注意几点:
(1) 双方节点都得创建具有复制权限用户;
(2) 双节点都得启用中继日志和二进制日志;
(3) 为保证具有自动增长功能的字段能正确生成ID,需要配置两个节点分别使用偶数或奇数ID号;
(4) 都要把对方配置为自己的主节点;
node1上配置文件:
[root@node1 ~]# vim /etc/mysql/my.cnf
log-bin = /data/binlog/master-bin
binlog_format = row
datadir = /data/mydata
sync_binlog = 1
autocommit = off
relay-log = /data/relaylog/relay-log #中继日志存放位置
innodb_support_xa = 1
sync_master_info = 1
sync_relay_log = 1
sync_relay_log_info = 1
auto-increment-increment = 2 #自增长的间隔
auto-increment-offset = 1 #自增长起始值
slave_parallel_threads = 3
log_slave_updates = 1 #开启从库更新操作写入二进制日志功能
server-id = 1
node2上配置文件(除了下面3项其余的与node1上的配置一致):
[root@node1 ~]# vim /etc/mysql/my.cnf
.......
.......
auto-increment-increment = 2
auto-increment-offset = 2
server-id = 2
在node1和node2上都创建具有复制权限的用户:
MariaDB [(none)]> grant replication slave,replication client on *.* to repuser@'192.168.1.%' identified by 'repuser';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
查看node1和node2上当前数据库二进制日志文件所处的位置:
MariaDB [(none)]> show master status;
在node1上主服务器指向node2:
MariaDB [(none)]> change master to master_host='192.168.1.126',master_user='repuser',master_password='repuser',master_log_file='master-bin.000004',master_log_pos=657;
在node2上主服务器指向node1:
MariaDB [(none)]> change master to master_host='192.168.1.106',master_user='repuser',master_password='repuser',master_log_file='master-bin.000004',master_log_pos=657;
最后启动I/O线程和SQL线程:
MariaDB [(none)]> start slave;
node1(192.168.1.106)上查看从节点状态:
node2(192.168.1.126)上查看从节点状态:
在双主模型中应用半同步功能,需要在两个节点上都安装插件,并配置主从相关的参数。
配置完成.................^_^
--------------------------------------分割线 --------------------------------------