tra*_*nte 38 mysql linux shell cron
我尝试了许多用于数据库备份的脚本,但我无法做到.我想每小时备份一次我的数据库.
我将文件添加到"/etc/cron.hourly/"文件夹,将其chmod更改为755,但它没有运行.至少我写了我的伪代码.
如果您能为此操作编写脚本并告诉我应该怎么做,我会很高兴的吗?将此脚本文件添加到/etc/cron.hourly/文件夹后.
date=date(d_m_y_H_M_S)filename="$date".gzmysqldump --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")>/dev/null 2>&1将被添加.tra*_*nte 94
经过数小时和数小时的工作,我创建了如下的解决方案.我为其他可以受益的人复制粘贴.
首先创建一个脚本文件并授予此文件可执行权限.
# 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
Run Code Online (Sandbox Code Playgroud)
然后使用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
Run Code Online (Sandbox Code Playgroud)
编辑:
如果使用InnoDB并且备份需要花费太多时间,则可以添加" single-transaction "参数以防止锁定.所以mysqldump行将是这样的:
mysqldump --user=mydbuser --password=mypass --default-character-set=utf8
--single-transaction mydatabase | gzip > "$fullpathbackupfile"
Run Code Online (Sandbox Code Playgroud)
Pet*_*Bus 31
创建一个类似于此的脚本:
#!/bin/sh -e
location=~/`date +%Y%m%d_%H%M%S`.db
mysqldump -u root --password=<your password> database_name > $location
gzip $location
Run Code Online (Sandbox Code Playgroud)
然后,您可以编辑crontab脚本将要运行的用户:
$> crontab -e
Run Code Online (Sandbox Code Playgroud)
并附上条目
01 * * * * ~/script_path.sh
Run Code Online (Sandbox Code Playgroud)
这将使它在每天每小时的第一分钟运行.
然后你只需要添加你的卷和其他功能,你就可以了.
小智 7
我遇到了同样的问题.但我设法编写一个脚本.希望这会有所帮助.
#!/bin/bash
# Database credentials
user="username"
password="password"
host="localhost"
db_name="dbname"
# Other options
backup_path="/DB/DB_Backup"
date=$(date +"%d-%b-%Y")
# Set default file permissions
umask 177
# Dump database into SQL file
mysqldump --user=$user --password=$password --host=$host $db_name >$backup_path/$db_name-$date.sql
# Delete files older than 30 days
find $backup_path/* -mtime +30 -exec rm {} \;
#DB backup log
echo -e "$(date +'%d-%b-%y %r '):ALERT:Database has been Backuped" >>/var/log/DB_Backup.log
Run Code Online (Sandbox Code Playgroud)