1、Mariabd數據複製原理和功能node
Mysql內建的複製功能是構建大型,高性能應用程序的基礎。將Mysql的數據分佈到多個系統上去,這種分佈的機制,是經過將Mysql的某一臺主機的數據複製到其它主機(slaves)上,並從新執行一遍來實現的。複製過程當中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。主服務器將更新寫入二進制日誌文件,並維護文件的一個索引以跟蹤日誌循環。這些日誌能夠記錄發送到從服務器的更新。當一個從服務器鏈接主服務器時,它通知主服務器從服務器在日誌中讀取的最後一次成功更新的位置。從服務器接收從那時起發生的任何更新,而後封鎖並等待主服務器通知新的更新。mysql
複製的功用:數據分佈;負載均衡讀;數據備份;高可用和故障切換;MySQL升級測試sql
2、Mariabd主從複製的實現數據庫
主節點(MASTER)配置vim
①、啓動二進制日誌、爲當前節點設置一個全局唯的ID號bash
[root@localhost ~]# vim /etc/my.cn log_bin = mysql-bin #啓動二進制日誌 server_id = 1 #設置服務器ID innodb_file_per_table = ON #設置每表使用單獨事務日誌 skip-name-resolve = ON #跳過域名解析 [root@localhost ~]# systemctl restart mariadb.service
②、建立有複製權限的用戶帳號服務器
MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'wlw'@'192.168.0.%' IDENTIFIED BY 'wlw'; MariaDB [(none)]> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 413 | | | +------------------+----------+--------------+------------------+ #這裏二進制日誌已經滾到到第三個文件了,前兩個文件爲數據庫初始化建立的mysql管理庫等信息,因此咱們等一下配置 #配置從的Position只須要從這一刻的413開始便可
從節點(SLAVE)配置網絡
①、啓動中繼日誌、爲當前節點設置一個全局唯的ID號session
[root@localhost ~]# vim /etc/my.cn relay_log = relay-log #啓動中繼日誌 relay_log_index = relay-log.index read-only = 1 #開啓只讀模式,此限制對擁有SUPER權限的用戶均無效 #若是須要鎖定全部用戶,能夠執行SQL語句(FLUSH TABLES WITH READ LOCK;) server_id = 8 innodb_file_per_table = ON skip-name-resolve = ON
②、配置前查看一下從服務器的狀態和是否啓動了複製線程負載均衡
MariaDB [(none)]> SHOW SLAVE STATUS; Empty set (0.01 sec) #這裏咱們查看從服務器的狀態,能夠看到尚未配置,爲空 MariaDB [(none)]> SHOW PROCESSLIST; +----+------+-----------+------+---------+------+-------+------------------+----------+ | Id | User | Host | db | Command | Time | State | Info | Progress | +----+------+-----------+------+---------+------+-------+------------------+----------+ | 2 | root | localhost | NULL | Query | 0 | NULL | SHOW PROCESSLIST | 0.000 | +----+------+-----------+------+---------+------+-------+------------------+----------+ #能夠看到從服務器尚未啓動複製線程
③、使用有複製權限的用戶帳號鏈接至主服務器,並啓動複製線程
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.0.151', MASTER_USER='wlw', MASTER_PASSWORD='wlw', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=413; MariaDB [(none)]> START SLAVE;
④、配置後查看一下從服務器的狀態和是否啓動了複製線程
MariaDB [(none)]> SHOW SLAVE STATUS\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.0.151 #主服務器IP Master_User: wlw #複製受權的用戶 Master_Port: 3306 #主服務器端口 Connect_Retry: 60 #重試時間 Master_Log_File: mysql-bin.000003 #讀取二進制的文件 Read_Master_Log_Pos: 413 #讀取二進制的開始位置 Relay_Log_File: relay-log.000002 #讀取的中繼日誌文件 Relay_Log_Pos: 529 #讀取的中繼日誌位置 Relay_Master_Log_File: mysql-bin.000003 Slave_IO_Running: Yes #I/O Thread啓動 Slave_SQL_Running: Yes #SQL Thread啓動 Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 413 Relay_Log_Space: 817 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 MariaDB [(none)]> SHOW PROCESSLIST; +----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+----------+ | Id | User | Host | db | Command | Time | State | Info | Progress | +----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+----------+ | 2 | root | localhost | NULL | Query | 0 | NULL | SHOW PROCESSLIST | 0.000 | | 3 | system user | | NULL | Connect | 404 | Waiting for master to send event | NULL | 0.000 | | 4 | system user | | NULL | Connect | 403 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL | 0.000 | +----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+----------+ #能夠看到啓動了兩個線程,一個時等待主服務器發送的時間,一個是讀取中繼日誌作同步 [root@c7node1 ~]# ll /var/lib/mysql/master.info -rw-rw----. 1 mysql mysql 75 Nov 8 09:00 /var/lib/mysql/master.info #這個文件保存了主服務器的連接信息,包括帳號密碼等,下次重啓服務會自動經過此文件鏈接主服務器 [root@c7node1 ~]# cat /var/lib/mysql/relay-log.info ./relay-log.000002 691 mysql-bin.000003 575 #此文件保存從服務器使用的中繼日誌、POS和主服務器使用的二進制日誌、POS,服務器啓動也會讀取此文件
⑤、測試實驗結果,在主服務器建立數據庫看從服務器是否自動複製
MariaDB [(none)]> CREATE DATABASE wlw; MariaDB [(none)]> CREATE DATABASE WLW; MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | WLW | | mysql | | performance_schema | | test | | wlw | +--------------------+ #能夠看到主服務器建立的數據庫從服務器已經自動複製完成
3、Mariabd雙主複製的實現(容易產生數據不一致,慎用)
主節點一:c7node1.wlw.com 192.168.88.11
主節點二:c7node2.wlw.com 192.168.88.22
①、各節點使用一個唯一server_id、啓動binary log和relay log
[root@c7node1 ~]# vim /etc/my.cnf log_bin = mysql-bin relay_log = relay-log server_id = 1 innodb_file_per_table = ON skip-name-resolve = ON auto_increment_offset = 1 auto_increment_increment = 2 #若是表中有字段爲自動增加,須要配置上面兩項,防止數據不一致 [root@c7node2 ~]# vim /etc/my.cnf log_bin = mysql-bin relay_log = relay-log server_id = 8 innodb_file_per_table = ON skip-name-resolve = ON auto_increment_offset = 2 auto_increment_increment = 2
②、各節點建立擁有複製權限的用戶帳號
c7node1節點數據庫: MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'wlw'@'192.168.88.22' IDENTIFIED BY 'wlw'; MariaDB [(none)]> FLUSH PRIVILEGES; c7node2節點數據庫: MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'wlw'@'192.168.88.11' IDENTIFIED BY 'wlw'; MariaDB [(none)]> FLUSH PRIVILEGES;
③、各節點均把對方指定爲主節點,並啓動複製線程
c7node1節點數據庫: MariaDB [(none)]> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 500 | | | +------------------+----------+--------------+------------------+ MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.88.22', MASTER_USER='wlw', MASTER_PASSWORD='wlw', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=500; MariaDB [(none)]> START SLAVE; c7node2節點數據庫: MariaDB [(none)]> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 500 | | | +------------------+----------+--------------+------------------+ MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.88.11', MASTER_USER='wlw', MASTER_PASSWORD='wlw', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=500; MariaDB [(none)]> START SLAVE;
③、測試實驗結果,在c7node1和c7node2節點上各建立自動增加字段的表進行測試
c7node1節點數據庫: MariaDB [(none)]> CREATE DATABASE wlw; MariaDB [wlw]> INSERT INTO tb1 (name) VALUES ('wlw4'),('wlw5'); c7node2節點數據庫: MariaDB [(none)]> USE wlw #能夠看到從節點一複製過來的wlw數據庫,咱們在此數據庫建立一個表作測試 MariaDB [wlw]> CREATE TABLE tb1 (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,name CHAR(30)); MariaDB [wlw]> INSERT INTO tb1 (name) VALUES ('wlw1'),('wlw2'),('wlw3'); MariaDB [wlw]> SELECT * FROM tb1; +----+------+ | id | name | +----+------+ | 2 | wlw1 | | 4 | wlw2 | | 6 | wlw3 | | 7 | wlw4 | | 9 | wlw5 | +----+------+
4、Mariabd半同步複製的實現(基於插件實現)
[root@localhost ~]# rpm -ql mariadb-server /usr/lib64/mysql/plugin/semisync_master.so /usr/lib64/mysql/plugin/semisync_slave.so #半同步複製使用的插件
主節點(MASTER)配置
①、啓動二進制日誌、爲當前節點設置一個全局唯的ID號
[root@localhost ~]# vim /etc/my.cnf log_bin = mysql-bin server_id = 1 innodb_file_per_table = ON skip-name-resolve = ON
②、建立擁有複製權限的用戶帳號
MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'wlw'@'192.168.88.22' IDENTIFIED BY 'wlw'; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 490 | | | +------------------+----------+--------------+------------------+
③、安裝插件
MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; MariaDB [(none)]> SHOW PLUGINS; #查看插件是否加載成功 MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%semi%'; +------------------------------------+-------+ | Variable_name | Value | +------------------------------------+-------+ | rpl_semi_sync_master_enabled | OFF | #是否啓動爲半同步複製的主節點 | rpl_semi_sync_master_timeout | 10000 | #等待從節點的超時時間,10s | rpl_semi_sync_master_trace_level | 32 | #跟蹤級別 | rpl_semi_sync_master_wait_no_slave | ON | #在沒有從節點的時候是否等待 +------------------------------------+-------+ MariaDB [(none)]> SHOW GLOBAL STATUS LIKE '%semi%'; +--------------------------------------------+-------+ | Variable_name | Value | +--------------------------------------------+-------+ | Rpl_semi_sync_master_clients | 0 | #有多少個半同步節點 | Rpl_semi_sync_master_net_avg_wait_time | 0 | | Rpl_semi_sync_master_net_wait_time | 0 | | Rpl_semi_sync_master_net_waits | 0 | | Rpl_semi_sync_master_no_times | 0 | | Rpl_semi_sync_master_no_tx | 0 | | Rpl_semi_sync_master_status | OFF | | Rpl_semi_sync_master_timefunc_failures | 0 | | Rpl_semi_sync_master_tx_avg_wait_time | 0 | | Rpl_semi_sync_master_tx_wait_time | 0 | | Rpl_semi_sync_master_tx_waits | 0 | | Rpl_semi_sync_master_wait_pos_backtraverse | 0 | | Rpl_semi_sync_master_wait_sessions | 0 | | Rpl_semi_sync_master_yes_tx | 0 | +--------------------------------------------+-------+ MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_enabled = ON; #啓動爲半同步複製的主節點
從節點(SLAVE)配置
①、啓動中繼日誌、爲當前節點設置一個全局唯的ID號
[root@localhost ~]# vim /etc/my.cnf relay_log = relay-log server_id = 8 innodb_file_per_table = ON skip-name-resolve = ON
②、安裝插件
MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; MariaDB [(none)]> SHOW PLUGINS; MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%semi%'; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | rpl_semi_sync_slave_enabled | OFF | #是否啓動爲半同步複製的從節點 | rpl_semi_sync_slave_trace_level | 32 | #跟蹤級別 +---------------------------------+-------+ MariaDB [(none)]> SET GLOBAL rpl_semi_sync_slave_enabled = ON; #啓動爲半同步複製的從節點
③、使用有複製權限的用戶帳號鏈接至主服務器,並啓動複製線程
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.88.11', MASTER_USER='wlw', MASTER_PASSWORD='wlw', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=490; MariaDB [(none)]> START SLAVE;
④、實驗測試結果,建立數據庫和數據表並查看狀態信息
MariaDB [(none)]> CREATE DATABASE wlw; MariaDB [(none)]> USE wlw MariaDB [wlw]> CREATE TABLE tb(id int); MariaDB [wlw]> SHOW GLOBAL STATUS LIKE '%semi%'; +--------------------------------------------+--------+ | Variable_name | Value | +--------------------------------------------+--------+ | Rpl_semi_sync_master_clients | 1 | | Rpl_semi_sync_master_net_avg_wait_time | 55693 | | Rpl_semi_sync_master_net_wait_time | 111387 | | Rpl_semi_sync_master_net_waits | 2 | | Rpl_semi_sync_master_no_times | 0 | | Rpl_semi_sync_master_no_tx | 0 | | Rpl_semi_sync_master_status | ON | | Rpl_semi_sync_master_timefunc_failures | 0 | | Rpl_semi_sync_master_tx_avg_wait_time | 85545 | | Rpl_semi_sync_master_tx_wait_time | 171091 | | Rpl_semi_sync_master_tx_waits | 2 | | Rpl_semi_sync_master_wait_pos_backtraverse | 0 | | Rpl_semi_sync_master_wait_sessions | 0 | | Rpl_semi_sync_master_yes_tx | 2 | +--------------------------------------------+--------+
5、Mariabd複製過濾器
①、讓從節點僅複製指定的數據庫,或指定數據庫的指定表;
(1) 主服務器僅向二進制日誌中記錄與特定數據庫(特定表)相關的事件(時間還原沒法實現,不建議使用)
[root@localhost ~]# vim /etc/my.cnf binlog_do_db= # 數據庫白名單列表 binlog_ignore_db= # 數據庫黑名單列表
(2) 從服務器SQL_THREAD在replay中繼日誌中的事件時,僅讀取與特定數據庫(特定表)相關的事件並應用於本地(會形成網絡及磁盤IO浪費)
[root@localhost ~]# vim /etc/my.cnf replicate_do_db= #數據庫白名單列表 replicate_ignore_db= #數據庫黑名單列表 replicate_do_table= #表白名單列表 replicate_ignore_table= #表黑名單列表 replicate_wild_do_table= #使用通配符定義表白名單列表 replicate_wild_ignore_table= #使用通配符定義表黑名單列表
若是須要永久有用須要保存到配置文件中,下面咱們測試在會話級別修改測試實驗
從節點(SLAVE)配置
MariaDB [(none)]> STOP SLAVE; #關閉複製線程 MariaDB [(none)]> SET GLOBAL replicate_do_db = wlw; #設置wlw數據庫爲數據庫白名單,只有此數據庫才能同步複製 MariaDB [(none)]> START SLAVE; #啓動複製線程 MariaDB [(none)]> SHOW SLAVE STATUS\G Replicate_Do_DB: wlw #這裏能夠看到白名單列表
主節點的建立其餘數據庫並在wlw數據庫中插入表或修改數據查看實驗結果
主服務器Mariadb MariaDB [wlw]> CREATE DATABASE slaves; Query OK, 1 row affected (0.09 sec) 從服務器Mariadb MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | | wlw | +--------------------+ #能夠看到新建立的slaves數據庫並無複製過來 主服務器Mariadb MariaDB [wlw]> INSERT INTO tb VALUES (99); Query OK, 1 row affected (0.03 sec) 從服務器Mariadb MariaDB [(none)]> SELECT * FROM wlw.tb; +------+ | id | +------+ | 0 | | 99 | +------+ #能夠看到,只有對數據庫白名單的操做才能複製,其餘數據庫的任何操做都不進行復制
6、Mariabd基於SSL複製的實現
①、在主服務器上爲CA生成私鑰
[root@localhost ~]# cd /etc/pki/CA/ [root@localhost CA]# touch index.txt [root@localhost CA]# echo 01 > serial [root@localhost CA]# (umask 077;openssl genrsa 2048 > private/cakey.pem)
②、生成自簽證書
[root@localhost CA]#[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300
③、主服務器生成證書
[root@localhost CA]# mkdir /var/lib/mysql/ssl [root@localhost CA]# cd /var/lib/mysql/ssl [root@localhost ssl]# (umask 077;openssl genrsa 1024 > master.key) [root@localhost ssl]# openssl req -new -key master.key -out master.csr [root@localhost ssl]# openssl ca -in master.csr -out master.crt -days 365 [root@localhost ssl]# cp /etc/pki/CA/cacert.pem /var/lib/mysql/ssl/ [root@localhost ssl]# chown -R mysql.mysql /var/lib/mysql/ssl//* [root@localhost ssl]# ll 總用量 16 -rw-r--r--. 1 mysql mysql 1407 11月 8 12:50 cacert.pem -rw-r--r--. 1 mysql mysql 3847 11月 8 12:49 master.crt -rw-r--r--. 1 mysql mysql 696 11月 8 12:48 master.csr -rw-------. 1 mysql mysql 887 11月 8 12:47 master.key
④、從服務器生成簽署證書
[root@c7node1 ~]# mkdir /var/lib/mysql/ssl [root@c7node1 ~]# cd /var/lib/mysql/ssl [root@c7node1 ssl]# (umask 077;openssl genrsa 1024 > slave.key) [root@c7node1 ssl]# openssl req -new -key slave.key -out slave.csr
⑤、把簽署證書發送到主服務器上,在主服務器上籤署證書後在發給從服務器
[root@c7node1 ssl]# scp ./slave.csr 192.168.88.11:/root [root@localhost ~]# openssl ca -in slave.csr -out slave.crt -days 360 [root@localhost ~]# scp ./slave.crt 192.168.88.22:/var/lib/mysql/ssl [root@localhost ~]# cd /etc/pki/CA [root@localhost CA]# scp ./cacert.pem 192.168.88.22:/var/lib/mysql/ssl [root@c7node1 ssl]# cd /var/lib/mysql/ssl [root@c7node1 ssl]# chown -R mysql:mysql /var/lib/mysql/ssl/.* [root@c7node1 ssl]# ll total 16 -rw-r--r--. 1 mysql mysql 1407 Nov 8 17:27 cacert.pem -rw-r--r--. 1 mysql mysql 3842 Nov 8 17:23 slave.crt -rw-r--r--. 1 mysql mysql 696 Nov 8 17:18 slave.csr -rw-------. 1 mysql mysql 891 Nov 8 17:17 slave.key
⑥、修改主從的數據庫配置文件
主節點配置 [root@localhost ~]# vim /etc/my.cnf log_bin = mysql-bin server_id = 1 innodb_file_per_table = ON skip-name-resolve = ON ssl ssl-ca = /var/lib/mysql/ssl/cacert.pem ssl-cert = /var/lib/mysql/ssl/master.crt ssl-key = /var/lib/mysql/ssl/master.key MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%ssl%'; +---------------+-------------------------------+ | Variable_name | Value | +---------------+-------------------------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | /var/lib/mysql/ssl/cacert.pem | | ssl_capath | | | ssl_cert | /var/lib/mysql/ssl/master.crt | | ssl_cipher | | | ssl_key | /var/lib/mysql/ssl/master.key | +---------------+-------------------------------+ #只要查詢到have_openssl和have_ssl爲YES,表明配置沒有錯,正常開啓了ssl功能 從節點配置 [root@c7node1 ssl]# vim /etc/my.cnf relay_log = relay-log server_id = 8 innodb_file_per_table = ON skip-name-resolve = ON ssl ssl-ca = /var/lib/mysql/ssl/cacert.pem ssl-cert = /var/lib/mysql/ssl/slave.crt ssl-key = /var/lib/mysql/ssl/slave.key MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%ssl%'; +---------------+-------------------------------+ | Variable_name | Value | +---------------+-------------------------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | /var/lib/mysql/ssl/cacert.pem | | ssl_capath | | | ssl_cert | /var/lib/mysql/ssl/slave.crt | | ssl_cipher | | | ssl_key | /var/lib/mysql/ssl/slave.key | +---------------+-------------------------------+
⑦、主上建立ssl連接的用戶
MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'wlw'@'192.168.88.22' IDENTIFIED BY 'wlw' REQUIRE SSL; #受權只能經過SSL鏈接的帳戶 MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 245 | | | +------------------+----------+--------------+------------------+
⑧、從服務器上經過ssl連接主服務器
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.88.11', MASTER_USER='wlw', MASTER_PASSWORD='wlw', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=245,master_ssl=1,master_ssl_ca='/var/lib/mysql/ssl/cacert.pem', master_ssl_cert='/var/lib/mysql/ssl/slave.crt', master_ssl_key='/var/lib/mysql/ssl/slave.key'; MariaDB [(none)]> START SLAVE; MariaDB [(none)]> SHOW SLAVE STATUS\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.88.11 Master_User: wlw Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000003 Read_Master_Log_Pos: 577 Relay_Log_File: relay-log.000002 Relay_Log_Pos: 861 Relay_Master_Log_File: mysql-bin.000003 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 577 Relay_Log_Space: 1149 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: Yes Master_SSL_CA_File: /var/lib/mysql/ssl/cacert.pem Master_SSL_CA_Path: Master_SSL_Cert: /var/lib/mysql/ssl/slave.crt Master_SSL_Cipher: Master_SSL_Key: /var/lib/mysql/ssl/slave.key Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1
⑧、驗證是否使用了ssl加密
[root@c7node1 mysql]# mysql --ssl-ca='/var/lib/mysql/ssl/cacert.pem' --ssl-cert='/var/lib/mysql/ssl/slave.crt' --ssl-key='/var/lib/mysql/ssl/slave.key' -uwlw -h192.168.88.11 -pwlw MariaDB [(none)]> \s -------------- mysql Ver 15.1 Distrib 5.5.41-MariaDB, for Linux (x86_64) using readline 5.1 Connection id: 12 Current database: Current user: wlw@192.168.88.22 SSL: Cipher in use is DHE-RSA-AES256-GCM-SHA384 #能夠看到是於SSL加密 Current pager: stdout Using outfile: '' Using delimiter: ; Server: MariaDB Server version: 5.5.41-MariaDB-log MariaDB Server Protocol version: 10 Connection: 192.168.88.11 via TCP/IP Server characterset: latin1 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8 TCP port: 3306 Uptime: 20 min 1 sec Threads: 3 Questions: 20 Slow queries: 0 Opens: 0 Flush tables: 2 Open tables: 26 Queries per second avg: 0.016 #因爲SSL相關的配置寫進了配置文件,則默認是加密鏈接的。也可使用--skip-ssl選項取消加密鏈接。
7、複製的監控和維護
①、清理日誌:
MariaDB [(none)]> PURGE BINARY LOGS TO 'mysql-bin.000002'; #只會清理mysql-bin.000002以前的,不會清理mysql-bin.000002 MariaDB [(none)]> PURGE BINARY LOGS BEFORE '2015-11-11 11:11:11'; #只會清理指定時間前的二進制日誌
②、複製監控
MariaDB [(none)]> SHOW MASTER STATUS; MariaDB [(none)]> SHOW BINLOG EVENTS; MariaDB [(none)]> SHOW BINARY LOGS MariaDB [(none)]> SHOW SLAVE STATUS; MariaDB [(none)]> SHOW PROCESSLIST;
③、從服務器是否落後於主服務:
MariaDB [(none)]> SHOW BINLOG LOGS; Seconds_Behind_Master: 0
④、如何肯定主從節點數據是否一致;
使用工具:percona-tools
⑤、數據不一致如何修復
以主節點爲準,中止從服務器,刪除數據,備份主服務器數據從新複製;