shell脚本实现mysql数据库文件和日志备份
示例1(自动获取数据库列表方式):
要实现自动获取数据库列表并备份多个数据库文件和日志,并按照备份时间创建文件夹来存放备份文件,你可以使用以下示例脚本:
#!/bin/bash
# 指定MySQL数据库信息
DB_HOST="localhost"
DB_USER="username"
DB_PASS="password"
# 指定备份目录
BACKUP_DIR="/path/to/backup"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FOLDER="$BACKUP_DIR/$DATE"
# 创建备份文件夹
create_backup_folder() {
echo "Creating backup folder..."
# 使用mkdir命令创建备份文件夹
mkdir -p $BACKUP_FOLDER
echo "Backup folder created"
}
# 获取数据库列表
get_database_list() {
echo "Getting database list..."
# 使用mysql命令获取数据库列表
DATABASES=$(mysql -h $DB_HOST -u $DB_USER -p$DB_PASS -e "SHOW DATABASES;" | awk -F ' ' '{if (NR>1) print $1}')
echo "Database list obtained"
}
# 备份数据库文件
backup_databases() {
echo "Backing up databases..."
# 使用for循环备份多个数据库
for DB_NAME in $DATABASES
do
# 使用mysqldump命令备份数据库文件
DB_BACKUP_FILE="$BACKUP_FOLDER/db_backup_$DB_NAME.sql"
mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME > $DB_BACKUP_FILE
done
echo "Database backup completed"
}
# 备份日志文件
backup_logs() {
echo "Backing up logs..."
# 使用cp命令备份日志文件
LOG_FILE="/var/log/mysql/error.log"
LOG_BACKUP_FILE="$BACKUP_FOLDER/log_backup.log"
cp $LOG_FILE $LOG_BACKUP_FILE
echo "Log backup completed"
}
# 主程序
create_backup_folder
get_database_list
backup_databases
backup_logs
在这个示例脚本中,我们使用mysql命令获取数据库列表,并将结果保存在DATABASES变量中。然后,我们使用for循环遍历数据库列表,依次备份每个数据库。
示例2(手动指定要备份的数据库):
#!/bin/bash
# 指定MySQL数据库信息
DB_HOST="localhost"
DB_USER="username"
DB_PASS="password"
DB_NAMES=("database1" "database2" "database3")
# 指定备份目录
BACKUP_DIR="/path/to/backup"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FOLDER="$BACKUP_DIR/$DATE"
# 创建备份文件夹
create_backup_folder() {
echo "Creating backup folder..."
# 使用mkdir命令创建备份文件夹
mkdir -p $BACKUP_FOLDER
echo "Backup folder created"
}
# 备份数据库文件
backup_databases() {
echo "Backing up databases..."
# 使用for循环备份多个数据库
for DB_NAME in "${DB_NAMES[@]}"
do
# 使用mysqldump命令备份数据库文件
DB_BACKUP_FILE="$BACKUP_FOLDER/db_backup_$DB_NAME.sql"
mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME > $DB_BACKUP_FILE
done
echo "Database backup completed"
}
# 备份日志文件
backup_logs() {
echo "Backing up logs..."
# 使用cp命令备份日志文件
LOG_FILE="/var/log/mysql/error.log"
LOG_BACKUP_FILE="$BACKUP_FOLDER/log_backup.log"
cp $LOG_FILE $LOG_BACKUP_FILE
echo "Log backup completed"
}
# 主程序
create_backup_folder
backup_databases
backup_logs
在这个示例脚本中,我们添加了一个DB_NAMES数组,用于指定需要备份的多个数据库名称。你可以根据实际的需求,修改DB_NAMES数组来指定你要备份的数据库名称。我们还添加了一个BACKUP_FOLDER变量,用于指定备份文件夹的路径和名称。在create_backup_folder函数中,我们使用mkdir命令创建备份文件夹,并使用-p选项确保即使父文件夹不存在,也能创建成功。在backup_databases函数中,我们使用for循环遍历DB_NAMES数组,依次备份每个数据库。备份文件的命名规则根据数据库名称进行命名,并保存在创建的备份文件夹中。
请注意,我们在示例脚本中只备份了MySQL的错误日志文件。如果你还有其他日志文件需要备份,可以根据实际情况进行相应的修改。
请确保你有适当的权限访问数据库和日志文件,并且脚本中使用的命令和参数是正确的。
在使用脚本之前,强烈建议测试它的功能,并根据你的具体需求进行修改和扩展。此外,还建议将备份脚本设置为定期执行,以确保数据库文件和日志的定期备份。