版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 mysql數(shù)據(jù)庫復制維護方法 編寫人:胡家惠 日 期:2007-9-26數(shù)商的數(shù)據(jù)庫服務器采用一主兩從的結(jié)構(gòu),即一臺主數(shù)據(jù)庫服務器,兩臺從數(shù)據(jù)庫服務器,主服務器負責讀寫,從服務器只能讀取。以下例子中假設(shè)主服務器的IP地址是:172.20.16.204。從服務器的IP地址分別是:172.20.16.205,172.20.16.214。主服務器上更新的數(shù)據(jù)將通過mysql的復制功能復制到其它兩臺從服務器上,復制是異步進行的,延遲時間正常在3秒左右,如果是小數(shù)據(jù)量的更新操作,延遲時間將會更小,估計在1秒以下,完全能滿足應用的需求。Web服務器對數(shù)據(jù)庫的訪問負載將同時分布到這三臺服務器上,從測試的情
2、況看,主服務器的負載明顯比從服務器的負載大,一個主要的原因是主服務器負責讀寫,而從服務器只分配一些查詢的負載。Mysql數(shù)據(jù)庫復制維護主要包括:日常監(jiān)控和維護,主從切換,從服務器拷貝,根據(jù)一個最可靠的從服務器數(shù)據(jù)生成另外一個從服務器,并把這個最可靠的從服務器升級為主服務器。目標就是當數(shù)據(jù)庫出現(xiàn)故障時,能盡快的修復,最小化故障時間。一、 日常監(jiān)控和維護日常監(jiān)控和維護的目的就是監(jiān)控mysql復制進程的運行情況,解決發(fā)生的故障問題,保證主從服務器數(shù)據(jù)的一致性。以下是用作日常監(jiān)控的幾條命令,說明如下: Show master status; 顯示主服務器當前復制進程所處的bin文件名和位置 Show
3、slave statusG; 顯示從服務器復制進程的狀態(tài) Slave stop; 在從服務器上停止復制進程 Slave start; 在從服務器上啟動復制進程Set global sql_slave_skip_counter=1; 跳過一個錯誤的位置Change master to master_log_file='mysql-bin.000001',master_log_pos=98; 改變到指定的日志位置點:日志文件mysql-bin.000001,位置98示例:mysql> show slave statusG* 1. row * Slave_IO_State: W
4、aiting for master to send event Master_Host: 172.20.16.204 Master_User: repuser Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 98 Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 235 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Ru
5、nning: Yes Replicate_Do_DB: Replicate_Ignore_DB: mysql,information_schema,mysql,information_schema 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: 98 Relay_Log_Space: 235 Until_Condition:
6、 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以下是一個復制的自動監(jiān)控腳本,可以在從服務器上部署為作業(yè)計劃,可以進行一般故障的自動修復:/home/mysql/script/ Repmonitor.sh# 本腳本用于監(jiān)控MySQL 復制是否運行,并且根據(jù)具體的錯誤代碼自動判斷是否忽略#!/
7、bin/shnow=date +"%Y%m%d%H%M%S"StatFile="./slave_status.$now"echo "show slave statusG" | mysql -uroot -proot1234 > $StatFileIoStat=cat $StatFile | grep Slave_IO_Running | awk 'print $2'SqlStat=cat $StatFile | grep Slave_SQL_Running | awk ' print $2'Err
8、no=cat $StatFile | grep Last_Errno | awk 'print $2'Behind=cat $StatFile | grep Seconds_Behind_Master | awk 'print $2'#IoStat=cat $StatFile | head -n 12 | tail -n 1 | awk 'print $2'#SqlStat=cat $StatFile | head -n 13 | tail -n 1 | awk 'print $2'#Errno=cat $StatFile | h
9、ead -n 20 | tail -n 1 | awk 'print $2'if $IoStat = 'Yes' | $SqlStat = 'Yes' ; then echo "That's all right!" rm -f $StatFile exitfiif $IoStat = 'No' | $SqlStat = 'No' ; thenecho "chkslave"date#如果錯誤代碼為 0,則可能是因為網(wǎng)絡(luò)等原因?qū)е聫椭浦袛?,直接重新啟動復制即?if &q
10、uot;$Errno" -eq 0 ; then echo "start slave io_thread; start slave sql_thread;" | mysql -uroot -proot1234 echo "start slave io_thread; start slave sql_thread;"#如果是一些不是很要緊的錯誤代碼,也可以直接略過 elif "$Errno" -eq 1007 | "$Errno" -eq 1053 | "$Errno" -eq 1062
11、 | "$Errno" -eq 1213 | "$Errno" -eq 1158 | "$Errno" -eq 1159 | "$Errno" -eq 1008 ; then echo "stop slave; set global sql_slave_skip_counter=1; slave start;" | mysql -uroot -proot1234 echo "stop slave; set global sql_slave_skip_counter=1; slave s
12、tart;" else echo date "slave is down!" fi# 遠遠落后于 master #if "$Behind" -gt 200 ; then # echo date "slave is behind master $Behind seconds!" #fi#刪除臨時狀態(tài)文件rm -f $StatFileecho "/chkslave"fi在linux上部署作業(yè)計劃:Chmod +x Repmonitor.sh設(shè)定沒小時檢查一次Crontab -e00 * * * * /home
13、/mysql/script/ Repmonitor.sh說明:使用腳本前,請修改相應的本地root的密碼,這里假設(shè)是root1234。主要可以看兩個狀態(tài)項Slave_IO_Running,Slave_SQL_Running,如果兩個項目的狀態(tài)都是Yes,說明復制在正常運行。如果有一個狀態(tài)變成No,說明復制已經(jīng)出現(xiàn)故障,可以先用命令slave stop停止復制進程,再用命令slave start嘗試恢復,如果是一般的故障,這樣就能解決。如果發(fā)生了嚴重錯誤,會在Last_Error這個狀態(tài)項中顯示出來,很可能是這個位置點的sql執(zhí)行錯誤,在不影響數(shù)據(jù)庫數(shù)據(jù)一致性的前提下,可以用命令set glob
14、al sql_slave_skip_counter=1跳過。具體解決辦法需要根據(jù)錯誤的具體情況來定,前提是不影響主從數(shù)據(jù)庫數(shù)據(jù)的一致性。 二、 主從切換主從切換是指當集群中主服務器發(fā)生故障,無法再繼續(xù)服務時,需要把另兩臺從服務器中的一臺從從服務器升級成主服務器,使它同時具有讀寫的功能,另一臺從服務器改變?yōu)檫@臺新升級的主服務器的從服務器。具體操作步驟如下:1, 如果原故障主服務器的mysql服務進程還沒停止的話,停止它。例如: service mysql stop2, 察看兩臺從服務器所處的復制狀態(tài),在兩臺服務器上執(zhí)行命令:show slave statusG,比較以下狀態(tài)項的當前值 Maste
15、r_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos如果兩臺從服務器的的以上狀態(tài)項的值完全一致,說明兩臺從服務器的數(shù)據(jù)是完全一致的。 這樣可以選擇其中的任一臺服務器作為主服務器,另一臺服務器作為這臺主服務器的從服務器,設(shè)置步驟如下:2.1 修改作為主服務器的服務器的配置文件f,修改后重啟mysql,使新的配置文件生效 原配置文件關(guān)于復制的設(shè)置可能是:server-id = 16205 master-host=172.20.16.204master-user=repusermaster-password=654321 relay-
16、log=relay-binrelay-log-index=relay-binreplicate-ignore-db=mysqlreplicate-ignore-db=information_schema請修改為:server-id = 16205 log-bin=mysql-binbinlog-ignore-db=mysqlbinlog-ignore-db=information_schema主要目的就是把日志記錄打開2.2 在新主服務器上創(chuàng)建復制帳號和口令進入mysql,執(zhí)行以下命令:GRANT REPLICATION SLAVE ON *.* TO 'repuser'
17、9;%' IDENTIFIED BY 111111;這里創(chuàng)建的帳號是:repuesr,密碼是:111111,只是作為例子,請根據(jù)自己的情況作出修改2.3 修改另一臺從服務器的配置文件,讓它指向新的主服務器,修改后從新啟動mysql,使配置文件生效原配置文件關(guān)于復制的設(shè)置可能是: server-id = 16214 master-host=172.20.16.204 master-user=repusermaster-password=111111relay-log=relay-binrelay-log-index=relay-binreplicate-ignore-db=mysqlre
18、plicate-ignore-db=information_schema 修改所指向的主服務器的ip地址和復制用帳號和口令,具體的值根據(jù)自己服務器的設(shè)置情況而定。比如: server-id = 16214 master-host=172.20.16.205 master-user=repusermaster-password=111111relay-log=relay-binrelay-log-index=relay-binreplicate-ignore-db=mysqlreplicate-ignore-db=information_schema3, 檢查復制是否正常在新設(shè)置的從服務器上運行
19、命令:show slave statusG,如果以下兩狀態(tài)項為Yes,說明新的復制功能已經(jīng)配置完成,復制在正常運行。Slave_IO_Running: Yes Slave_SQL_Running: Yes三、 拷貝從服務器如果想增加一個新的從服務器,最簡單的辦法是把已有的從服務器數(shù)據(jù)拷貝到新的服務器上,生成新的從服務器。這里要求兩臺服務器的mysql安裝目錄完全相同。步驟如下:1, 在已有的從服務器上停止復制進程。Slave stop;2, 打包壓縮已有從服務器/var/lib/mysql下的所有文件。Cd /var/lib/mysql tar zcvf mysqldata.tar.gz *3
20、, 把打包好的文件傳到新的服務器上Scp root服務器IP:/var/lib/mysql/mysqldata.tar.gz /var/lib/mysql4, 把配置文件f復制到新的服務器5, 把壓縮的數(shù)據(jù)文件解壓Cd /var/lib/mysqlTar xzvf mysqldata.tar.gz6, 啟動新的mysql從服務器 四、 從一臺從服務器進行完全恢復的步驟如果由一主三從組成的mysql數(shù)據(jù)庫集群中的主服務器發(fā)生嚴重故障,數(shù)據(jù)完全無法恢復,而且用命令檢查發(fā)現(xiàn)另兩臺從服務器所處的復制斷點有區(qū)別,說明兩臺從服務器的數(shù)據(jù)已經(jīng)不一致(當然這種可能性很小)。這樣,只能從最新的一臺從服務器上進行
21、復制的從新設(shè)置。步驟如下: 1, 檢查兩臺從服務器的復制斷點執(zhí)行命令Show slave statusG Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos發(fā)現(xiàn)兩臺服務器的以上狀態(tài)項值不一樣,說名兩臺服務器數(shù)據(jù)已經(jīng)不完全一致了2, 選擇狀態(tài)項Read_Master_Log_Pos值最大的服務器,關(guān)閉此臺服務器上的mysql服務,打包壓縮mysql的數(shù)據(jù)文件(以上已有提及)。這里假設(shè)數(shù)據(jù)庫已按標準文檔安裝在/var/lib/mysql目錄下了。Cd /var/lib/mysql tar zcvf mysqldata.t
22、ar.gz *3, 把打包好的文件傳到另一臺服務器上Scp root服務器IP:/var/lib/mysql/mysqldata.tar.gz /var/lib/mysql4, 關(guān)閉另一臺服務器上的mysql服務,刪除/var/lib/mysql下的所有子目錄和文件,解壓傳過來的壓縮文件mysqldata.tar.gzCd /var/lib/mysqlTar xzvf mysqldata.tar.gz5, 設(shè)置兩臺服務器的啟動配置文件,進行相應復制部分配置比如:主服務器/etc/fserver-id= 16205 log-bin=mysql-bin binlog-ignore-db=mysql
23、 binlog-ignore-db=information_schema 從服務器/etc/f server-id = 16214 master-host=172.20.16.205master-user=repusermaster-password=111111relay-log=relay-binrelay-log-index=relay-binreplicate-ignore-db=mysqlreplicate-ignore-db=information_schema注意:server-id,IP地址,用戶帳號和密碼請根據(jù)自己的配置情況作出相應的修改。6, 用以下命令在新主服務器上創(chuàng)建復
24、制帳號GRANT REPLICATION SLAVE ON *.* TO 'repuser''%' IDENTIFIED BY 111111;7, 從新啟動兩臺服務器,新的復制環(huán)境得到恢復可以先啟動新設(shè)置的主服務器,再啟動新設(shè)置的從服務器 附腳本:/home/mysql/script/ Repmonitor.sh#!/bin/shnow=date +"%Y%m%d%H%M%S"StatFile="./slave_status.$now"echo "show slave statusG" | mysql
25、-uroot -proot1234 > $StatFileIoStat=cat $StatFile | grep Slave_IO_Running | awk 'print $2'SqlStat=cat $StatFile | grep Slave_SQL_Running | awk ' print $2'Errno=cat $StatFile | grep Last_Errno | awk 'print $2'Behind=cat $StatFile | grep Seconds_Behind_Master | awk 'prin
26、t $2'#IoStat=cat $StatFile | head -n 12 | tail -n 1 | awk 'print $2'#SqlStat=cat $StatFile | head -n 13 | tail -n 1 | awk 'print $2'#Errno=cat $StatFile | head -n 20 | tail -n 1 | awk 'print $2'if $IoStat = 'Yes' | $SqlStat = 'Yes' ; then echo "That's all right!" rm -f $StatFile exitf
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年舞蹈表演藝術(shù)人才培養(yǎng)機構(gòu)合同模板2篇
- 2024年餐館廚師勞動合同3篇
- 2025年度網(wǎng)絡(luò)安全監(jiān)測合同范本共十七項安全防護措施3篇
- 2024年限期土地開發(fā)承包協(xié)議
- 1《義務教育數(shù)學課程標準(2022年版)》自測卷
- 2024年采購合作合同范本一
- 2024年節(jié)能打印機銷售及售后服務合同3篇
- 2025年度住宅防盜門個性化定制合同3篇
- 2024年珠海房產(chǎn)買賣合同3篇
- 2025年度船舶建造項目股權(quán)轉(zhuǎn)讓與工程監(jiān)理合同3篇
- 帕金森患者生活質(zhì)量問卷(PDQ-39)
- 挖掘機、裝載機崗位風險告知卡
- JGJT280-2012 中小學校體育設(shè)施技術(shù)規(guī)程
- 基于MATLAB光伏儲能并網(wǎng)的直流微電網(wǎng)系統(tǒng)的研究與設(shè)計
- 藥店突發(fā)事件與應急處理
- JJG 976-2024透射式煙度計
- (完整word)工程造價咨詢公司管理制度
- 鄉(xiāng)村廣場景觀分析報告
- 急性白血病小講課護理課件
- 萬科物業(yè)-常見突發(fā)事件處理
- 安徽省合肥市瑤海區(qū)2023-2024學年六年級上學期期末語文試卷
評論
0/150
提交評論