最近要幫伺服器定期備份MySQL
首先、先把原本的資料庫全部備份起來
mysqldump --user=root -p --all-database > /backup/mysql.sql
但卻遇到了Table 'DB/table' is marked as crashed and should be repaired when using LOCK TABLES
因此就進到資料庫內
mysql -u root -p //進入MySQL
use DB //進去有問題的DB
check table XXX //檢查有問題的table
repair table XXX //修復有問題的table
接下來使用mysqlhotcopy來備份MySQL
使用mysqlhotcopy之前需要安装perl-DBI和DBD-mysql:
1、執行yum install perl-DBI安装perl-DBI。
2、執行yum install perl-DBD-MySQL
安裝完後要重新修改密碼否則可能會
DBI connect(';host=localhost;mysql_read_default_group=mysqlhotcopy','',...) failed: Access denied for user 'root'@'localhost' (using password: YES) at /usr/bin/mysqlhotcopy line 177
重新修改密碼的方法可以參照MySQL修改密碼方法總結
我是使用裡面的mysqladmin -u root -p password mypasswd
創建出
這2個sh即可備份
sqlcopy.sh
#!/bin/sh
#$Id: sqlcopy.sh,v 0.1 2006/12/18 weithenn Exp $
#Daily HotCopy MySQL DB Script
TODAY=`date +%Y%m%d`
COPYDESTDIR="/backup/mysql/copy"
COPYCONF="/backup/sqlcopy_list.sh"
KEEPN="3"
if [ -d ${COPYDESTDIR} ]; then
cd ${COPYDESTDIR}
N=`ls -1|grep -e '[0-9]'|wc -l`
if [ ${N} -gt ${KEEPN} ]; then
echo "Removing Stale MySQL DB Backup..."
ls -1 | grep -e '[0-9]'|sort -nr|tail -`expr ${N} - ${KEEPN}` | xargs rm -r
echo "Finished"
fi
mkdir -p ${COPYDESTDIR}/${TODAY}
if [ -f ${COPYCONF} ]; then
cd ${COPYDESTDIR}/${TODAY};${COPYCONF}
else
echo "Configuration File ${COPYCONF} does not exist!!"
exit 1
fi
fi
sqlcopy_list.sh
#!/bin/sh
echo Backup DBNAME MySQL DB
mysqlhotcopy DBNAME . -p='password'
備份後想復原的話
cp -R /backup/mysql/copy/20111226/yoourDB/ /var/lib/mysql/
chmod -R mysql:mysql /var/lib/mysql/yourDB
接下來是異地備援的部分
首先要讓ssh不用密碼就能登入
可以參考SSH + No Password Login(public key)
接下來則是在crontab下
0 4 * * * sh /backup/sqlcopy.sh
2 4 * * * rsync -av --progress --inplace --rsh='ssh -p port_number' --delete /backup/mysql/copy/ user@domain.name:/home/user/mysql_bak
即可完成
===============================================================
參考文章
MySQL-使用 HotCopy 備份 DB
使用MySQL自带工具mysqlhotcopy快速备份mysql数据库
SSH + No Password Login(public key)
