一、主从复制

        MariaDB是将客户端上传的数据从主节点复制一份到从节点,从而可以提高读性能,而这种方式并不能提升写性能,因为每一份数据都会在从节点上写一份

        缺点:为了增加读写性能,数据库都是将数据 先存入内存中,随后同步到数据文件中,也就是磁盘上,两者同步是异步同步,也就是说,从节点上的数据是落后于主节点的

复制过程:

客户端写入数据---->主服务器的事务日志内存---->事物日志文件---->同步到数据文件---->通过二进制文件---从服务器的IO线程---->中继日志--->通过SQL线程来重放中继日志

实现:

主数据库服务器

[root@centos7 ~]# vim /etc/my.cnf[mysqld]server_id=1log_bin=log-binMariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO test@"192.168.1.%" IDENTIFIED BY 'centos';  #授权主从复制账户MariaDB [(none)]> FLUSH PRIVILEGES;  #刷新MariaDB [(none)]> SHOW MASTER STATUS;  #查看当前使用的是哪一个二进制日志,还有POS的位置,需要在从节点使用  +----------------+----------+--------------+------------------+| File           | Position | Binlog_Do_DB | Binlog_Ignore_DB |+----------------+----------+--------------+------------------+| log-bin.000001 |      489 |              |                  |+----------------+----------+--------------+------------------+

从服务器

[root@centos7 ~]# vim /etc/my.cnfserver_id=2relay_log=relay-logread_only=ONMariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.1.151',MASTER_USER='test',MASTER_PASSWORD='centos',MASTER_LOG_FILE='log-bin.000001',MASTER_LOG_POS=489;MariaDB [(none)]> start slave;MariaDB [(none)]> show slave status\G;  Slave_IO_Running: Yes  #这两项需要为yes,代表开启IO线程和SQL线程  Slave_SQL_Running: Yes

测试在主节点创建数据库或者插入数据,即可同步 

二、双主模型

双主模型,容易造成数据不一致,一般不建议使用

主机A

[root@centos7 ~]# vim /etc/my.cnf[mysqld]server_id=1log_bin=log-binrelay_log=relay-logMariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO test@"192.168.1.%" IDENTIFIED BY 'centos';CHANGE MASTER TO MASTER_HOST='192.168.1.152',MASTER_USER='test',MASTER_PASSWORD='centos',MASTER_LOG_FILE='log-bin.000001',MASTER_LOG_POS=489;MariaDB [(none)]> start slave;MariaDB [(none)]> show slave status\G;

主机B

[root@centos7 ~]# vim /etc/my.cnf[mysqld]server_id=2log_bin=log-binrelay_log=relay-logMariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO test@"192.168.1.%" IDENTIFIED BY 'centos';CHANGE MASTER TO MASTER_HOST='192.168.1.151',MASTER_USER='test',MASTER_PASSWORD='centos',MASTER_LOG_FILE='log-bin.000001',MASTER_LOG_POS=489;MariaDB [(none)]> start slave;MariaDB [(none)]> show slave status\G;

三、半同步复制

        半同步复制是有一台主机同步写磁盘,当客户端写入数据,主数据库服务器将立刻将数据写入指定从服务器,立即同步,然后在相应客户端,以证明有一份完整的数据,以防主服务器故障

实现半同步复制需要向数据库添加主服务器添加semisync_master.so,从服务器添加semisync_slave.so

主服务器

MariaDB [none]> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';MariaDB [none]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';MariaDB [none]> SET GLOBAL rpl_semi_sync_master_enabled=ON;	#开启同步写数据文件MariaDB [none]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';+------------------------------------+-------+| Variable_name                      | Value |+------------------------------------+-------+| rpl_semi_sync_master_enabled       | ON    || rpl_semi_sync_master_timeout       | 10000 || rpl_semi_sync_master_trace_level   | 32    || rpl_semi_sync_master_wait_no_slave | ON    |+------------------------------------+-------+

从服务器

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';			MariaDB [none]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';                        +---------------------------------+-------+| Variable_name                   | Value |+---------------------------------+-------+| rpl_semi_sync_slave_enabled     | OFF   || rpl_semi_sync_slave_trace_level | 32    |+---------------------------------+-------+						MariaDB [none]> STOP SLAVE IO_THREAD;MariaDB [none]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';MariaDB [none]> START SLAVE IO_THREAD;MariaDB [none]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';                        +---------------------------------+-------+| Variable_name                   | Value |+---------------------------------+-------+| rpl_semi_sync_slave_enabled     | OFF   || rpl_semi_sync_slave_trace_level | 32    |+---------------------------------+-------+