这篇博客提供了一个批量备份MySQL数据库的Shell脚本,并包含了详细的注释和使用说明。这个脚本能够自动化地备份服务器上所有的数据库,排除系统数据库,并在备份完成后压缩和清理旧文件。
脚本内容及注释
下面是脚本的内容,其中包括了详细的注释说明:
#!/bin/sh# 定义数据库用户和密码
DBUser='root'
DBPass='your_password'# 定义MySQL和Mysqldump的路径
Mysql_path='/usr/local/mysql/bin/mysql'
Mysqldump_path='/usr/local/mysql/bin/mysqldump'# 定义备份日期和当前工作目录
Back_date=$(date +%Y%m%d)
Curr_dir=$(cd $(dirname $0);pwd)# 定义备份存放的目录
Backup_dir='/opt/dbbak'# 检查备份目录是否存在,不存在则创建
if [ ! -d ${Backup_dir} ]; thenmkdir -p ${Backup_dir}
fi# 创建当天的备份目录
mkdir ${Backup_dir}/mysql_backup_${Back_date}# 获取数据库列表,排除系统数据库
DBS=$(${Mysql_path} -u${DBUser} -p${DBPass} -e "show databases;" | egrep -vw "Database|performance_schema|information_schema" 2>/dev/null)
if [ $? -ne 0 ]; thenecho "login failed,exit"exit 1
fi# 遍历数据库列表,执行备份操作
for i in ${DBS}; doecho -e "\033[32m Backup $i \033[0m"${Mysqldump_path} -u${DBUser} -p${DBPass} --single-transaction --hex-blob -B ${i} | gzip > ${Backup_dir}/mysql_backup_${Back_date}/${i}_${Back_date}.sql.gz
done# 切换到备份目录,打包并删除原备份文件夹
cd ${Backup_dir}
tar zcvf mysql_backup_${Back_date}.tar.gz mysql_backup_${Back_date} --remove-files# 删除3天前的备份文件
cd ${Backup_dir} && find ${Backup_dir} -type f -name "*.tar.gz" -mtime +3 -exec rm -f {} \;
脚本解释
- 脚本头:
#!/bin/sh
指明这个脚本应该使用shell来执行。 - 数据库访问信息:
DBUser
和DBPass
变量存储用于访问数据库的凭据。 - 工具路径:
Mysql_path
和Mysqldump_path
指向mysql和mysqldump工具的路径。 - 备份时间和目录:使用日期生成备份文件名,并定义备份文件存放的目录。
- 创建备份目录:检查并创建今天的备份目录。
- 获取数据库列表:列出除系统数据库外的所有数据库。
- 备份过程:对每个数据库执行备份,备份文件以
.sql.gz
格式保存。 - 压缩备份文件:将所有备份文件打包成一个
.tar.gz
文件,并删除原备份目录。 - 清理旧备份:删除3天前的备份文件。
使用方法
1. 将上述脚本保存到一个文件中,例如命名为mysql_backup.sh
。
2. 给脚本文件赋予执行权限:
chmod +x mysql_backup.sh
3. 执行脚本进行备份:
./mysql_backup.sh
4. (可选)将脚本加入到crontab
中,实现定期自动备份。
如果希望脚本定时执行,可以将其添加到crontab
中。编辑当前用户的crontab文件:
crontab -e
添加一行定时任务,例如每天凌晨2点执行备份:
0 2 * * * /path/to/mysql_backup.sh
确保将/path/to/mysql_backup.sh
替换为脚本实际的存储路径。
保存并退出编辑器。这样,脚本将按照设定的时间自动运行并执行数据库备份。
结论
通过使用这个脚本,系统管理员可以轻松地自动化MySQL数据库的备份过程。这不仅提高了备份任务的效率,也确保了数据的安全性和及时恢复的可能性。通过定期执行备份并清理旧文件,可以有效管理备份数据的存储空间。