Linux: Shell脚本备份MySQL数据库, Linux shell script for database backup

Shell脚本是我们写不同类型命令的一种脚本,这些命令在这一个文件中就可以执行。我们也可以逐一敲入命令手动执行。如果我们要使用shell脚本就必须在一开始把这些命令写到一个文本文件中,以后就可以随意反复运行这些命令了。

我首先要在本文带给你的是完整脚本。后面会对该脚本做说明。我假定你已经知道shell scripting、 mysqldump和crontab。

适用操作系统:任何Linux或UNIX。

主脚本(用于备份mysql数据库):

该Shell脚本可以自动备份数据库。只要复制粘贴本脚本到文本编辑器中,输入数据库用户名、密码以及数据库名即可。我备份数据库使用的是mysqlump 命令。后面会对每行脚本命令进行说明。

1. 分别建立目录“backups”和“history”

mkdir -p /var/www/html/var/backups/history

2. 现在使用你喜欢的编辑软件创建并编辑“backup.sh”

这里我用的是 vi

vi /var/www/html/var/backups/backup.sh

现在把以下几行命令输入到 backup.sh 文件中:

#!bin/bash

BACKUP=/var/www/html/var/backups
USERNAME=root
PASSWORD='root'
DBNAME=ikeepstudying

cd ${BACKUP}

echo "----You are In Backup Directory"
sudo mv *.sql ${BACKUP}/history/
sudo rm -rf *.sql
echo "----Old Databases are Moved to history folder"
Now=$(date +"%Y-%m-%d--%H:%M:%S")
File=backup-$Now.sql
mysqldump --user=${USERNAME} --password=${PASSWORD} --default-character-set=utf8 --single-transaction ${DBNAME} > $File
echo "----Your Database Backup Successfully Completed"

脚本说明:

切记,在第8行命令中,在mysqldump命令后要输入自己的数据库用户名、密码及数据库名。

执行该脚本,首先会进入 /var/www/html/var/backups 目录,然后该脚本会把原有的旧数据库备份移动到 /history 文件夹中,接着根据系统的日期及时间生成一个文件名,在最后 mysqldump 命令会生成一个“.sql”格式的数据库备份文件。

3. 设置 backup.sh 脚本文件的可执行许可

chmod +x /var/www/html/var/backups/backup.sh

4. 执行脚本

其他版本:

First create a script file and give this file executable permission.

# cd /etc/cron.daily/
# touch /etc/cron.daily/dbbackup-daily.sh
# chmod 755 /etc/cron.daily/dbbackup-daily.sh
# vi /etc/cron.daily/dbbackup-daily.sh

Then copy following lines into file with Shift+Ins

#!/bin/sh
now="$(date +'%d_%m_%Y_%H_%M_%S')"
filename="db_backup_$now".gz
backupfolder="/var/www/vhosts/example.com/httpdocs/backups"
fullpathbackupfile="$backupfolder/$filename"
logfile="$backupfolder/"backup_log_"$(date +'%Y_%m')".txt
echo "mysqldump started at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
mysqldump --user=mydbuser --password=mypass --default-character-set=utf8 mydatabase | gzip > "$fullpathbackupfile"
echo "mysqldump finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
chown myuser "$fullpathbackupfile"
chown myuser "$logfile"
echo "file permission changed" >> "$logfile"
find "$backupfolder" -name db_backup_* -mtime +8 -exec rm {} \;
echo "old files deleted" >> "$logfile"
echo "operation finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
echo "*****************" >> "$logfile"
exit 0

参看:https://stackoverflow.com/a/19682065

 

本文:Linux: Shell脚本备份MySQL数据库, Linux shell script for database backup

Leave a Reply