CentOS 7.6安裝配置MariaDB semi-sync半同步主從複製

1、半同步主從複製和異步主從複製的區別:mysql

MariaDB主從複製,默認爲異步複製。異步複製,即master執行完事物並提交後,二進制日誌記錄這些更新操做完成後,就開始下一批事務,並不關心這些更新是否被複制到slave上,而半同步複製則須要等待至少1slave接收到master的二進制日誌後,纔開始執行下一批事務。在這個等待過程當中,若是網絡故障或slave宕機,master在事務提交後等待10秒(變量rpl_semi_sync_master_timeout的默認值)後,就會繼續,這時master就會變回原來默認的異步狀態。當配置爲半同步複製時,每個事務需等待slave接收日誌後才返回給客戶端。半同步模式下若是在指定時間內沒有完成,將自動降級爲異步模式。sql


2、配置半同步主從複製:數據庫

一、演示環境:vim

IP服務器

操做系統網絡

數據庫版本異步

安裝方式socket

角色ide

192.168.1.145測試

CentOS   7.6 x86_64

MariaDB-10.3.15

yum

master

192.168.1.146

CentOS   7.6 x86_64

MariaDB-10.3.15

yum

slave

備註:兩個節點的服務器時間同步

二、master修改server.cnf配置文件:# vim /etc/my.cnf.d/server.cnf

[mysqld]

port=3306

socket=/var/lib/mysql/mysql.sock

datadir=/var/lib/mysql

log_error=/var/log/mariadb.log

lower_case_table_names=1

character_set_server=utf8mb4

collation_server=utf8mb4_general_ci

innodb_file_per_table=1

skip_name_resolve=1

slow_query_log=1

slow_query_log_file=mariadb-slow.log

rpl_semi_sync_master_enabled=1

log_bin=master-bin

log_bin_index=master-bin.index

binlog_format=mixed

server_id=1

sync_binlog=1

innodb_flush_log_at_trx_commit=1

備註:/usr/lib64/mysql/plugin目錄中,已沒有semisync_master.sosemisync_slave.so這兩個插件,由於從MariaDB 10.3.3版本開始已經把半同步插件整合至Server中,所以在配置半同步複製時,無需在masterslave中再使用以下命令安裝上述兩個插件:

MariaDB [(none)]> install plugin rpl_semi_sync_master soname 'semisync_master.so';

MariaDB [(none)]> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

三、master建立具備複製權限的用戶:

MariaDB [(none)]> grant replication slave,replication client on *.* to 'repluser'@'192.168.1.146' identified by '123456';

MariaDB [(none)]> flush privileges;

四、master查看正在使用的二進制日誌文件名稱及事件位置:

MariaDB [(none)]> show master status;

image.png

五、master查看與半同步複製相關的變量和狀態值:

MariaDB [(none)]> show global variables like 'rpl_semi_sync%';

備註:rpl_semi_sync_master_enabled的值爲ON

MariaDB [(none)]> show global status like 'rpl_semi_sync%';

備註:Rpl_semi_sync_master_clients的值爲0Rpl_semi_sync_master_status的值爲OFF

六、slave修改server.cnf配置文件:# vim /etc/my.cnf.d/server.cnf

[mysqld]

port=3306

socket=/var/lib/mysql/mysql.sock

datadir=/var/lib/mysql

log_error=/var/log/mariadb.log

lower_case_table_names=1

character_set_server=utf8mb4

collation_server=utf8mb4_general_ci

innodb_file_per_table=1

skip_name_resolve=1

slow_query_log=1

slow_query_log_file=mariadb-slow.log

rpl_semi_sync_slave_enabled=1

relay_log=relay-log

relay_log_index=relay-log.index

server_id=2

read_only=1

備註:

(1)slave只能讀不能寫

(2)若是slave不做爲其它slavemaster,則無需開啓其二進制日誌

(3)中繼日誌默認不存在,只有當複製啓動時纔會自動生成

七、slave使用具備複製權限的用戶鏈接至master

MariaDB [(none)]> change master to master_host='192.168.1.145',master_user='repluser',master_password='123456',master_port=3306,master_log_file='master-bin.000001',master_log_pos=2275;

MariaDB [(none)]> show slave status\G

image.png

備註:

(1)Slave_IO_RunningSlave_SQL_Running的值,默認爲No

(2)自動在數據目錄/var/lib/mysql中建立relay-log.000001relay-log.indexrelay-log.info文件

(3)Master_Log_File的值爲master的二進制日誌文件名稱

(4)Read_Master_Log_Pos的值爲master二進制日誌事件的位置

八、slave啓動複製線程:

MariaDB [(none)]> start slave;

備註:

(1)start slave等同於分別執行start slave io_threadstart slave sql_thread

(2)stop slave表示中止主從複製線程

(3)重啓slave所在的服務器,複製線程也會自動啓動

MariaDB [(none)]> show slave status\G

image.png

image.png

備註:

(1)只有當Slave_IO_RunningSlave_SQL_Running的值都爲Yes時,複製線程纔算啓動成功

(2)Seconds_Behind_Master的值爲0,說明slave沒有落後於master

(3)複製時的詳細信息記錄在slave的錯誤日誌/var/log/mariadb.log

九、master查看與半同步複製相關的狀態值:

MariaDB [(none)]> show global status like 'rpl_semi_sync%';

備註:Rpl_semi_sync_master_clients的值變爲1Rpl_semi_sync_master_status的值變爲ON,說明半同步主從複製啓動成功

十、slave查看與半同步複製相關的變量和狀態值:

MariaDB [(none)]> show global variables like 'rpl_semi_sync%';

備註:rpl_semi_sync_slave_enabled的值爲ON

MariaDB [(none)]> show global status like 'rpl_semi_sync%';

備註:Rpl_semi_sync_slave_status的值爲ON

十一、master查看slave相關信息:

MariaDB [(none)]> show slave hosts;

image.png


3、測試半同步主從複製:

一、master建立測試數據:

MariaDB [(none)]> create database db1;

MariaDB [(none)]> use db1;

MariaDB [db1]> create table tb1(id int unsigned auto_increment primary key not null,name char(20) not null);

MariaDB [db1]> desc tb1;

MariaDB [db1]> insert into tb1(name) values('zhangsan'),('lisi');

MariaDB [db1]> select * from tb1;

image.png

MariaDB [db1]> show master status;

image.png

二、slave查看測試數據:

MariaDB [(none)]> show databases;

MariaDB [(none)]> use db1;

MariaDB [db1]> show tables;

MariaDB [db1]> desc tb1;

MariaDB [db1]> select * from tb1;

image.png

MariaDB [db1]> show slave status\G

相關文章
相關標籤/搜索