本章內容
MySQL複製介紹
實驗一:建立新的主從複製
實驗二:已有舊的主,建立新從
實驗三:三臺服務器實現級聯複製
複製架構中應該注意的問題
實驗四:提升從服務器爲主服務器
實驗五:實現主主複製
實驗六:實現半同步複製
複製過濾器
實驗七:實現SSL加密複製
複製的監控和維護
MySQL複製
擴展方式:
Scale Up:縱向擴展,如增加CPU、內存等,但性能的提升往往不是線性的,會越來越差
Scale Out:橫向擴展,把請求分散在多臺機器上,擴展的效果更好,也更常用
MySQL的擴展
讀寫分離
複製:每個節點都有相同的數據集
向外擴展
二進制日誌
單向
複製的功用:
數據分佈
負載均衡讀
備份
高可用和故障切換
MySQL升級測試(灰度發佈,要逐臺升級)
MySQL讀寫分離
讀寫分離應用:
mysql-proxy:Oracle
https://downloads.mysql.com/archives/proxy/
Atlas:Qihoo
https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md
dbproxy:美團
https://github.com/Meituan-Dianping/DBProxy
Amoeba:
https://sourceforge.net/projects/amoeba/
主從複製讀寫分離示意圖
主從複製線程
主節點:
dump Thread:爲每個Slave的I/O Thread啓動一個dump線程,用於通過tcp長連接向其發送binary log events
從節點:
I/O Thread:向Master請求二進制日誌事件,並保存於中繼日誌中
SQL Thread:從中繼日誌中讀取日誌事件,在本地完成重放
MySQL垂直分區
數據庫的拆分,有垂直分區和水平分片等方式。垂直分區一般是將沒有john關係的數據拆分開,放到不同的數據庫中
MySQL水平分片(Sharding)
水平分片則是水平拆分成若干片,例如按照用戶ID來拆分,然後分佈在不同的數據庫服務器中
對應shard中查詢相關數據
水平分片就涉及到一個調度的問題,負責調度的是分片管理器,負責將不同的請求調度到對應的庫中
分片管理器一般是自研的,配合應用程序才能來實現這樣的功能;當然達到這樣的規模的話,企業一定有大量的研發人員了
跟複製功能相關的文件
master.info:用於保存slave連接至master時的相關信息,例如賬號、密碼、服務器地址等
relay-log.info:保存在當前slave節點上已經複製的當前二進制日誌和本地replay log日誌的對應關係
MySQL複製
主從複製特點:
異步複製
主從數據不一致比較常見
複製架構:
Master/Slave
Master/Master(不建議用,容易產生數據不一致的問題)
環狀複製(不建議用)
一主多從(常用)
從服務器還可以再有從服務器(常用)
一從多主:適用於從服務器有多個不同的數據庫
複製需要考慮二進制日誌事件記錄格式
STATEMENT(5.0之前)
ROW(5.1之後,推薦)
MIXED(至少要用這個)
主從配置
主從配置過程:參看官網
https://mariadb.com/kb/en/library/setting-up-replication/
https://dev.mysql.com/doc/refman/5.5/en/replication-configuration.html
主節點配置:
(1) 啓用二進制日誌
[mysqld]
log_bin
(2) 爲當前節點設置一個全局惟一的ID號
[mysqld]
server_id=#
log-basename=master 可選項,設置datadir中日誌名稱,確保不依賴主機名
(3) 創建有複製權限的用戶賬號
GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'HOST' IDENTIFIED BY 'replpass';
從節點配置:
(1) 啓動中繼日誌
[mysqld]
server_id=# 爲當前節點設置一個全局惟的ID號
relay_log=relay-log relay log的文件路徑,默認值hostname-relay-bin
relay_log_index=relay-log.index 默認值hostname-relay-bin.index
(2) 使用有複製權限的用戶賬號連接至主服務器,並啓動複製線程
mysql> CHANGE MASTER TO
MASTER_HOST='host',
MASTER_USER='repluser',
MASTER_PASSWORD='replpass',
MASTER_LOG_FILE='mysql-bin.xxxxx',
MASTER_LOG_POS=#;
MASTER_CONNECT_RETRY=10;
mysql> START SLAVE [IO_THREAD|SQL_THREAD];
實驗一:建立新的主從複製
準備兩臺虛擬機分別作爲主從服務器,在本次實驗中,主服務器的IP爲192.168.30.3,提示符爲master,從服務器的IP爲192.168.30.4,提示符爲slave1
在主服務器:
1、修改配置文件
vim /etc/my.cnf
server_id=1 #主節點ID號設爲1
log_bin #啓用二進制日誌
binlog_format=row #二進制日誌事件記錄格式選ROW
log-basename=master #可選項,指定二進制文件前綴
innodb_file_per_table #單表存儲
systemctl restart mariadb #重啓mysql服務使配置生效
2、創建有複製權限的用戶賬號
mysql> grant replication slave on *.* to repluser@'192.168.30.%' identified by 'centos';
3、查看二進制日誌的起點
mysql> show master logs;
如上圖,記錄一下,之後就從master-bin.000003的位置400開始複製
4、導入一個數據庫hellodb
[root@master ~]#mysql < hellodb_innodb.sql
此時可以查看一下當前的二進制日誌信息,發現已發生變化
mysql> show master logs;
在從服務器:
5、修改配置文件
vim /etc/my.cnf
server_id=2
read_only
innodb_file_per_table
systemctl restart mariadb #重啓mysql服務使配置生效
6、使用有複製權限的用戶賬號連接至主服務器
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.30.3',
MASTER_USER='repluser',
MASTER_PASSWORD='centos',
MASTER_PORT=3306,
MASTER_LOG_FILE='master-bin.000003',
MASTER_LOG_POS=400,
MASTER_CONNECT_RETRY=10;
mysql> start slave; #啓動複製線程
7、查看從服務器的工作狀態
mysql> show slave status\G
看到從服務器已經開始正常工作
mysql> show databases;
看到hellodb數據庫已經複製過來了
8、繼續測試
切回主服務器,創建數據庫db1
mysql> create database db1;
切回從服務器,我們看到,從服務器同步成功
MySQL複製
如果主節點已經運行了一段時間,且有大量數據時,如何配置並啓動slave節點
通過備份恢復數據至從服務器
複製起始位置爲備份時,二進制日誌文件及其POS
如果要啓用級聯複製,需要在從服務器啓用以下配置
[mysqld]
log_bin
log_slave_updates
實驗二:已有舊的主,建立新從
主服務器數據庫仍沿用實驗一的主服務器,作爲已經運行了一段時間且有數據的服務器
數據庫初始信息如下:
從服務器爲新環境下的服務器
在主服務器:
1、修改配置文件
vim /etc/my.cnf
server_id=1
log_bin
binlog_format=row
log-basename=master #可選項
innodb_file_per_table
systemctl restart mariadb #重啓mysql服務使配置生效
2、創建有複製權限的用戶賬號
mysql> grant replication slave on *.* to repluser@'192.168.30.%' identified by 'centos';
3、使用mysqldump對主服務器數據庫進行全備份
mysqldump -A -F --single-transaction --master-data=1 > all.sql
scp all.sql 192.168.30.4:/root #將全備份文件拷貝到新的從服務器
在從服務器:
4、修改配置文件
vim /etc/my.cnf
server_id=2
read_only
innodb_file_per_table
systemctl restart mariadb #重啓mysql服務使配置生效
5、修改全備份文件添加主服務器信息
vim all.sql
找到此行
替換爲:
CHANGE MASTER TO
MASTER_HOST='192.168.30.3',
MASTER_USER='repluser',
MASTER_PASSWORD='centos',
MASTER_PORT=3306,
MASTER_LOG_FILE='master-bin.000004', #本來已有不要改
MASTER_LOG_POS=245, #本來已有不要改
MASTER_CONNECT_RETRY=10;
6、在從服務器上導入全備份
mysql < all.sql
此時我們看到全備份中數據庫已導入成功
7、啓動複製線程
mysql > start slave;
mysql> show slave status; #查看從服務器的工作狀態
看到從服務器已開始正常工作
8、繼續測試
切換到主服務器,繼續測試,創建數據庫db2
mysql> create database db2;
切換回從服務器,我們看到,從服務同步成功
實驗三:三臺服務器實現級聯複製
如果主服務器既承擔寫操作又承擔多臺從服務器的複製工作,負擔可能會比較大,這時候如果只用1臺服務器從主服務器複製,其他的服務器再從這臺服務器上覆制,可一定程度上減輕主服務器的負擔
但是,中間的服務器即使啓用了二進制日誌,也不會記錄從主服務器上覆制過來的那些二進制數據,需要額外加一個設置,才能啓動級聯傳輸
[mysqld]
log_slave_updates
準備三臺虛擬機分別作爲主服務器、中間服務器和從服務器,在本次實驗中,主服務器的IP爲192.168.30.3,提示符爲master,中間服務器的IP爲192.168.30.4,提示符爲slave1,從服務器的IP爲192.168.30.5,提示符爲slave2;
在主服務器:
1、修改配置文件
vim /etc/my.cnf
server_id=1
log_bin
binlog_format=row
innodb_file_per_table
systemctl restart mariadb #重啓mysql服務使配置生效
2、創建有複製權限的用戶賬號
mysql> grant replication slave on *.* to repluser@'192.168.30.%' identified by 'centos';
在中間服務器:
3、修改配置文件
vim /etc/my.cnf
server_id=2
log_bin
binlog_format=row
log_slave_updates
read_only
innodb_file_per_table
systemctl restart mariadb #重啓mysql服務使配置生效
4、使用有複製權限的用戶賬號連接至主服務器
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.30.3',
MASTER_USER='repluser',
MASTER_PASSWORD='centos',
MASTER_PORT=3306,
MASTER_LOG_FILE='mariadb-bin.000001',
MASTER_LOG_POS=245,
MASTER_CONNECT_RETRY=10;
mysql> start slave; #啓動複製線程
在從服務器:
5、修改配置文件
vim /etc/my.cnf
server_id=3
read_only
innodb_file_per_table
systemctl restart mariadb #重啓mysql服務使配置生效
6、使用有複製權限的用戶賬號連接至中間從服務器
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.30.4',
MASTER_USER='repluser',
MASTER_PASSWORD='centos',
MASTER_PORT=3306,
MASTER_LOG_FILE='mariadb-bin.000001',
MASTER_LOG_POS=245,
MASTER_CONNECT_RETRY=10;
mysql> start slave; #啓動複製線程
7、查看從服務器的工作狀態
mysql> show slave status\G
看到從服務器已經開始工作
8、測試
在主服務器,導入hellodb數據庫
#mysql < hellodb_innodb.sql
在中間服務器,我們看到,hellodb數據庫已同步成功
在從服務器, hellodb數據庫也已同步成功,至此我們實現了MySQL數據庫的級聯複製
複製架構中應該注意的問題
1、限制從服務器爲只讀
在從服務器上設置read_only=ON
注意:此限制對擁有SUPER權限的用戶均無效
阻止所有用戶, 包括主服務器複製的更新
mysql> FLUSH TABLES WITH READ LOCK; #這項一般不設
2、RESET SLAVE
在從服務器清除master.info ,relay-log.info, relay log ,開始新的relay log ,注意:需要先STOP SLAVE
RESET SLAVE ALL 清除所有從服務器上設置的主服務器同步信息如:PORT, HOST, USER和 PASSWORD 等
3、如何保證主從複製的事務安全
參看https://mariadb.com/kb/en/library/server-system-variables/
在master節點啓用參數:
sync_binlog=1 每次寫後立即同步二進制日誌到磁盤,性能差
如果用到的爲InnoDB存儲引擎:
innodb_flush_log_at_trx_commit=1 每次事務提交立即同步日誌寫磁盤
innodb_support_xa=ON 默認值,分佈式事務MariaDB10.3.0廢除
sync_master_info=# #次事件後master.info同步到磁盤
在slave節點啓用服務器選項:
skip_slave_start=ON 不自動啓動slave
在slave節點啓用參數:
sync_relay_log=# #次寫後同步relay log到磁盤
sync_relay_log_info=# #次事務後同步relay-log.info到磁盤
實驗四:提升從服務器爲主服務器
當主服務器宕機時,就需要提升一臺從服務器爲主服務器,然而各臺從服務器的數據同步進度可能是不一樣的,所以最好找出數據同步最完整的從服務器提升爲主服務器。
那麼怎麼看哪一臺從服務器的數據同步得是最完整的呢?方法是查看各臺從服務器的mysql文件夾下的master.info文件,文件中的第2和第3行,即表示已同步的主服務器二進制文件和位置,二進制文件和位置最大的那臺從服務器,即是同步得最完整的從服務器。
cat /var/lib/mysql/master.info
將此服務器配置修改爲主服務器配置
vim /etc/my.cnf
server_id=1
log_bin
binlog_format=row
清除其它從服務器上的所有原有master信息
mysql> reset slave all;
最後更改其它從服務器的上的master設置即可
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.30.X',
MASTER_USER='repluser',
MASTER_PASSWORD='centos',
MASTER_PORT=3306,
MASTER_LOG_FILE='mariadb-bin.00000X',
MASTER_LOG_POS=XXX,
MASTER_CONNECT_RETRY=10;
mysql> start slave;
主主複製
主主複製:互爲主從
容易產生的問題:數據不一致;因此慎用
考慮要點:自動增長id
配置一個節點使用奇數id
auto_increment_offset=1 開始點
auto_increment_increment=2 增長幅度
另一個節點使用偶數id
auto_increment_offset=2
auto_increment_increment=2
主主複製的配置步驟:
(1) 各節點使用一個惟一server_id
(2) 都啓動binary log和relay log
(3) 創建擁有複製權限的用戶賬號
(4) 定義自動增長id字段的數值範圍各爲奇偶
(5) 均把對方指定爲主節點,並啓動複製線程
實驗五:實現主主複製
準備兩臺虛擬機分別作爲主服務器1和主服務器2,在本次實驗中,主服務器1的IP爲192.168.30.3,提示符爲master1,主服務器2的IP爲192.168.30.4,提示符爲master2
在主服務器1:
1、修改配置文件
vim /etc/my.cnf
server_id=1
log_bin
binlog_format=row
auto_increment_offset=1 #開始點
auto_increment_increment=2 #增長幅度,當3臺爲環狀複製時,改爲3
innodb_file_per_table
systemctl restart mariadb #重啓mysql服務使配置生效
2、創建有複製權限的用戶賬號
mysql> grant replication slave on *.* to repluser@'192.168.30.%' identified by 'centos';
3、使用有複製權限的用戶賬號連接至主服務器2
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.30.4',
MASTER_USER='repluser',
MASTER_PASSWORD='centos',
MASTER_PORT=3306,
MASTER_LOG_FILE='mariadb-bin.000001',
MASTER_LOG_POS=245,
MASTER_CONNECT_RETRY=10;
mysql> start slave; #在主服務器2也配置好後,啓動複製線程
在主服務器2:
4、修改配置文件
vim /etc/my.cnf
server_id=2
log_bin
binlog_format=row
auto_increment_offset=2 #開始點
auto_increment_increment=2 #增長幅度
innodb_file_per_table
systemctl restart mariadb #重啓mysql服務使配置生效
5、創建有複製權限的用戶賬號
mysql> grant replication slave on *.* to repluser@'192.168.30.%' identified by 'centos';
6、使用有複製權限的用戶賬號連接至主服務器1
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.30.3',
MASTER_USER='repluser',
MASTER_PASSWORD='centos',
MASTER_PORT=3306,
MASTER_LOG_FILE='mariadb-bin.000001',
MASTER_LOG_POS=245,
MASTER_CONNECT_RETRY=10;
mysql> start slave; #啓動複製線程
7、測試
在主服務器1創建db1數據庫:
mysql> create database db1;
在主服務器2創建db2數據庫:
mysql> create database db2;
分別查看兩臺主服務器均同步成功
在主服務器1的數據庫中不指定ID添加數據時,默認以奇數遞增;
在主服務器2的數據庫中不指定ID添加數據時,默認以偶數遞增;
主主複製就是通過此種方法來避免數據可能出現的衝突。
半同步複製
默認情況下,MySQL的複製功能是異步的,異步複製可以提供最佳的性能,主庫把binlog日誌發送給從庫即結束,並不驗證從庫是否接收完畢。這意味着當主服務器或從服務器端發生故障時,有可能從服務器沒有接收到主服務器發送過來的binlog日誌,這就會造成主服務器和從服務器的數據不一致,甚至在恢復時造成數據的丟失
半同步複製的機制是隻有當主節點和從節點同步完成,僅有一臺從節點同步完成即可,返回寫入完成,這樣的機制保證了數據的安全性。如果主服務器宕機了,至少還有一臺從服務器的數據是一致的。在生產環境中,一般都要搭建半同步複製。如果是級聯複製的話,在主服務器和中間服務器上搭建半同步複製即可。
(圖)
主服務器需要安裝的mysql插件:semisync_master.so
從服務器需要安裝的mysql插件:semisync_slave.so
實驗六:實現半同步複製
在主服務器:
安裝semisync_master.so插件
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
啓用master半同步功能
mysql> SET GLOBAL rpl_semi_sync_master_enabled=1;
查看master半同步相關變量、相關狀態
mysql> SHOW GLOBAL VARIABLES LIKE '%semi%';
mysql> SHOW GLOBAL STATUS LIKE '%semi%';
在從服務器:
安裝semisync_slave.so插件
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
啓用slave半同步功能
mysql> SET GLOBAL rpl_semi_sync_slave_enabled=1;
查看slave半同步相關變量
mysql> SHOW GLOBAL VARIABLES LIKE '%semi%';
至此,主從服務器的半同步複製就搭建完成了。重啓mariadb服務的話,配置將失效,如果想永久啓用,可寫入配置文件中。
複製過濾器
讓從節點僅複製指定的數據庫,或指定數據庫的指定表
兩種實現方式:
(1) 服務器選項:主服務器僅向二進制日誌中記錄與特定數據庫相關的事件
注意:此項和binlog_format相關
參看:https://mariadb.com/kb/en/library/mysqld-options/#-binlog-ignore-db
無法作爲動態變量修改,只能作爲選項寫入配置文件中
binlog_do_db = 數據庫白名單列表,多個數據庫需多行實現
binlog_ignore_db = 數據庫黑名單列表
問題:基於二進制還原將無法實現;不建議使用
(2) 從服務器SQL_THREAD在replay中繼日誌中的事件時,僅讀取與特定數據庫(特定表)相關的事件並應用於本地
問題:會造成網絡及磁盤IO浪費
複製過濾器從服務器上的相關設置
replicate_do_db= 指定複製庫的白名單
replicate_ignore_db= 指定複製庫黑名單
replicate_do_table= 指定複製表的白名單
replicate_ignore_table= 指定複製表的黑名單
replicate_wild_do_table= foo%.bar% 支持通配符
replicate_wild_ignore_table=
show variables like 'replicate%';
MySQL複製加密
基於SSL複製:
在默認的主從複製過程或遠程連接到MySQL/MariaDB所有的鏈接通信中的數據都是明文的,外網裏訪問數據或則複製,存在安全隱患。通過SSL/TLS加密的方式進行復制的方法,來進一步提高數據的安全性
配置實現:
參看:https://mariadb.com/kb/en/library/replication-with-secure-connections/
主服務器開啓SSL:[mysqld] 加一行ssl
master配置證書和私鑰;並且創建一個要求必須使用SSL連接的複製賬號
slave端使用CHANGER MASTER TO 命令時指明ssl相關選項
Master配置
[mysqld]
log-bin
server_id=1
ssl
ssl-ca=/etc/my.cnf.d/ssl/cacert.pem
ssl-cert=/etc/my.cnf.d/ssl/master.crt
ssl-key=/etc/my.cnf.d/ssl/master.key
Slave配置
mysql>CHANGE MASTER TO
MASTER_HOST='MASTERIP',
MASTER_USER='rep',
MASTER_PASSWORD='centos',
MASTER_LOG_FILE='mariadb-bin.000001',
MASTER_LOG_POS=245,
MASTER_CONNECT_RETRY=10,
MASTER_SSL=1,
MASTER_SSL_CA = '/etc/my.cnf.d/ssl/cacert.pem',
MASTER_SSL_CERT = '/etc/my.cnf.d/ssl/slave.crt',
MASTER_SSL_KEY = '/etc/my.cnf.d/ssl/slave.key';
實驗七:實現SSL加密複製
準備3臺虛擬機分別作爲主服務器、從服務器和CA服務器,在本次實驗中,主服務器的IP爲192.168.30.3,提示符爲master,從服務器的IP爲192.168.30.4,提示符爲slave,CA服務器的IP爲192.168.30.5,提示符爲ca。
特別提示:在配置之前先檢查mysql服務是否支持ssl功能,如果have_ssl的值爲'DISABLED'則支持;如果爲'NO'則不支持,需要再重新編譯安裝或者安裝具有ssl功能的版本
在CA服務器:
1、生成CA的私鑰
mkdir /etc/my.cnf.d/ssl
cd /etc/my.cnf.d/ssl
openssl genrsa 2048 > cakey.pem
2、生成CA的自簽名
openssl req -new -x509 -key cakey.pem -out cacert.pem -days 3650
CN
beijing
beijing
wind.com
opt
ca.wind.com
此時ssl目錄下的文件有
ls /etc/my.cnf.d/ssl
3、在本機生成master和slave的私鑰:
同時生成主服務器master的私鑰和簽名請求
openssl req -newkey rsa:2048 –days 3650 -nodes -keyout master.key > master.csr
CN
beijing
beijing
wind.com
opt
master.wind.com
頒發master證書
openssl x509 -req -in master.csr -CA cacert.pem -CAkey cakey.pem -set_serial 01 > master.crt
此時ssl目錄下的文件有
ls /etc/my.cnf.d/ssl
繼續生成從服務器的私鑰和簽名請求
openssl req -newkey rsa:2048 -days 3650 -nodes -keyout slave.key > slave.csr
CN
beijing
beijing
wind.com
opt
slave.wind.com
頒發slave證書
openssl x509 -req -in slave.csr -CA cacert.pem -CAkey cakey.pem -set_serial 02 > slave.crt
此時ssl目錄下文件有
ls /etc/my.cnf.d/ssl
4、將ssl文件夾複製到主服務器和從服務器
scp -r /etc/my.cnf.d/ssl 192.168.30.3:/etc/my.cnf.d
scp -r /etc/my.cnf.d/ssl 192.168.30.4:/etc/my.cnf.d
主服務器保留下列文件 cacert.pem master.crt master.key
從服務器保留下列文件 cacert.pem slave.crt slave.key
在主服務器:
5、修改配置文件
vim /etc/my.cnf
server_id=1
log_bin
binlog_format=row
innodb_file_per_table
ssl
ssl-ca=/etc/my.cnf.d/ssl/cacert.pem
ssl-cert=/etc/my.cnf.d/ssl/master.crt
ssl-key=/etc/my.cnf.d/ssl/master.key
systemctl restart mariadb #重啓mysql服務使配置生效
mysql> show variables like '%ssl%'; #查看是否生效
6、創建有複製權限且要求必須以加密方式連接的用戶賬號
mysql> grant replication slave on *.* to repluser@'192.168.30.%' identified by 'centos' require ssl;
可以在slave端測試replusr用戶的ssl連接
[root@slave ssl]#mysql -urepluser -pcentos -h192.168.30.3 --ssl-ca=cacert.pem --ssl-cert=slave.crt --ssl-key=slave.key
在從服務器:
方法一:
7、修改配置文件
vim /etc/my.cnf
server_id=2
log_bin
binlog_format=row
innodb_file_per_table
systemctl restart mariadb #重啓mysql服務使配置生效
8、使用有複製權限的用戶賬號連接至主服務器
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.30.3',
MASTER_USER='repluser',
MASTER_PASSWORD='centos',
MASTER_LOG_FILE='mariadb-bin.000001',
MASTER_LOG_POS=245,
MASTER_CONNECT_RETRY=10,
MASTER_SSL=1,
MASTER_SSL_CA = '/etc/my.cnf.d/ssl/cacert.pem',
MASTER_SSL_CERT = '/etc/my.cnf.d/ssl/slave.crt',
MASTER_SSL_KEY = '/etc/my.cnf.d/ssl/slave.key';
mysql> start slave; #啓動複製線程
方法二:
7、寫入配置文件
stop slave;
reset slave all;
vim /etc/my.cnf
server_id=2
log_bin
binlog_format=row
innodb_file_per_table
ssl
ssl-ca=/etc/my.cnf.d/ssl/cacert.pem
ssl-cert=/etc/my.cnf.d/ssl/slave.crt
ssl-key=/etc/my.cnf.d/ssl/slave.key
systemctl restart mariadb #重啓mysql服務使配置生效
8、使用有複製權限的用戶賬號連接至主服務器
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.30.3',
MASTER_USER='repluser',
MASTER_PASSWORD='centos',
MASTER_LOG_FILE='mariadb-bin.000001',
MASTER_LOG_POS=245,
MASTER_CONNECT_RETRY=10,
MASTER_SSL=1;
mysql> start slave; #啓動複製線程
複製的監控和維護
(1) 清理日誌
PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr }
RESET MASTER
RESET SLAVE
(2) 複製監控
SHOW MASTER STATUS
SHOW BINLOG EVENTS
SHOW BINARY LOGS
SHOW SLAVE STATUS
SHOW PROCESSLIST
(3) 從服務器是否落後於主服務
Seconds_Behind_Master: 0
(4) 如何確定主從節點數據是否一致
percona-tools
(5) 數據不一致如何修復
刪除從數據庫,重新複製