一尘不染

用于数据库备份的Linux Shell脚本

mysql

我尝试了许多脚本来进行数据库备份,但是我做不到。我想每小时备份一次数据库。
我将文件添加到“ /etc/cron.hourly/”文件夹,将其chmod更改为755,但未运行。至少我写了我的伪代码。

如果您可以为此操作编写脚本并告诉我该怎么办,我将非常高兴。将这个脚本文件添加到/etc/cron.hourly/文件夹之后。

  • 获取当前日期并创建一个变量, 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"将被写入:Backup is created at $("date")
  • 将文件所有者(chown)从根目录更改为“ my_user”。因为我要从“ my_user” FTP帐户打开备份和日志文件。
  • 我不希望每个cron之后都发送电子邮件。>/dev/null 2>&1将被添加。

阅读 222

收藏
2020-05-17

共1个答案

一尘不染

经过数小时的工作,我创建了如下所示的解决方案。我将粘贴复制给其他可以受益的人。

首先创建一个脚本文件并授予该文件可执行权限。

# 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将以下行复制到文件中

#!/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并且备份花费太多时间,则可以添加“
单笔交易 ”参数以防止锁定。因此,mysqldump行将如下所示:

mysqldump --user=mydbuser --password=mypass --default-character-set=utf8
          --single-transaction mydatabase | gzip > "$fullpathbackupfile"
2020-05-17