Skip to content

Debian 8下定时自动备份Mysql数据库

教程内容

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

操作方法

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

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

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

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

3. 编辑/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 "
fi

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

4. 设置crontab定时执行脚本

  1. 编辑crontab
shell
vi /etc/crontab
  1. 写入设置:分钟,小时,日,月,星期,命令。我最迟凌晨5点左右才睡,最早6点起床,因此设置为每天凌晨5:30最合适了。
shell
30 5 * * * root /bak/bakmysql/backup.sh
  1. 重启crontab
shell
/etc/init.d/cron restart
# 提示:[ ok ] Restarting cron (via systemctl): cron.service.
  1. (可选)查看是否设置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

我的已经设置了。

出错记录

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

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

转载请注明出处https://bananaoven.com/articles/125.html | 香蕉微波炉
分享许可方式知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
重大发现:转载注明原文网址的同学刚买了彩票就中奖,刚写完代码就跑通,刚转身就遇到了真爱。