以下是一个备份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脚本。