以下是一个备份MySQL所有数据库的Shell脚本示例,它将在每天凌晨2点备份所有数据库,并将每个数据库备份单独存储在指定的目录中。您需要设置变量以指定MySQL账户、密码和备份目录。

#!/bin/bash

# MySQL数据库账户名和密码
MYSQL_USER="your_mysql_username"
MYSQL_PASSWORD="your_mysql_password"

# 备份文件存储目录
BACKUP_DIR="/path/to/backup/directory"

# 当前日期和时间
DATETIME=$(date +%Y%m%d_%H%M%S)

# 所有数据库备份文件名
ALL_DATABASES_BACKUP_FILENAME="all-databases-$DATETIME.sql"

# 备份所有数据库
mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD --all-databases > $BACKUP_DIR/$ALL_DATABASES_BACKUP_FILENAME

# 将所有数据库备份文件压缩
gzip $BACKUP_DIR/$ALL_DATABASES_BACKUP_FILENAME

# 遍历所有数据库,并备份每个数据库
for db in $(mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -e 'show databases' -s --skip-column-names | grep -Ev '^(information_schema|performance_schema|mysql|sys)$'); do
  # 为每个数据库创建备份文件名
  DATABASE_BACKUP_FILENAME="$db-$DATETIME.sql"
  
  # 备份当前数据库
  mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD $db > $BACKUP_DIR/$DATABASE_BACKUP_FILENAME
  
  # 压缩备份文件
  gzip $BACKUP_DIR/$DATABASE_BACKUP_FILENAME
done

# 删除7天之前的备份文件
find $BACKUP_DIR -name "*.gz" -type f -mtime +7 -delete

在上面的示例中,您需要将以下值替换为您的实际值:

  • MYSQL_USER:MySQL数据库账户名
  • MYSQL_PASSWORD:MySQL数据库密码
  • BACKUP_DIR:备份文件存储目录

此脚本将创建一个名为"all-databases-YYYYMMDD_HHMMSS.sql.gz"的备份文件,其中"YYYYMMDD_HHMMSS"是当前日期和时间。它还将创建每个数据库的单独备份文件,文件名格式为"database_name-YYYYMMDD_HHMMSS.sql.gz"。

然后,您可以将脚本保存为 backup.sh,并在命令行中执行以下命令,以使其可执行:

chmod +x backup.sh

最后,您可以使用cron作业将此脚本定期运行,以便在每天的凌晨2点自动备份所有MySQL数据库。打开cron作业编辑器,然后添加以下行:

0 2 * * * /path/to/backup.sh

保存并退出编辑器,然后cron将在每天的凌晨2点运行backup.sh脚本。