自学内容网 自学内容网

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 "导入成功"

 

主要改进点包括:

  1. 修复了时间文件夹创建的逻辑,确保它使用当前日期时间。
  2. 增加了对备份目录存在性的检查,确保每个数据库都有自己的子目录。
  3. 增强了错误处理和日志记录功能。
#!/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."

优化说明:

  1. 时间文件夹:现在 FILE_TIME 是基于当前日期创建的,确保每次备份都会在新的子文件夹中保存。
  2. 备份目录检查:在创建备份目录时,增加了对根目录的检查,避免每次都重复创建。
  3. 增强可读性:代码结构更加清晰,变量使用双引号以避免潜在的空格问题。
  4. 错误处理:保留了对 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)!