教程内容
Debian下定时自动备份Mysql数据库,把写入的文章等数据备份一份。
操作方法
1. 在服务器下建立三个文件夹
shell
mkdir /bak
mkdir /bak/bakmysql
mkdir /bak/bakmysqlold2. 建立shell脚本,更改文件权限
shell
touch /bak/bakmysql/backup.sh
chmod 755 /bak/bakmysql/backup.sh3. 编辑/bak/bakmysql/backup.sh
内容如下:
- 保存旧的备份
- 备份今天的
- 如果发现七天前的旧备份存在,则删除它。这样保证了只备份7天的数据库内容。
shell
#!/bin/sh
cd /bak/bakmysql
echo "You are in bakmysql directory"
mv bakmysql* /bak/bakmysqlold
echo "Old databases are moved to bakmysqlold folder"
Now=$(date +"%Y-%m-%d")
File=bakmysql-$Now.sql
/opt/mysql/server-5.6/bin/mysqldump -uroot -p'password' db_bbs > $File
echo "Your database backup successfully completed"
SevenDays=$(date -d -7day +"%Y-%m-%d")
if [ -f /bak/bakmysqlold/bakmysql-$SevenDays.sql ]
then
rm -rf /bak/bakmysqlold/bakmysql-$SevenDays.sql
echo "You have delete 7days ago bak file "
else
echo "7days ago bak file not exist "
fidb_bbs改成要备份的数据库,注意mysqldump要用绝对路径,否则会备份成空文件,通过which mysqldump查看绝对路径。
4. 设置crontab定时执行脚本
- 编辑crontab
shell
vi /etc/crontab- 写入设置:分钟,小时,日,月,星期,命令。我最迟凌晨5点左右才睡,最早6点起床,因此设置为每天凌晨5:30最合适了。
shell
30 5 * * * root /bak/bakmysql/backup.sh- 重启crontab
shell
/etc/init.d/cron restart
# 提示:[ ok ] Restarting cron (via systemctl): cron.service.- (可选)查看是否设置crontab为了开机启动
shell
ls /etc/systemd/system/multi-user.target.wants/
# 提示:atd.service cron.service nginx.service php7.0-fpm.service remote-fs.target rsyslog.service ssh.service我的已经设置了。
出错记录
- 发现直接执行.sh脚本可以备份,而crontab自动执行的脚本却是空文件(文件正确地移动和创建,只是内容为空)。
解决:mysqldump命令一定要是绝对路径!可以通过which mysqldump来查看绝对路径,2017.12.12日已经更新操作步骤中的相关内容。



粤公网安备44030602007943号