1. 程式人生 > >shell指令碼備份mysql資料表(分表備份)

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結構來判斷結果。