MySQL資料庫救援

有時候, 伺服器不知道為什麼會無法重啟 mysql… 重啟時不斷的跑出Error Code

我們可以先停掉 mysql:

sudo service mysql stop

再備份以下檔案:

  • /var/lib/mysql/ibdata1
  • /var/lib/mysql/ib_logfile0
  • /var/lib/mysql/ib_logfile1

強行令mysql 以recovery mode運行

vim /etc/mysql/my.cnf
innodb_force_recovery=3
innodb_purge_threads=0

sudo service mysql start

用mysqlcheck 檢查和修復

用法如下:
mysqlcheck [options] 資料庫名稱 [資料表名稱]
mysqlcheck [options] –databases 資料庫名稱1 [資料庫名稱2 資料庫名稱3…]
mysqlcheck [options] –all-databases

options部分舉一些常用的:
-a = Analyse given tables.
-c = Check table for errors
-o = Optimise table
-r = Can fix almost anything except unique keys that aren’t unique
-u = The MySQL username to use when connecting to the server

sudo mysqlcheck -c –all-databases -u root

有時候真的定期自動做備份比較好, 寫一個小的 bash 程式再用 crontab 來每天備份:

/home/db/backup.sh

#!/bin/bash

USER=”root”
PASSWORD=””

databases=`mysql -u $USER -p$PASSWORD -e “SHOW DATABASES;” | tr -d “| ” | grep -v Database`

for db in $databases; do
if [[ “$db” != “information_schema” ]] && [[ “$db” != “performance_schema” ]] && [[ “$db” != “mysql” ]] && [[ “$db” != _* ]] ; then
echo “Dumping database: $db”
mysqldump -u $USER -p$PASSWORD –databases $db > `date +%Y%m%d`.$db.sql
fi
done

 

cd /home/db/ && ./backup.sh > /dev/null 2>&1

#注意一下: 要確保  .sh 有足夠權限去執行和寫入備份的 .sql 到指定的資料夾

再用crontab 令他每天跑一次:

crontab – e
0 0 * * * cd /home/db/ && ./backup.sh > /dev/null 2>&1

crontab 詳情使用方法可以到此 鳥哥的 Linux 私房菜 學習, 裡面的教學十分詳盡。