1、主從複製mysql
MariaDB是將客戶端上傳的數據從主節點複製一份到從節點,從而能夠提升讀性能,而這種方式並不能提高寫性能,由於每一份數據都會在從節點上寫一份
sql
缺點:爲了增長讀寫性能,數據庫都是將數據 先存入內存中,隨後同步到數據文件中,也就是磁盤上,二者同步是異步同步,也就是說,從節點上的數據是落後於主節點的
數據庫
複製過程:vim
客戶端寫入數據---->主服務器的事務日誌內存---->事物日誌文件---->同步到數據文件---->經過二進制文件---從服務器的IO線程---->中繼日誌--->經過SQL線程來重放中繼日誌centos
實現:bash
主數據庫服務器服務器
[root@centos7 ~]# vim /etc/my.cnf [mysqld] server_id=1 log_bin=log-bin MariaDB [(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.cnf server_id=2 relay_log=relay-log read_only=ON MariaDB [(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
測試在主節點建立數據庫或者插入數據,便可同步 ide
2、雙主模型性能
雙主模型,容易形成數據不一致,通常不建議使用
主機A
[root@centos7 ~]# vim /etc/my.cnf [mysqld] server_id=1 log_bin=log-bin relay_log=relay-log MariaDB [(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=2 log_bin=log-bin relay_log=relay-log MariaDB [(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;
3、半同步複製
半同步複製是有一臺主機同步寫磁盤,當客戶端寫入數據,主數據庫服務器將馬上將數據寫入指定從服務器,當即同步,而後在相應客戶端,以證實有一份完整的數據,以防主服務器故障
實現半同步複製須要向數據庫添加主服務器添加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 | +---------------------------------+-------+