文章目录

一、教程内容

Debian下定时自动备份Mysql数据库,把写入的文章等数据备份一份。

二、操作方法

1、在服务器下建立三个文件夹

mkdir /bak
mkdir /bak/bakmysql
mkdir /bak/bakmysqlold

2、建立shell脚本,更改文件权限

touch /bak/bakmysql/backup.sh
chmod 755 /bak/bakmysql/backup.sh

3、编辑/bak/bakmysql/backup.sh,内容如下:

(1)保存旧的备份

(2)备份今天的

(3)如果发现七天前的旧备份存在,则删除它。这样保证了只备份7天的数据库内容。

#!/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 "
fi

橙色部分改成要备份的数据库,注意mysqldump要用绝对路径,否则会备份成空文件,通过which mysqldump查看绝对路径。

4、设置crontab定时执行脚本

【第一步】编辑crontab

vi /etc/crontab

【第二步】写入设置:分钟,小时,日,月,星期,命令。我最迟凌晨5点左右才睡,最早6点起床,因此设置为每天凌晨5:30最合适了。

30 5 * * * root /bak/bakmysql/backup.sh

【第三步】重启crontab

/etc/init.d/cron restart
提示:[ ok ] Restarting cron (via systemctl): cron.service.

【可选步骤】 查看是否设置crontab为了开机启动:

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

我的已经设置了。

三、出错记录

1、发现直接执行.sh脚本可以备份,而crontab自动执行的脚本却是空文件(文件正确地移动和创建,只是内容为空)。

解决:mysqldump命令一定要是绝对路径!可以通过which mysqldump来查看绝对路径,2017.12.12日已经更新操作步骤中的相关内容。


转载请注明出处http://www.bewindoweb.com/125.html | 三颗豆子
分享许可方式知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
重大发现:转载注明原文网址的同学刚买了彩票就中奖,刚写完代码就跑通,刚转身就遇到了真爱。
你可能还会喜欢
具体问题具体杠