一个简单的shell脚本可以使Linux管理员作业自动化,这将减少人工工作并节省大量时间。作为服务器管理员,您应该对数据库进行定期备份,如果出现问题(例如数据库损坏等),它可以帮助您还原数据库。我们编写了一个小的Shell脚本来实现这一目标,本文提供了三个脚本,每个脚本都是为不同目的创建的,可以很好地完成工作。为了限制大小,我们正在使用gunzip格式进行数据库备份,我们仅保留十天的备份,以减少服务器上的磁盘空间利用率。
1、如何将每个数据库备份到一个单独的文件 此Shell脚本允许您将每个数据库备份到一个单独的文件,如果需要,它将帮助您还原特定的数据库。 将以下shell脚本添加到文件中,在此示例中,我已将脚本添加到mysql_backup.sh文件中: # vi /opt/shell-scripts/mysql_backup.sh #!/bin/bash # Add the backup dir location, MySQL root password, MySQL and mysqldump location DATE=$(date +%d-%m-%Y) BACKUP_DIR="/backup/test-backup" MYSQL_USER="root" MYSQL_PASSWORD="***" # To create a new directory in the backup directory location based on the date mkdir -p $BACKUP_DIR/$DATE # To get a list of databases databases=`$MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema)"` # To dump each database in a separate file for db in $databases; do echo $db mysqldump --force --opt --skip-lock-tables --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/$DATE/$db.sql.gz" done # Delete the files older than 10 days find $BACKUP_DIR/* -mtime +10 -exec rm {} \; 为mysql_backup.sh文件设置可执行权限: # chmod +x mysql_backup.sh 最后运行脚本以实现此目的: # sh mysql_backup.sh mysql performance_schema testdb testdb1 现在检查输出: # ls -lh /backup/db-backup/23-02-2020/
Cronjob将使我们的操作按计划执行,而不会失败,下面的cronjob计划每天10AM运行: 0 10 * * * /opt/shell-scripts/mysql_backup.sh
2、如何使用Shell脚本备份单个数据库 此Shell脚本允许您将给定的数据库备份到文件中,将以下shell脚本添加到文件中。在此示例中,我已将脚本添加到mysql_backup_1.sh文件中: # vi /opt/shell-scripts/mysql_backup_1.sh #!/bin/bash MYSQL_PASSWORD="*****" DATE=$(date +%d-%m-%Y) BACKUP_DIR="/backup/db-backup" DB=testdb echo $DB mysqldump -u root -p$MYSQL_PASSWORD $DB | gzip -9 > "$BACKUP_DIR/testdb-$DATE.sql.gz" find $BACKUP_DIR/* -mtime +5 -exec rm {} \; 为mysql_backup_1.sh文件设置可执行权限: # chmod +x mysql_backup_1.sh 最后运行脚本以实现此目的: # sh mysql_backup_1.sh testdb 现在检查输出: # ls -lh /backup/db-backup
3、如何将所有数据库备份到单个备份文件中 该shell脚本允许您将所有数据库备份到单个备份文件中,将以下shell脚本添加到文件中。在此示例中,我已将脚本添加到mysql_backup_2.sh文件中: # vi /opt/shell-scripts/mysql_backup_2.sh #!/bin/bash MYSQL_PASSWORD="*****" DATE=$(date +%d-%m-%Y) BACKUP_DIR="/backup/db-backup" DB=testdb mysqldump -u root -p$MYSQL_PASSWORD --all-databases | gzip -9 > "$BACKUP_DIR/all-dbs-$DATE.sql.gz" find $BACKUP_DIR/* -mtime +5 -exec rm {} \; 为mysql_backup_2.sh文件设置可执行权限: # chmod +x mysql_backup_2.sh 最后运行脚本以实现此目的: # sh mysql_backup_2.sh 现在检查输出: # ls -lh /backup/db-backup
相关主题 |