這篇文章主要介紹如何修復MySQL數(shù)據(jù)庫,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
為邛崍等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及邛崍網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為網(wǎng)站設計制作、成都網(wǎng)站建設、邛崍網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
我整理了7條修復MySQL的方法,當簡單的重啟對數(shù)據(jù)庫不起作用,或者有表崩潰時。
簡單的MySQL重啟:
/usr/local//bin/mysqladmin -uUSERNAME -pPASSWORD shutdown
/usr/local/mysql/bin/mysqld_safe &
1、MyISAM表崩潰
MySQL數(shù)據(jù)庫允許不同的表使用不同的存儲引擎。它用來存儲與檢索數(shù)據(jù)。較流行的存儲引擎是MyISAM與InnoDB。
MyISAM表最終“將”崩潰。這是個不爭的事實。
幸運的是,在多數(shù)情況下,MyISAM表崩潰很容易修復。
修復單一表,連接你的數(shù)據(jù)庫執(zhí)行:
repair TABLENAME
修復所有的表,執(zhí)行:
/usr/local/mysql/bin/mysqlcheck --all-databases -uUSERNAME -pPASSWORD -r
多數(shù)情況,只有當你瀏覽日志文件時,才知道MyISAM表崩潰了。
我強烈建議在你的/etc/my.cnf配置文件中添加此行。一旦表崩潰它將進行自動修復。
[mysqld]
myisam-recover=backup,force
如果這個也不管用,還有其他的方法可以試試。
2、多實例MySQL
當你重啟MySQL后,進程馬上死掉,這很常見。
查看日志文件,它會告訴你,另一個MySQL實例可能正在運行。
停止所有MySQL實例:
/usr/local/mysql/bin/mysqladmin -uUSERNAME -pPASSWORD shutdown
killall mysql
killall mysqld
現(xiàn)在重啟數(shù)據(jù)庫,將只有一個實例在運行。
3、改變InnoDB日志設置
一旦MySQL數(shù)據(jù)庫有在運行InnoDB引擎,你就一定不能修改/etc/my.cnf文件中如下幾行:
datadir = /usr/local/mysql/data
innodb_data_home_dir = /usr/local/mysql/data
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /usr/local/mysql/data
innodb_log_files_in_group = 2
innodb_log_file_size = 5242880
InnoDB日志文件大小一旦確定就不能修改。如果改變了,數(shù)據(jù)庫將不能啟動。
4、MySQL host表丟失
有見過幾次這樣的情況??赡苁且恍┊愊氩坏降腗yISAM bug。
輕松將其修復如下:
/usr/local/bin/mysql_install_db
5、不正常的MyISAM自動增長(auto_increment)
如果MyISAM表自增計數(shù)變得紊亂,你就不能再插入新的紀錄。
通常你可以告訴自增計數(shù)器它現(xiàn)在工作不正常,通過將最后一條紀錄的自增字段設為-1。
解決問題-找到最后一條自增記錄的有效值(執(zhí)行如下命令)
SELECT max(id) from tablename
然后更新此表的自增計數(shù)器,如下:
ALTER TABLE tablename AUTO_INCREMENT = id+1
6、太多連接數(shù)
數(shù)據(jù)庫變得相當繁忙,因為連接數(shù)比它能處理的多。而且現(xiàn)在你都不能連接上你的數(shù)據(jù)庫。
首先,停止數(shù)據(jù)庫:
/usr/local/mysql/bin/mysqladmin -uUSERNAME -pPASSWORD shutdown
如果上條命令不管用,可以試試 "killall mysql" 和 "killall mysqld"
當數(shù)據(jù)庫停止后,編輯/etc/my.cnf文件,增加連接數(shù)。不要癡狂的增加這個數(shù)字,否則你會把你的整臺機器搞崩。
在一臺專用數(shù)據(jù)庫機器上,我們通常用:
max_connections = 200
wait_timeout = 100
試著重啟數(shù)據(jù)庫看看是否有幫助。
如果你被查詢弄的措手不及,需要連接數(shù)據(jù)庫進行表修改操作,那么在/etc/my.cnf文件中設置一個不同的端口號,開啟數(shù)據(jù)庫,進行修改操作。然后將端口修改回來(master-port = 3306)再重啟。
7、InnoDB表崩潰
InnoDB表是我最鐘愛的。事物緩存,可靠,不像MyISAM,InnoDB支持對同一表的并發(fā)寫。
InnoDB的內(nèi)部恢復機制也相當不錯。如果數(shù)據(jù)庫崩潰,InnoDB將嘗試進行修復,通過從最后一個時間戳開始運行日志文件。大多數(shù)情況都會成功,整個過程是透明的。
不過,如果InnoDB自行修復失敗,那么“整個”數(shù)據(jù)庫將不能啟動。MySQL將會發(fā)出一個錯誤信息并退出,你的整個庫將處于離線狀態(tài)。你可以不斷嘗試重啟數(shù)據(jù)庫,但是如果修復進程失敗,數(shù)據(jù)庫將拒絕啟動。
這就是為什么需要運行master/master當使用InnoDB時——當一個master宕掉時,還有一臺冗余master做后備。
在繼續(xù)操作前,先瀏覽下MySQL的日志文件,確定數(shù)據(jù)庫不是因為InnoDB表的崩潰而崩潰。
有一種方法是更新InnoDB的日志文件計數(shù)器以跳過引起崩潰的查詢,但是經(jīng)驗告訴我們這不是個好方法。這種情況下,將造成數(shù)據(jù)的不一致性而且會經(jīng)常使主從復制中斷。
一旦因InnoDB崩潰造成數(shù)據(jù)庫無法啟動,你就應該按如下五個步驟處理問題:
第一:添加此行到/etc/my.cnf文件中:
[mysqld]
innodb_force_recovery = 4
第二:重啟MySQL。你的數(shù)據(jù)庫現(xiàn)在將啟動,但是在innodb_force_recovery參數(shù)作用下,所有的插入與更新操作將被忽略。
第三:導出所有的表(Dump all tables)
第四:關閉數(shù)據(jù)庫,刪除所有的數(shù)據(jù)文件。運行mysql_install_db 創(chuàng)建默認MySQL表。
第五:從/etc/my.cnf文件中去掉innodb_force_recovery參數(shù),重啟數(shù)據(jù)庫。(庫現(xiàn)在應該能正常啟動)
第六:從備份文件中恢復所有數(shù)據(jù)。
續(xù):
最近遇到了個讓人棘手的任務——修復一個失敗的InnoDB數(shù)據(jù)庫。這個數(shù)據(jù)庫因崩潰而無法啟動。
第一步將InnoDB在force-recovery模式下開啟,此時InnoDB雖開啟了但是將忽略所有更新(UPDATEs)與插入(INSERTs)操作。
在/etc/my.cnf文件中添加此行:
innodb_force_recovery = 2
現(xiàn)在重啟數(shù)據(jù)庫:
/usr/local/bin/mysqld_safe &
(注意:如果MySQL沒有啟動,繼續(xù)增加 innodb_force_recovery 的數(shù)值直到將參數(shù)值設為8( innodb_force_recovery =)
將所有數(shù)據(jù)保存到臨時文件alldb.sql(下個命令需要花一定時間):
mysqldump --force --compress --triggers --routines --create-options -uUSERNAME -pPASSWORD --all-databases > /usr/alldb.sql
再次關閉數(shù)據(jù)庫:
mysqladmin -uUSERNAME -pPASSWORD shutdown
刪除數(shù)據(jù)庫目錄。(注意:我的數(shù)據(jù)目錄在/usr/local/var下。你的設置有可能不同,確保刪除的是正確的文件夾。)
rm -fdr /usr/local/var
重建數(shù)據(jù)庫文件夾,安裝MySQL基礎表
mkdir /usr/local/var
chown -R mysql:mysql /usr/local/var
/usr/local/bin/mysql_install_db
chown -R mysql:mysql /usr/local/var
從/etc/my.cnf文件中刪除innodb_force_recovery ,重啟數(shù)據(jù)庫:
/usr/local/bin/mysqld_safe &
導入所有備份文件(下一命令需要花一段時間):
mysql -uroot --compress < /usr/alldb.sql
最后,刷新MySQL的權限(因為我們也更新了MySQL的表)
/usr/local/bin/mysqladmin -uroot flush-privileges
注意:為了得到最好的結果,添加port=8819(或任何其他隨機端口)到/etc/my.cnf文件中在重啟MySQL之前,然后將--port=8819添加到mysqldump命令中。這種方法避免了MySQL數(shù)據(jù)庫過于系繁忙當修復進程正在進行時。
以上是“如何修復MySQL數(shù)據(jù)庫”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
當前名稱:如何修復MySQL數(shù)據(jù)庫
文章來源:http://chinadenli.net/article12/gidhdc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、網(wǎng)站策劃、網(wǎng)站設計公司、、關鍵詞優(yōu)化、網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)