CentOS下使用mysqlhotcopy定時備份MySQL數據庫(MyISAM存儲引擎) mysqlhotcopy與mysqldump比較: 前者是一個快速文件意義上的COPY,後者是一個數據庫端的SQL語句集合。 前者只能運行在數據庫目錄所在的機器上,後者可以用在遠程客戶端,不過備份的文件還是保存在服務器上。 www.2cto.com 相同的地方都是在線執行 LOCK TABLES 以及 UNLOCK TABLES 前者恢復只需要COPY備份文件到源目錄覆蓋即可,後者需要導入SQL文件到原庫中。(source 或 mysql < bakfile.sql) 前者只適用於 MyISAM 引擎,而後則則可同時使用於MyISAM引擎和InodDB引擎. 前者在使用前必須安裝perl-DBD-mysql包,而後者則不需要. 使用mysqlhotcopy之前需要安裝perl-DBI和DBD-mysql: www.2cto.com 1 yum -y install perl perl-DBI Shell腳本如下: 01 # Name:mysqlbackup.sh 02 # PS:MySQL DataBase Backup,Use mysqlhotcopy script. 03 # Last Modify:2008-06-12 04 # 定義變量,請根據具體情況修改 05 # 定義腳本所在目錄 06 scriptsDir=`pwd` 07 # 數據庫的數據目錄 08 dataDir=/usr/local/mysql/var/ 09 # 數據備份目錄 10 tmpBackupDir=/tmp/mysqlblackup 11 backupDir=/home/backup/mysql 12 # 用來備份數據庫的用戶名和密碼 13 mysqlUser=root 14 mysqlPWD='456123' 15 # 如果臨時備份目錄存在,清空它,如果不存在則創建它 16 if [[ -e $tmpBackupDir ]]; then 17 rm -rf $tmpBackupDir/* 18 else 19 mkdir $tmpBackupDir 20 fi 21 22 # 如果備份目錄不存在則創建孾C 23 if [[ ! -e $backupDir ]];then 24 mkdir $backupDir 25 fi 26 # 得到數據庫備份列表,在此可以過濾不想備份的數據庫 27 28 for databases in `find $dataDir -type d | \ 29 30 sed -e "s/\/usr\/local\/mysql\/var\///" | \ 31 32 sed -e "s/test//"`; do 33 34 if [[ $databases == "" ]]; then 35 36 continue 37 else 38 # 備份數據 39 40 /usr/local/mysql/bin/mysqlhotcopy --user=$mysqlUser --password=$mysqlPWD -q "$databases" $tmpBackupDir 41 42 dateTime=`date "+%Y.%m.%d %H:%M:%S"` 43 44 echo "$dateTime Database:$databases backup success!" >>MySQLBackup.log 45 46 fi 47 48 done 49 50 # 壓縮備份文件 51 52 date=`date -I` 53 54 cd $tmpBackupDir 55 56 tar czf $backupDir/mysql-$date.tar.gz ./ 57 58 #En<span></span>d完成 加入定時任務 1 30 5 * * * /root/mysqlbackup.sh >> mysqlbackup.log 2>&1 如何還原? 1、停止mysql服務器。 2、復制備份的數據庫目錄到mysql數據目錄下。 3、更改目錄所有者為mysql服務器運行的用戶(如mysql)。 4、啟動mysql服務器