CentOS 7.6安裝配置MariaDB異步主從複製

1、主從複製原理及相關概念:mysql

一、主從複製原理:master將操做記錄保存至其二進制日誌中,經過dump線程傳輸給slave,而後slavemaster的二進制日誌經過slaveIO線程複製至slave的中繼日誌中,最後經過slaveSQL線程讀取中繼日誌中的事件還原數據庫操做,以達到複製的目的,默認爲異步模式。sql

image.png

二、主從複製中相關線程:數據庫

所在節點vim

線程名稱服務器

線程做用負載均衡

master異步

Dump線程socket

爲每一個slaveIO線程啓動一個dump線程,並向其發送二進制日誌事件ide

slave性能

IO線程

SQL線程

master請求二進制日誌事件,並保存至本地中繼日誌中

從中繼日誌中讀取日誌事件,並在本地完成重放

三、異步模式:當master收到寫請求時,只保證master本地寫入二進制日誌完成,就返回給客戶端寫入操做完成,無需等待slave反饋已經收到master二進制日誌中的寫入事件,性能好。

四、主從複製做用:輔助實現數據備份、高可用、異地容災、負載均衡讀操做等

五、slave數據目錄/var/lib/mysql中與主從複製相關的文件:

(1)master.info:保存slave鏈接至master時所需的用戶、密碼、服務器地址等相關信息

(2)relay-log.info:保存slave已經複製的當前master二進制日誌文件名稱、事件位置和當前slave本地中繼日誌文件名稱、事件位置的對應關係


2、配置異步主從複製:

一、演示環境:

IP

操做系統

數據庫版本

安裝方式

角色

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

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

四、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

六、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

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=2034;

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查看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,age int not null);

MariaDB [db1]> desc tb1;

MariaDB [db1]> insert into tb1(age) values(35),(40);

MariaDB [db1]> select * from tb1;

image.pngimage.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


4、實現過濾複製:

slaveSQL線程在重放中繼日誌中的事件時,僅讀取與指定數據庫(特定表)相關的事件,並應用於本地。

一、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

relay_log=relay-log

relay_log_index=relay-log.index

server_id=2

read_only=1

replicate_do_db=db2

備註:

(1)replicate_do_db=db2slaveSQL線程在重放中繼日誌中的事件時,僅讀取指定db2數據庫中相關的事件,並應用於本地

(2)可以使用的選項:replicate_do_dbreplicate_ignore_dbreplicate_do_tablereplicate_ignore_tablereplicate_wild_do_tablereplicate_wild_ignore_table

# systemctl restart mariadb.service

二、查看Replicate_Do_DB的值:

MariaDB [db1]> show slave status\G

image.png

備註:Replicate_Do_DB的值,默認爲空,現已改成db2


5、測試過濾複製:

一、master建立測試數據:

MariaDB [db1]> create database db2;

MariaDB [db1]> use db2;

MariaDB [db2]> create table tb2(name char(30) not null,age int not null);

MariaDB [db2]> desc tb2;

MariaDB [db2]> insert into tb2 values('keyso',35),('marion',40);

MariaDB [db2]> select * from tb2;

image.png

MariaDB [db2]> show master status;

image.png

二、slave查看測試數據:

MariaDB [db1]> show databases;

MariaDB [db1]> use db2;

MariaDB [db2]> show tables;

MariaDB [db2]> desc tb2;

MariaDB [db2]> select * from tb2;

image.png

MariaDB [db2]> show slave status\G

三、masterdb1.tb1中插入新數據:

MariaDB [db2]> use db1;

MariaDB [db1]> insert into tb1(age) values(66),(88);

MariaDB [db1]> select * from tb1;

image.png

MariaDB [db1]> show master status;

image.png

四、slave查看db1.tb1中的數據:

MariaDB [db2]> select * from db1.tb1;

image.png

備註:因爲slaveSQL線程在重放中繼日誌中的事件時,僅讀取指定db2數據庫中相關的事件,並應用於本地,並不會讀取db1數據庫中相關的事件,因此slave並不會更新db1數據庫中的數據

MariaDB [db2]> show slave status\G

相關文章
相關標籤/搜索