Shell脚本是我们写不同类型命令的一种脚本,这些命令在这一个文件中就可以执行。我们也可以逐一敲入命令手动执行。如果我们要使用shell脚本就必须在一开始把这些命令写到一个文本文件中,以后就可以随意反复运行这些命令了。
我首先要在本文带给你的是完整脚本。后面会对该脚本做说明。我假定你已经知道shell scripting、 Mysqldump和crontab。
适用操作系统:任何linux或UNIX。
主脚本(用于备份mysql数据库):
该Shell脚本可以自动备份数据库。只要复制粘贴本脚本到文本编辑器中,输入数据库用户名、密码以及数据库名即可。我备份数据库使用的是mysqlump 命令。后面会对每行脚本命令进行说明。
1. 分别建立目录“backups”和“history”
1 | mkdir -p /var/www/html/var/backups/history |
2. 现在使用你喜欢的编辑软件创建并编辑“backup.sh”
这里我用的是 vi
1 | vi /var/www/html/var/backups/backup .sh |
现在把以下几行命令输入到 backup.sh 文件中:
03 | BACKUP= /var/www/html/var/backups |
10 | echo "----You are In Backup Directory" |
11 | sudo mv *.sql ${BACKUP} /history/ |
13 | echo "----Old Databases are Moved to history folder" |
14 | Now=$( date + "%Y-%m-%d--%H:%M:%S" ) |
16 | Mysqldump --user=${USERNAME} --password=${PASSWORD} --default-character- set =utf8 --single-transaction ${DBNAME} > $File |
17 | echo "----Your Database Backup Successfully Completed" |
脚本说明:
切记,在第8行命令中,在Mysqldump命令后要输入自己的数据库用户名、密码及数据库名。
执行该脚本,首先会进入 /var/www/html/var/backups 目录,然后该脚本会把原有的旧数据库备份移动到 /history 文件夹中,接着根据系统的日期及时间生成一个文件名,在最后 Mysqldump 命令会生成一个“.sql”格式的数据库备份文件。
3. 设置 backup.sh 脚本文件的可执行许可
1 | chmod +x /var/www/html/var/backups/backup .sh |
4. 执行脚本
其他版本:
First create a script file and give this file executable permission.
Then copy following lines into file with Shift+Ins
02 | now= "$(date +'%d_%m_%Y_%H_%M_%S')" |
03 | filename= "db_backup_$now" .gz |
04 | backupfolder= "/var/www/vhosts/example.com/httpdocs/backups" |
05 | fullpathbackupfile= "$backupfolder/$filename" |
06 | logfile= "$backupfolder/" backup_log_ "$(date +'%Y_%m')" .txt |
07 | echo "mysqldump started at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile" |
08 | mysqldump --user=mydbuser --password=mypass --default-character- set =utf8 mydatabase | gzip > "$fullpathbackupfile" |
09 | echo "mysqldump finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile" |
10 | chown myuser "$fullpathbackupfile" |
11 | chown myuser "$logfile" |
12 | echo "file permission changed" >> "$logfile" |
13 | find "$backupfolder" -name db_backup_* -mtime +8 - exec rm {} ; |
14 | echo "old files deleted" >> "$logfile" |
15 | echo "operation finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile" |
16 | echo "*****************" >> "$logfile" |