shell指令碼備份mysql資料表(分表備份)
有時候不僅需要備份指定的資料表,還需要備份資料庫中的所有資料表,老規矩,直接上程式碼。
#!/bin/bash
HOST=127.0.0.1 #ip地址
USER=LGL #資料庫使用者名稱
PASSWORD=123 #資料庫密碼
DATABASE=backup #資料庫名字
BACKUP_PATH=/home/gec/bkdata #備份路徑
logfile=/home/gec/bkdata/data.log #日誌路徑
DATE=`date '+%Y%m%d'` #當前日期
if [ ! -d $BACKUP_PATH ]
then
mkdir -p "$BACKUP_PATH"
fi
mysql -h $HOST -u $USER -p$PASSWORD -s $DATABASE <<EOF
drop table if exists a;
create table a (
id int(10) not null,
name varchar(10) not null
);
insert into a values(2016,'LiuBei');
insert into a values(2017,'GuanYu');
insert into a values(2018,'ZhangFei');
drop table if exists b;
create table b (
id int(10) not null,
name varchar(10) not null
);
insert into b values(2019,'CaoCao');
insert into b values(2020,'ZhangLiao');
insert into b values(2021,'XuChu');
EOF
if [ $? -ne 0 ]
then
echo "Init data fail!">>$logfile
exit 4
fi
echo "Init data Successful!"
#進入到備份目錄
cd $BACKUP_PATH
for table in $DATABASE
do
table=$(mysql -h $HOST -u $USER -p$PASSWORD $DATABASE -e "show tables;"|sed '1d')
for tb in $table
do
DUMPNAME=""$tb"_"$DATE".sql" #備份檔名
mysqldump -h $HOST -u $USER -p$PASSWORD $DATABASE $tb> $DUMPNAME
if [ $? = 0 ]
then
echo "$DUMPNAME backup Successful!"
else
echo "$DUMPNAME backup fail!" >>$logfile
fi
done
done
if [ $? = 0 ]
then
echo "backup all tables Successful"
else
echo "backup all tables fail!"
exit 4
fi
注意:在linux下執行./test.sh時,即使程式碼沒錯,可能也會報錯誤,因為格式不對,只需要執行 dos2unix test.sh即可。sed '1d'表示刪除show tables時出現的第一行。即 Tables_in_backup這一行。
用for迴圈來遍歷出資料庫下所有的資料表,依次使用mysqldump匯出到指定檔案中。使用if結構來判斷結果。