mysql备份
#!/bin/bash
# MySQL数据库信息
DB_USER="your_username"
DB_PASS="your_password"
DB_NAME="your_database_name"
# 备份文件保存路径
BACKUP_DIR="/path/to/backup/directory"
DATE=$(date +"%Y-%m-%d")
BACKUP_FILE="$BACKUP_DIR/$DB_NAME-$DATE.sql"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 使用 mysqldump 导出数据库
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_FILE
# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "MySQL backup completed successfully. Backup saved in: $BACKUP_FILE"
else
echo "Error: MySQL backup failed."
fi
[root@fosow167 mysql.back]# cat backup_mysql.sh
#!/bin/bash
# 日志文件路径
log_file="/home/mysql.back/logs/backup_mysql.log"
# MySQL 容器信息
CONTAINER_NAME="fosow-biz-mysql"
MYSQL_USER="root"
MYSQL_PASSWORD="root"
# 备份目录
BACKUP_DIR="/home/mysql.back/data"
# 创建带有当前时间戳的备份文件
BACKUP_FILE="$BACKUP_DIR/mysql_backup_$(date +%Y%m%d%H%M%S).sql"
# 在 MySQL 容器内运行 mysqldump 命令备份所有数据库
docker exec $CONTAINER_NAME mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD --all-databases > $BACKUP_FILE
echo "备份完成: $BACKUP_FILE"
# 删除超过两天的备份文件
find "$BACKUP_DIR" -name "mysql_backup_*" -type f -mtime +2 -delete
[root@fosow167 mysql.back]# cat import_mysql.sh
#!/bin/bash
# 日志文件路径
log_file="/home/mysql.back/logs/import_mysql.log"
# 备份文件名和路径
backup_file="/home/mysql.back/data/mysql_backup_20231214050001.sql"
# 容器名称和数据库相关信息
container_name="fosow-biz-mysql"
db_username="root"
db_password="root"
# 将备份文件复制到容器内部
docker cp "$backup_file" "$container_name:/opt/"
copy_success=$?
if [ $copy_success -eq 0 ]; then
echo "$(date) - 备份文件成功复制到容器内部" >> $log_file
else
echo "$(date) - 错误:备份文件复制到容器内部失败" >> $log_file
fi
# 进入容器并导入数据
docker exec -it "$container_name" bash -c "pv -pterb \"$backup_file\" | mysql -u $db_username -p$db_password"
import_success=$?
if [ $import_success -eq 0 ]; then
echo "$(date) - 数据成功导入到数据库" >> $log_file
else
echo "$(date) - 错误:数据导入到数据库失败" >> $log_file
fi
# 删除容器内的备份文件
docker exec -it "$container_name" bash -c "rm /opt/$(basename "$backup_file")"
delete_success=$?
if [ $delete_success -eq 0 ]; then
echo "$(date) - 容器内备份文件成功删除" >> $log_file
else
echo "$(date) - 错误:容器内备份文件删除失败" >> $log_file
fi
echo "导入成功"
主要改进点包括:
- 修复了时间文件夹创建的逻辑,确保它使用当前日期时间。
- 增加了对备份目录存在性的检查,确保每个数据库都有自己的子目录。
- 增强了错误处理和日志记录功能。
#!/bin/bash
# MySQL备份脚本
# 定义变量
USER="root"
PASSWORD="rockai123456"
HOST="127.0.0.1"
PORT="3306"
DATABASES=("nacos" "rcloud_exchange" "rcloud_map" "rcloud_system")
BACKUP_DIR="/data/mysql-bak"
DATE=$(date +"%Y%m%d%H%M%S")
FILE_TIME=$(date +"%Y%m%d")
# 创建备份根目录(如果不存在)
if [ ! -d "$BACKUP_DIR" ]; then
mkdir -p "$BACKUP_DIR"
echo "Backup directory created: $BACKUP_DIR"
fi
# 创建以日期命名的时间文件夹
TIME_DIR="$BACKUP_DIR/$FILE_TIME"
mkdir -p "$TIME_DIR"
for DB in "${DATABASES[@]}"; do
# 定义备份文件名
BACKUP_FILE="${TIME_DIR}/${DB}_${DATE}.sql.gz"
# 使用mysqldump进行备份并压缩
mysqldump -h"$HOST" -P"$PORT" -u"$USER" -p"$PASSWORD" "$DB" | gzip > "$BACKUP_FILE"
# 检查mysqldump命令的退出状态
if [ $? -eq 0 ]; then
echo "Backup of $DB completed successfully: $BACKUP_FILE"
else
echo "Error occurred while backing up $DB"
fi
done
# 脚本结束,可以添加其他清理或通知操作
echo "All databases backup completed."
优化说明:
- 时间文件夹:现在
FILE_TIME
是基于当前日期创建的,确保每次备份都会在新的子文件夹中保存。 - 备份目录检查:在创建备份目录时,增加了对根目录的检查,避免每次都重复创建。
- 增强可读性:代码结构更加清晰,变量使用双引号以避免潜在的空格问题。
- 错误处理:保留了对
mysqldump
的返回状态检查,确保在出现错误时能够及时反馈。
使用注意:
- 请根据需要修改数据库用户名、密码和其他连接参数。
- 确保脚本有执行权限 (
chmod +x mysql-for.sh
) 并在合适的环境中运行。
[root@mysql01 mysql-bak]# cat mysql-for.sh
#!/bin/bash
# MySQL备份脚本
# 定义变量
USER="root"
PASSWORD="rockai123456"
HOST="127.0.0.1"
PORT="3306"
DATABASES=("nacos" "rcloud_exchange" "rcloud_map" "rcloud_system")
BACKUP_DIR="/data/mysql-bak"
DATE=$(date +"%Y%m%d%H%M%S")
#创建时间文件夹
File_time=$(echo "$START_TIME" | awk '{print $1}')
mkdir -p "$File_time"
if [ ! -d "$BACKUP_DIR" ]; then
mkdir -p "$BACKUP_DIR"
echo "Backup directory created: $BACKUP_DIR"
fi
for DB in "${DATABASES[@]}";
do
# 定义备份文件名
BACKUP_FILE="${BACKUP_DIR}/$File_time/${DB}_${DATE}.sql.gz"
# 使用mysqldump进行备份并压缩
mysqldump -h$HOST -P$PORT -u$USER -p$PASSWORD $DB | gzip > $BACKUP_FILE
# 检查mysqldump命令的退出状态
if [ $? -eq 0 ]; then
echo "Backup of $DB completed successfully: $BACKUP_FILE"
else
echo "Error occurred while backing up $DB"
fi
done
# 脚本结束,可以添加其他清理或通知操作
echo "All databases backup completed."
原文地址:https://blog.csdn.net/m0_56693018/article/details/136835050
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!