用于数据库备份的Linux shell脚本 [英] Linux shell script for database backup
问题描述
我尝试了许多脚本进行数据库备份,但我无法做到。我想每小时备份我的数据库。
我将文件添加到/etc/cron.hourly/文件夹,将其chmod更改为755,但它没有运行。
至少我写我的伪代码。
I tried many scripts for database backup but I couldn't make it. I want to backup my database every hour.
I added files to "/etc/cron.hourly/" folder, changed its chmod to 755, but it didn't run.
At least I write my pseudo code.
我会很高兴,如果你能写一个脚本为这个操作,告诉我应该做什么更多?
将此脚本文件添加到 /etc/cron.hourly /
文件夹后。
I would be happy if you can write a script for this operation and tell me what should I do more ?
After adding this script file to /etc/cron.hourly/
folder.
- 获取当前日期并创建一个变量
date = date(d_m_y_H_M_S)
- 为文件名创建一个变量,
filename =$ date.gz
- 以这种方式获取我的数据库转储
mysqldump --user = my_user --password = my_pass --default-character-set = utf8 my_database | gzip> /var/www/vhosts/system/example.com/httpdocs/backups / $(filename)
- 删除文件夹中的所有文件
/var/www/vhosts/system/example.com/httpdocs/backups /
超过8天 - 到文件
/ var / www / vhosts / system / example.com / httpdocs / backup_log.txt
,此文本将被写为:date)
- 将文件所有者(chown)从root更改为my_user。因为我要打开my_user
- 我不想在每个cron之后发送电子邮件。
> / dev / null 2>& 1
- Get current date and create a variable,
date=date(d_m_y_H_M_S)
- Create a variable for the file name,
filename="$date".gz
- Get the dump of my database like this
mysqldump --user=my_user --password=my_pass --default-character-set=utf8 my_database | gzip > "/var/www/vhosts/system/example.com/httpdocs/backups/$("filename")
- Delete all files in the folder
/var/www/vhosts/system/example.com/httpdocs/backups/
that are older than 8 days - To the file
"/var/www/vhosts/system/example.com/httpdocs/backup_log.txt"
, this text will be written:Backup is created at $("date")
- Change the file owners (chown) from root to "my_user". Because I want to open the backup and log files from the "my_user" FTP account.
- I don't want an email after each cron.
>/dev/null 2>&1
will be added.
推荐答案
首先创建一个脚本文件并赋予此文件可执行权限。
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
然后使用Shift + Ins将以下行复制到文件中
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
编辑:
使用InnoDB和备份需要的时间太多,您可以添加单一事务< a>参数以防止锁定。所以mysqldump行将是这样:
If you use InnoDB and backup takes too much time, you can add "single-transaction" argument to prevent locking. So mysqldump line will be like this:
mysqldump --user=mydbuser --password=mypass --default-character-set=utf8
--single-transaction mydatabase | gzip > "$fullpathbackupfile"
这篇关于用于数据库备份的Linux shell脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!