在之前的文件中杜老师推荐了两款云主机面板,有小伙伴留言说因服务器配置比较低,未使用云主机面板,一直为数据库备份问题困扰。杜老师之前工作的环境也是没有面板,编写过相关的备份脚本,在此文中分享给需要的小伙伴们~
设置环境变量 {#设置环境变量}
|---------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6
| #!/bin/bash # Setup environment variables export MYSQL_HOST=localhost export MYSQL_PORT=3306 export MYSQL_USER=root export MYSQL_PASSWORD=your_password
|
注意:需要设置环境变量,以便脚本可以找到 MySQL 数据库。在脚本中,添加以上内容。
创建备份目录 {#创建备份目录}
|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6
| # Create backup directory BACKUP_DIR=/path/to/backup/directory # Check if backup directory exists if [ ! -d "$BACKUP_DIR" ]; then mkdir -p "$BACKUP_DIR" fi
|
注意:创建一个目录,以存储备份的文件。在脚本中,添加以上内容。
备份 MySQL 数据库 {#备份-MySQL-数据库}
|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4
| # Backup database DATABASE_NAME=your_database_name BACKUP_FILE="$BACKUP_DIR/$DATABASE_NAME-$(date +"%Y-%m-%d_%H-%M-%S").sql" mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD --host=$MYSQL_HOST --port=$MYSQL_PORT $DATABASE_NAME > "$BACKUP_FILE"
|
注意:使用 mysqldump
命令备份数据库。在脚本中,添加以上内容。
检查备份是否成功 {#检查备份是否成功}
|-----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7
| # Check if backup file exists if [ -f "$BACKUP_FILE" ]; then echo "Backup completed successfully!" else echo "Backup failed!" exit 1 fi
|
注意:检查备份文件是否创建。在脚本中,添加以上内容。
压缩备份文件 {#压缩备份文件}
|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5
| # Compress backup file COMPRESSED_BACKUP_FILE="$BACKUP_FILE".gz gzip "$BACKUP_FILE" # Remove original backup file rm "$BACKUP_FILE"
|
注意:为了节省空间,可使用 gzip
命令压缩备份文件。在脚本中,添加以上内容。
删除 MySQL 旧备份 {#删除-MySQL-旧备份}
|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5
| # Remove old backups OLD_BACKUPS=$(ls -t "$BACKUP_DIR" | tail -n +7) if [ ! -z "$OLD_BACKUPS" ]; then rm "$BACKUP_DIR/$OLD_BACKUPS" fi
|
注意:删除旧备份文件以节省空间。在脚本中,添加以上内容。
设置定时任务 {#设置定时任务}
最后,可使用 crontab
命令设置定时任务,以便脚本定期运行。在终端中输入以下命令:
|-----------|--------------------|
| 1
| crontab -e
|
在打开的编辑器中,添加以下行的内容,比如以每天凌晨的一点运行脚本。保存并退出编辑器:
|-----------|--------------------------------------------------|
| 1
| 0 1 * * * /path/to/your/backup_script.sh
|
还有哪些开源工具 {#还有哪些开源工具}
除上面脚本外,还有一些开源「有商业版」工具也可实现 MySQL 数据库备份,供需要的小伙伴们参考选择:
| 名称 | 描述 | |-------------------------|------------------------------------------------------------------------------------------| | mysqldump | mysqldump 是 MySQL 官方提供的备份工具,可将 MySQL 数据库的数据和结构导出为 SQL 文件。 | | XtraBackup | XtraBackup 是一个 Percona 提供的备份工具,可在线备份 MySQL 数据,提供增量备份、压缩功能。 | | Zmanda Recovery Manager | Zmanda Recovery Manager 是一款商业的备份和恢复解决方案,可支持 MySQL 和其它数据库。提供完整备份、增量备份、多种存储介质、自动化备份和恢复等功能。 | | mydumper | mydumper 是一个 MySQL 官方派生的高性能 MySQL 备份工具,支持并行备份,可更快地备份大型 MySQL 数据库。 |