您好,登錄后才能下訂單哦!
這篇文章主要講解了“Mysql主從復制搭建過程”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Mysql主從復制搭建過程”吧!
mysql主從復制的官方概念可自行百度,在這里談一下個人理解以及它和DataGuard的區別(理解有誤請指正)。
主庫通過mysql引擎將master庫中執行的所有sql語句轉儲到一個二進制log文件中(binlog),然后將這個binlog通過網絡傳輸到slave端,然后解析binlog中的語句成sql語句,再在備庫中執行,由此可見,mysql的主從復制功能是基于sql語句邏輯的傳輸方法,所以在配置mysql主從復制的過程中,參數一定要優化得當,否則就會出現由于參數限制的問題出現各種各樣的報錯。。。
-和DataGuard的比較
DataGuard(太懶,下面簡稱DG)中文名稱叫做數據衛士,是oracle提供的一種容災解決方案。DG一般稱主庫為primary(對應mysql中的master),備庫叫standby(對應mysql中的slave),它有三種模式,分別是物理standby、邏輯standby和快照standby,我們一般采用物理standby的配置方法,優點是配置簡單,不易出錯,對參數方面優化較少,是通過將歸檔日志通過網絡傳輸到備庫,再通過block-to-block(塊對塊的復制)的方式在備庫端進行應用(注意:這里區別于mysql的是,并不涉及sql語句,采用數據塊復制的方法呈現的),優點是維護簡單,不涉及sql語句的邏輯,適用于絕大多數生產環境。(mysql這方面和DG相比還是略遜一籌,好了廢話不多說,下面開始配置)
平臺:Hyper-V
OS:CentOS 6.5
DB: Mysql 5.6
-操作系統以及數據庫安裝完畢
-版本一致
-關閉iptables、selinux
-主庫
vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin //開啟binlog功能
server-id=1 //service-id 主從要區別開
-從庫
vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin //開啟binlog功能
server-id=2 //service-id 主從要區別開
mysql>GRANT REPLICATION SLAVE ON *.* to
'mysync'@'%' identified by 'mysync';
mysql>flush tables with read lock;
mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000039 | 308 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
注:執行完此步驟后不要再操作主服務器MYSQL,防止主服務器狀態值變化
mysql>change master to
master_host='xx.xx.xx.xx',master_user='mysync',master_password='mysync',master_log_file='mysql-bin.000089',master_log_pos=592700228;
Mysql>start slave; //啟動從服務器復制功能
mysql>unlock
tables;
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.9.40.70
Master_User: mysync
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000089
Read_Master_Log_Pos: 182083231
Relay_Log_File: mysqld-relay-bin.000100
Relay_Log_Pos: 182083394
Relay_Master_Log_File: mysql-bin.000089
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
……………………………………………………
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)
注:標紅的IO和SQL狀態均為yes,主從配置完成!
在實際環境過程中,可能會出現各種各樣的異常,在這里就不模擬異常了(實在無法模擬),主要討論處理方法。
一般主從出現異常之后通過show slave status\G可以看到是IO的問題還是SQL執行的問題,如果IO為NO,請檢查主從之間的網絡是否存在異常或者防火墻是否開啟。
如果是SQL選項為NO,那就要具體問題具體分析了,在Last_SQL_Error中會提示哪個sql語句卡主,注意。。。這里的坑比較多,如果是參數問題導致卡sql,那么優化指定參數文件之后重啟mysql服務應該就沒有問題了,如果從庫有寫入導致不一致的情況只能跳過錯誤了。曾經在某項目遇到過執行一個表的update一直被卡,無論怎么跳過也不行,參數也沒有問題,被坑了好久之后發現原來這個庫連著一個備用的應急環境,里面的job會每隔一段時間進行更新,由于環境不同導致初始值不同所以update必然失敗,但如果是block-to-block的復制方式就會屏蔽這個錯誤。解決方法:將這個庫的應用服務停掉就ok了。
-處理主從報錯的通用方法:
start slave;
set global
sql_slave_skip_counter=1;
start slave;
#!/bin/bash
array=($(mysql -u root -pxxxx -e "show slave status\G"|grep "Running" |awk '{print $2}'))
if [ "${array[0]}" == "Yes" ] || [ "${array[1]}" == "Yes" ]
then
echo "slave is OK" >/var/lib/mysql/backup/script/sync_log.tmp
else
echo "mysql主從復制出錯" >/var/lib/mysql/backup/script/sync_log.tmp
mailx -s "mysql_sync_check" tsl-baijin0829@tasly.com < /var/lib/mysql/backup/script/sync_log.tmp
fi
感謝各位的閱讀,以上就是“Mysql主從復制搭建過程”的內容了,經過本文的學習后,相信大家對Mysql主從復制搭建過程這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。