MySQL的主从复制云栖社区_MySQL-主从复制
前言
前篇說了作為運維在數(shù)據(jù)庫塊最起碼要會兩大技能,今天來說說第二技能--主從復(fù)制
隨著業(yè)務(wù)的增長,一臺數(shù)據(jù)庫服務(wù)器以滿足不了需求了,負(fù)載過重,這時候就需要減壓,實現(xiàn)負(fù)載均衡讀寫分離,一主一從或一主多從
主服務(wù)器只管寫,從服務(wù)器管讀,從而提高效率減輕壓力。
主從復(fù)制分類:
主從同步:當(dāng)用戶寫數(shù)據(jù)主服務(wù)器必須和從服務(wù)器同步一致了才告訴用戶寫入成功,等待時間太長
主從異步:只要用戶訪問寫數(shù)據(jù)主服務(wù)器寫入立馬返回給用戶成功
主從半步同步:當(dāng)用戶訪問寫數(shù)據(jù)主服務(wù)器寫入并同步其中一個從服務(wù)器就返回給用戶成功
備注:通常都是使用的主從異步,根據(jù)環(huán)境需求來選擇,想要數(shù)據(jù)更安全選擇半步同步
主從復(fù)制注意事項
注意:selinux策略、防火墻
1、開啟二進制日志
2、設(shè)置二進制記錄格式為ROW(推薦)
3、設(shè)置唯一server-id
4、設(shè)置datadir中日志名稱(可選)
5、創(chuàng)建有復(fù)制權(quán)限的用戶賬號
6、如果要啟用級聯(lián)復(fù)制,需要在從服務(wù)器啟用
7、限制從服務(wù)器為只讀
8、禁止主機名解析
9、高可用從服務(wù)器要加上
10、如何保證主從復(fù)制的事務(wù)安全(根據(jù)需求添加)
1)在master節(jié)點啟用參數(shù):
2)如果用到的為InnoDB存儲引擎:
3)在slave節(jié)點啟用參數(shù):
主從復(fù)制原理
如圖
備注:
主從同步有延遲,為什么?因為它時是單線程傳送日志
實戰(zhàn)-實現(xiàn)主從復(fù)制+高可用
準(zhǔn)備工作
準(zhǔn)備4臺主機67、17、37、57,分別充當(dāng)角色為管理主機、主服務(wù)器、2個從服務(wù)器
安裝包:和主服務(wù)器同版本的mysql數(shù)據(jù)庫包、和高可用安裝包
mha4mysql-manager
mha4mysql-node
比如主服務(wù)器已經(jīng)運行了1年了,發(fā)現(xiàn)滿足不了需求了,需要搭建從服務(wù)器,我們先從搭建從服務(wù)器開始
備注:首先確保主服務(wù)器開啟了二進制日志
確認(rèn)二進制文件已啟動
MariaDB [(none)]> show variables like '%log_bin%'
確認(rèn)server-id
MariaDB [(none)]> show variables like 'server%';
主服務(wù)器設(shè)置
1、創(chuàng)建可用于復(fù)制的賬號
2、完全備份數(shù)據(jù)(用于在從服務(wù)器上來還原)
備注:備份時的某表的狀態(tài)
為了下面的實驗測試在這里我們備份玩再增加一條記錄
insert hellodb.students (name,age)values('gaoda001',20);
3、傳送到從服務(wù)器37、57上
scp…
37、57(從)服務(wù)器設(shè)置
1、配置文件
1)開啟二進制日志
2)設(shè)置server-id(要和主服務(wù)id區(qū)分開)
備注:57設(shè)置為3 只要他們不相同就可
3)從服務(wù)器設(shè)置為只讀
4)禁止主機名解析
5)數(shù)據(jù)和索引分開存放
6)重啟或啟動服務(wù)
備注:以防萬一可以查看下最重要的兩項開啟了沒有
2、實現(xiàn)復(fù)制
1)進入數(shù)據(jù)庫查找同步代碼
2)根據(jù)情況編輯上圖上的信息
注:起始位置可以在完全備份文件里查看
兩種方式:
① 先還有完全備份數(shù)據(jù)再拿以上信息編輯下,在數(shù)據(jù)庫中執(zhí)行
② 直接把上面的信息添加到完全備份文件里
下面用第二種方式來操作如圖
3)37主機還原并查看
mysql < all-2018-08-08.sql
備注:以還原到備份時的狀態(tài)
主服務(wù)器備份完有用戶新加數(shù)據(jù)對吧,下面開啟主從復(fù)制看看能不能復(fù)制過來最新的數(shù)據(jù)
4)查看復(fù)制狀態(tài)
MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 192.168.43.17
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000005
Read_Master_Log_Pos: 385 #從主服務(wù)器讀取到的位置
Relay_Log_File: centos7_05-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql-bin.000005
Slave_IO_Running: No #表示還沒開啟
Slave_SQL_Running: No #表示還沒開啟
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: 385
Relay_Log_Space: 256
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: NULL ##注意這個 表示同步時間差
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: 0
Master_SSL_Crl:
Master_SSL_Crlpath:
Using_Gtid: No
Gtid_IO_Pos:
Replicate_Do_Domain_Ids:
Replicate_Ignore_Domain_Ids:
Parallel_Mode: conservative
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State:
1 row in set (0.03 sec)
5)開啟主從復(fù)制并查看狀態(tài)
start slave;
MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.43.17
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000005
Read_Master_Log_Pos: 608
Relay_Log_File: centos7_05-relay-bin.000003
Relay_Log_Pos: 778
Relay_Master_Log_File: mysql-bin.000005
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: 608
Relay_Log_Space: 1092
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
Master_SSL_Crl:
Master_SSL_Crlpath:
Using_Gtid: No
Gtid_IO_Pos:
Replicate_Do_Domain_Ids:
Replicate_Ignore_Domain_Ids:
Parallel_Mode: conservative
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
1 row in set (0.00 sec)
6)查看表確認(rèn)有沒有從主服務(wù)器同步最新的數(shù)據(jù)
7)57(從服務(wù)器同樣的設(shè)置)
備注:目前現(xiàn)實了異步同步復(fù)制,下面來看半同步設(shè)置
半同步設(shè)置
主服務(wù)器設(shè)置
1、首先在主服務(wù)器上安裝插件
備注:
show plugins; ##查看當(dāng)前系統(tǒng)中的插件列表
UNINSTALL PLUGIN rpl_semi_sync_master;##卸載插件
2、查看插件狀態(tài)
3、開啟
備注:最好寫在配置文件中
4、查看插件變量狀態(tài)
SHOW GLOBAL STATUS LIKE '%semi%';
備注:這里記錄有幾個半同步主機
從服務(wù)器設(shè)置
1、安裝插件
2、啟動插件
備注:同樣建議寫在配置文件中
3、從服務(wù)器查看改插件是否開始工作
SHOW GLOBAL STATUS LIKE '%semi%';
為什么沒有開始工作?
因為是先開啟的主從復(fù)制再安裝的次插件
所以這種情況下,先停止從服務(wù)器的主從復(fù)制功能
1)停止:
2)再次開啟主從復(fù)制
3)再去查看
備注:現(xiàn)在就啟用了半同步功能,下面開始搭建高可用,實現(xiàn)主服務(wù)器宕機自動提升從服務(wù)器當(dāng)主
MHA高性能
備注:四臺主機之間必須是ssh基于key驗證登陸,所以要先實現(xiàn)ssh互相鏈接
步驟:
ssh-keygen
cd .ssh
ssh-copy-id 192.168.43.67
把.ssh目錄考到其他主機
1、在主服務(wù)器上創(chuàng)建管理者賬號
2、在67管理主機上安裝以下包
3、在17、37、57安裝如下包
mha4mysql-node
4、在管理主機創(chuàng)建管理節(jié)點
根據(jù)上面創(chuàng)建的信息填寫
[
備注:
candidate_master=1:是說主服務(wù)器宕機了帶有這項的主機有機會當(dāng)主
5、測試
1)ssh協(xié)議
2、檢查復(fù)制
3、啟動(默認(rèn)前臺執(zhí)行)
備注:如果你是編譯安裝在/etc/mastermha/app1.cnf配置文件中指定日志路徑,最好主從服務(wù)器數(shù)據(jù)庫設(shè)置的位置都是一致的。
總結(jié)
以上是生活随笔為你收集整理的MySQL的主从复制云栖社区_MySQL-主从复制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: msvcp140.dll是什么?丢失了m
- 下一篇: mysql 日期滞后_如何滞后MySQL