mysql(除系统库外+支持异地远程备份)
脚本内容:
#!/bin/bash
DATE=$(date +%F_%H-%M-%S)
echo -e "\e[32m[提示]:当前时间:$(date '+%F %H:%M:%S') 作者:国杰响当当\e[0m"
echo -e "\e[32m[提示]:该脚本会直接备份除系统库外的所有数据库,请按照脚本提示输入信息。\e[0m"
read -p $'\e[32m请输入MySQL主机IP:\e[0m' HOST
read -p $'\e[32m请输入MySQL用户名:\e[0m' USER
read -p $'\e[32m请输入MySQL的密码:\e[0m' PASS
read -p $'\e[32m请输入MySQL的端口:\e[0m' PORT
read -p $'\e[32m请输入备份存放路径:\e[0m' BACKUP_DIR
# 检查备份目录是否存在
if [ ! -d "$BACKUP_DIR" ]; then
echo "备份目录不存在。"
exit 1
fi
# 获取数据库列表,排除系统数据库
DB_LIST=$(mysql -h$HOST -u$USER -P$PORT -p$PASS -s -e "show databases;" 2>/dev/null | egrep -v "Database|information_schema|mysql|performance_schema|sys")
# 确认是否继续备份
read -p $'\e[33m是否确认继续进行备份?(yes/no):\e[0m' confirm_backup
if [ "$confirm_backup" != "yes" ]; then
echo -e "\e[31m备份操作已取消。\e[0m"
exit 0
fi
# 开始备份每个数据库并打包
backup_files=()
for DB in $DB_LIST; do
BACKUP_NAME="${DB}_${DATE}.sql"
if mysqldump --column-statistics=0 -h$HOST -u$USER -P$PORT -p$PASS --databases $DB > "$BACKUP_DIR/$BACKUP_NAME" 2>/dev/null; then
echo -e "\e[32m数据库 ${DB} 备份成功。\e[0m"
backup_files+=("$BACKUP_NAME")
else
echo -e "\e[31m数据库 ${DB} 备份失败。\e[0m"
fi
done
cd $BACKUP_DIR
ARCHIVE_NAME="backup_${DATE}.tar.gz"
tar -zcf $ARCHIVE_NAME "${backup_files[@]}"
# 删除原始SQL文件
for BACKUP_FILE in "${backup_files[@]}"; do
rm -f "$BACKUP_FILE"
done
echo -e "\e[32m所有数据库SQL文件已经打包成 $ARCHIVE_NAME 并存放在 $BACKUP_DIR 中。\e[0m"
给执行权限:
[root@localhost ~]# chmod +x /opt/mysql_circulate_all_databases_backup.sh
使用方法:
[root@localhost ~]# sh /opt/mysql_circulate_all_databases_backup.sh
[提示]:当前时间:2025-03-06 15:55:43 作者:国杰响当当
[提示]:该脚本会直接备份除系统库外的所有数据库,请按照脚本提示输入信息。
请输入MySQL主机IP:localhost
请输入MySQL用户名:root
请输入MySQL的密码:123456
请输入MySQL的端口:3306
请输入备份存放路径:/root
是否继续进行备份?(yes/no):yes
数据库 employees 备份成功。
数据库 guojie_db 备份成功。
所有数据库SQL文件已经打包成 backup_2025-03-06_15-55-43.tar.gz 并存放在 /root 中。

浙公网安备 33010602011771号