Bash中的MySQL备份脚本

时间:2012-11-02 18:51:31

标签: mysql linux bash backup mysqldump

REF http://www.rsnapshot.org/howto/1.2/rsnapshot-HOWTO.en.html 4.3.9。 backup_script

如果要创建新的数据库,我需要动态备份所有的mysql数据库。有没有理想的方法在bash中使用最少的代码执行此操作?

我是否需要登录mysql并获取所有数据库?

2 个答案:

答案 0 :(得分:1)

mysqldump命令有一个--all-databases选项,可以一次备份每个数据库。

唯一的缺点是你必须将它们全部恢复,你没有挑选和选择的奢侈。

请记住,数据库通常在MySQL数据目录中有一个关联的目录,因此您可以随时遍历这些目录以找出存在哪些数据库。

答案 1 :(得分:1)

似乎您希望bash脚本在MySQL中创建的动态数据库上运行备份。您可以在my.cnf中的根目录或#[Define Variables]下的bash脚本中添加mysql root用户帐户信息。

您需要使用

chmod bash脚本
$sudo chmod +x backupmysql.sh

这将允许您使用以下命令运行脚本。

$sudo ./backupmysql.sh

您可以随意命名脚本。在本例中,我将其命名为backupmysql.sh。

这是bash脚本:

#!/bin/bash

# [ Define Variables ]
HOST=`hostname -s`
syslogtag=MySQL-Backup
DEST=/var/dba/backup/
DBS="$(mysql -u root -Bse 'show databases' | egrep -v '^Database$|hold$' | grep -v 'performance_schema\|information_schema')"
DATE=$(date +'%F')

#[ Individually dump all databases with date stamps ]
for db in ${DBS[@]};
do  

GZ_FILENAME=$HOST-$db-$DATE.sql.gz
mysqldump -u root --quote-names --opt --single-transaction --quick $db > $DEST$HOST-$db-$DATE.sql
ERR=$?

if [ $ERR != 0 ]; then
NOTIFY_MESSAGE="Error: $ERR, while backing up database: $db"
logger -i -t ${syslogtag} "MySQL Database Backup FAILED; Database: $db"
else
NOTIFY_MESSAGE="Successfully backed up database: $db "
logger -i -t ${syslogtag} "MySQL Database Backup Successful; Database: $db"
fi
echo $NOTIFY_MESSAGE
done

如果你有大文件用于备份,你可以用bash脚本中的语句替换mysqldump来使用gzip压缩文件。

mysqldump -u root --quote-names --opt --single-transaction --quick $db | gzip -cf > $DEST$HOST-$db-$DATE.sql.gz

您可以使用gunzip解压缩文件。