有时候不仅需要备份指定的数据表,还需要备份数据库中的所有数据表,直接上代码。
#!/bin/bash
HOST=127.0.0.1 #ip地址
USER=LGL #数据库用户名
PASSWORD=123 #数据库密码
DATABASE=backup #数据库名字
BACKUP_PATH=/home/lgl/bkdata #备份路径
logfile=/home/lgl/bkdata/data.log #日志路径
DATE=`date '+%Y%m%d'` #当前日期
#如果不存在该目录,就创建
if [ ! -d $BACKUP_PATH ]
then
mkdir -p "$BACKUP_PATH"
fi
#连接mysql数据库
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!">>$logfile
#进入到备份目录
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!">>$logfile
else
echo "$DUMPNAME backup fail!" >>$logfile
fi
done
done
if [ $? = 0 ]
then
echo "backup all tables Successful">>$logfile
else
echo "backup all tables fail!">>$logfile
exit 4
fi
注意:在linux下运行./test.sh时,即使代码没错,可能也会报错误,因为格式不对,只需要执行 dos2unix test.sh即可。sed '1d'表示删除show tables时出现的第一行。即 Tables_in_backup 这一行。
用for循环来遍历出数据库下所有的数据表,依次使用mysqldump导出到指定文件中。