不能輕視的mysql重啟過程
資料庫的重啟看似是一件非常簡單,沒有技術含量的活,這是我以前說的話。而這句話簡直是戳中了我的痛點。這種活真是太有技術含量了,高深到讓人需要注意太多的東西,需要做非常多的前期功課。
前段時間,發生了一起硬體問題,發現某一臺mysql備庫伺服器出現了硬體錯誤,因為是從庫伺服器的故障,所以就沒有很著急得去處理,簡單排查發現從庫硬體問題無法修復,就申請新機器去嘗試重搭從庫了。初步分析問題情況如下:
但是讓人意外的是準備線上搭建從庫的時候,發現主庫中沒有開啟binlog,所以我們看到的從庫其實是一個獨立的主庫,而個真正的主庫伺服器也已經裸奔了很長時間,其實沒有從庫,想想這種情況,就讓人後背發涼,需要趕緊修復這個問題。這個時候發現問題情況如下:
所以就簡單進行了評估,發現還有一臺mysql伺服器也沒有開啟binlog,而且也沒有從庫伺服器,於是這個問題的修復就是需要重新搭建兩個從庫。而binlog的開啟需要重啟mysql資料庫,所以任務就很自然變成了在特定的維護視窗去重啟這兩臺mysql主庫伺服器,然後在這個基礎上搭建從庫。
所以這個時候問題情況如下:
對於開啟mysql的binlog就跟oracle開啟歸檔模式差不多,你說這個過程有多複雜,其實就是在重啟的過程中重新初始化一番。
我們確定了詳細的時間範圍,操作步驟,和其他team互相協調配合等等,看起來工作已經做的很充分了。
dba這邊也沒有掉以輕心,除了開啟binlog,也向mysql的同事諮詢看還有什麼引數可以考慮最佳化的,所以這個工作看起來重啟也著實不算吃虧,還順便能夠調優一下。
計劃是下面的情況:
一切都安排就緒,在等待重啟的幾天時間裡,也做了異地的備份,以備不時之需。
對於這次重啟,感覺也沒有什麼需要特別注意的了,也甚至考慮了要不要設定crontab來重啟,要不要使用自動化指令碼來搭建備庫等。因為自己也還算mysql新手,還是摸清了門路再放開手腳。
計劃就在今天早晨,和系統那邊的約定是在早晨5點左右。大晚上也沒睡好,半夜醒來就怕睡過了頭,然後反反覆覆醒來,最後感覺老是醒來看手機,電話太吵影響家人,索性抱著被子到客廳裡去睡了,結果睡到了5點半,終於電話來了,開始幹活。
首先是使用show processlist檢查是否連線已經關閉,還得確認一番,最後準備停mysql庫了,發現pid檔案怎麼沒了。
# /etc/init.d/mysql stop
MySQL (Percona Server) PID file could not be found![FAILED]
# ll /home/mysql/mysql.pid
ls: /home/mysql/mysql.pid: No such file or directory
然後還得偽造一個pid檔案,在裡面手工填入mysqld的程式號。
然後再次嘗試就沒有問題了,也算小小虛驚一場。
然後停完服務,開始替換引數配置,重啟服務,一切都進行的很自然。還準備回頭先睡一會,再搭從庫。
同事突然反應說error.log裡面有很多的警告。
一部分是連線的問題,內容如下:
2015-12-22 07:57:41 26782 [Warning] Aborted connection 1417 to db: 'unconnected' user: 'unauthenticated' host: 'test_app_128.100' (Got an error reading communication pa
ckets)
2015-12-22 07:57:47 26782 [Warning] Aborted connection 1418 to db: 'unconnected' user: 'unauthenticated' host: 'test_app_4.176' (Got an error reading communication pack
ets)
這個部分初步懷疑是不是mysql的引數設定導致的,但是變更的只有log_bin,log_bin_index,cache_size其它的引數都沒有動。兩臺mysql主庫的引數修改都是一樣的,值得一提的是兩臺mysql庫,一臺是5.6,一臺是5.5,如果說是版本中的問題導致,那也有些牽強。而且另外一臺mysql主庫中也有警告,但是警告非常少。
對於這個問題也排查了很多因素,從應用端沒有反饋得到錯誤資訊,我們這邊也在測試,排除了使用者名稱密碼的錯誤,慢查詢的原因,初步懷疑是應用端沒有完全關閉連線導致。
另外一部分是mysql資料字典的問題。
2015-12-22 18:19:51 25011 [Warning] InnoDB: Cannot open table mysql/innodb_table_stats from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
最開始看到這個錯誤還是讓人感覺很奇怪,但是讓人無奈的這類錯誤在1年前就已經存在了,我只是重啟了mysql庫,其實應該順帶修復這個問題,但是沒有引起重視。這類修復還是需要重建這幾個資料字典表了,可能需要動ibdata,重啟又是需要配合應用來尋找合適的視窗了。
所以透過這個案例,可以看到重啟是多麼的有技術含量,重啟的過程中起到了承上啟下的作用,需要充分調研問題,檢視是否有遺留問題,一併加以解決,對於其它不明確的問題也需要不斷確認,最終逐步深入,應該會把重啟中的坑都填平,自己走平坦了,以後大家都方便,這也是規範的起始,讓它能夠落地。
前段時間,發生了一起硬體問題,發現某一臺mysql備庫伺服器出現了硬體錯誤,因為是從庫伺服器的故障,所以就沒有很著急得去處理,簡單排查發現從庫硬體問題無法修復,就申請新機器去嘗試重搭從庫了。初步分析問題情況如下:
但是讓人意外的是準備線上搭建從庫的時候,發現主庫中沒有開啟binlog,所以我們看到的從庫其實是一個獨立的主庫,而個真正的主庫伺服器也已經裸奔了很長時間,其實沒有從庫,想想這種情況,就讓人後背發涼,需要趕緊修復這個問題。這個時候發現問題情況如下:
所以就簡單進行了評估,發現還有一臺mysql伺服器也沒有開啟binlog,而且也沒有從庫伺服器,於是這個問題的修復就是需要重新搭建兩個從庫。而binlog的開啟需要重啟mysql資料庫,所以任務就很自然變成了在特定的維護視窗去重啟這兩臺mysql主庫伺服器,然後在這個基礎上搭建從庫。
所以這個時候問題情況如下:
對於開啟mysql的binlog就跟oracle開啟歸檔模式差不多,你說這個過程有多複雜,其實就是在重啟的過程中重新初始化一番。
我們確定了詳細的時間範圍,操作步驟,和其他team互相協調配合等等,看起來工作已經做的很充分了。
dba這邊也沒有掉以輕心,除了開啟binlog,也向mysql的同事諮詢看還有什麼引數可以考慮最佳化的,所以這個工作看起來重啟也著實不算吃虧,還順便能夠調優一下。
計劃是下面的情況:
一切都安排就緒,在等待重啟的幾天時間裡,也做了異地的備份,以備不時之需。
對於這次重啟,感覺也沒有什麼需要特別注意的了,也甚至考慮了要不要設定crontab來重啟,要不要使用自動化指令碼來搭建備庫等。因為自己也還算mysql新手,還是摸清了門路再放開手腳。
計劃就在今天早晨,和系統那邊的約定是在早晨5點左右。大晚上也沒睡好,半夜醒來就怕睡過了頭,然後反反覆覆醒來,最後感覺老是醒來看手機,電話太吵影響家人,索性抱著被子到客廳裡去睡了,結果睡到了5點半,終於電話來了,開始幹活。
首先是使用show processlist檢查是否連線已經關閉,還得確認一番,最後準備停mysql庫了,發現pid檔案怎麼沒了。
# /etc/init.d/mysql stop
MySQL (Percona Server) PID file could not be found![FAILED]
# ll /home/mysql/mysql.pid
ls: /home/mysql/mysql.pid: No such file or directory
然後還得偽造一個pid檔案,在裡面手工填入mysqld的程式號。
然後再次嘗試就沒有問題了,也算小小虛驚一場。
然後停完服務,開始替換引數配置,重啟服務,一切都進行的很自然。還準備回頭先睡一會,再搭從庫。
同事突然反應說error.log裡面有很多的警告。
一部分是連線的問題,內容如下:
2015-12-22 07:57:41 26782 [Warning] Aborted connection 1417 to db: 'unconnected' user: 'unauthenticated' host: 'test_app_128.100' (Got an error reading communication pa
ckets)
2015-12-22 07:57:47 26782 [Warning] Aborted connection 1418 to db: 'unconnected' user: 'unauthenticated' host: 'test_app_4.176' (Got an error reading communication pack
ets)
這個部分初步懷疑是不是mysql的引數設定導致的,但是變更的只有log_bin,log_bin_index,cache_size其它的引數都沒有動。兩臺mysql主庫的引數修改都是一樣的,值得一提的是兩臺mysql庫,一臺是5.6,一臺是5.5,如果說是版本中的問題導致,那也有些牽強。而且另外一臺mysql主庫中也有警告,但是警告非常少。
對於這個問題也排查了很多因素,從應用端沒有反饋得到錯誤資訊,我們這邊也在測試,排除了使用者名稱密碼的錯誤,慢查詢的原因,初步懷疑是應用端沒有完全關閉連線導致。
另外一部分是mysql資料字典的問題。
2015-12-22 18:19:51 25011 [Warning] InnoDB: Cannot open table mysql/innodb_table_stats from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
最開始看到這個錯誤還是讓人感覺很奇怪,但是讓人無奈的這類錯誤在1年前就已經存在了,我只是重啟了mysql庫,其實應該順帶修復這個問題,但是沒有引起重視。這類修復還是需要重建這幾個資料字典表了,可能需要動ibdata,重啟又是需要配合應用來尋找合適的視窗了。
所以透過這個案例,可以看到重啟是多麼的有技術含量,重啟的過程中起到了承上啟下的作用,需要充分調研問題,檢視是否有遺留問題,一併加以解決,對於其它不明確的問題也需要不斷確認,最終逐步深入,應該會把重啟中的坑都填平,自己走平坦了,以後大家都方便,這也是規範的起始,讓它能夠落地。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1877318/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL資料庫啟動過程的簡述MySql資料庫
- MySQL--儲存過程與檢視MySql儲存過程
- 【PHP-FPM】重啟過程原始碼詳解PHP原始碼
- Oracle 11G DataGuard重啟詳細過程Oracle
- MySQL的session過程MySqlSession
- mysql檢視儲存過程show procedure status;MySql儲存過程
- 解決jdbc不能重連mysql的問題JDBCMySql
- Angular的啟動過程Angular
- main的啟動過程AI
- Nginx的啟動過程Nginx
- Oracle的啟動過程Oracle
- mysql的儲存過程MySql儲存過程
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- oracle 10g CRS不能啟動解決過程(hp-ux)Oracle 10gUX
- linus mysql 重啟MySql
- windows重啟mysql命令WindowsMySql
- windows下重啟mysqlWindowsMySql
- linux重啟mysqlLinuxMySql
- MySql儲存過程—2、第一個MySql儲存過程的建立MySql儲存過程
- 坑:重構過程中的過度設計
- mysql不能啟動如何解決MySql
- Ubuntu下啟動、停止、重啟MySQL,檢視錯誤日誌命令大全UbuntuMySql
- app的啟動過程(三)APP
- Mysql 儲存過程的使用MySql儲存過程
- mysql儲存過程的修改MySql儲存過程
- MySQL儲存過程詳解 mysql 儲存過程linkMySql儲存過程
- Windows 啟動過程Windows
- centos重啟不能自動聯網的解決方法CentOS
- 修改域名之後的資料庫服務不能啟動的問題解決過程資料庫
- 淺談mysql資料庫技術,輕鬆玩轉儲存過程MySql資料庫儲存過程
- 【圖片+程式碼】:GCC 連結過程中的【重定位】過程分析GC
- MySQL Order BY 排序過程MySql排序
- MySQL恢復過程MySql
- mysql關閉過程MySql
- mysql 儲存過程MySql儲存過程
- mysql 重啟方法(初學者)MySql
- App 啟動過程(含 Activity 啟動過程) | 安卓 offer 收割基APP安卓
- Windows啟動過程(MBR引導過程分析)Windows