最近要幫伺服器定期備份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


接著參考MySQL-使用 HotCopy 備份 DB

創建出

  1. sqlcopy.sh 內容 (備份 MySQL 資料庫)
  2. sqlcopy_list.sh 內容 (指定要備份的 MySQL 資料庫)

這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)

文章標籤
全站熱搜
創作者介紹
創作者 result945 的頭像
result945

隨風而行

result945 發表在 痞客邦 留言(0) 人氣(1,143)