自动备份MySQL数据库

        自动备份其实就是定时执行数据导出的操作。所谓天有不测风云,我们辛苦经营的网站数据哪天弄丢了的话结果是非常尴尬的。所以我们应该定时或者不定时的备份数据库,视网站项目情况,可以每隔几分钟、几小时、1天会几天备份一次数据库。


1、创建数据库

CREATE DATABASE demo;

2、选择数据库

use demo;

3、新建表

CREATE TABLE IF NOT EXISTS `runoob_tbl`(
	   `runoob_id` INT UNSIGNED AUTO_INCREMENT,
	   `runoob_title` VARCHAR(100) NOT NULL,
	   `runoob_author` VARCHAR(40) NOT NULL,
	   `submission_date` DATE,
	   PRIMARY KEY ( `runoob_id` )
	)ENGINE=InnoDB DEFAULT CHARSET=utf8;

4、插入数据

INSERT INTO runoob_tbl (runoob_title, runoob_author, submission_date) VALUES ("学习 PHP", "菜鸟教程", NOW());
INSERT INTO runoob_tbl (runoob_title, runoob_author, submission_date) VALUES ("学习 PHP2", "菜鸟教程2", NOW());
INSERT INTO runoob_tbl (runoob_title, runoob_author, submission_date) VALUES ("学习 PHP3", "菜鸟教程3", NOW());



5、新写一段脚本 mysqlback.sh:

[root@localhost /]# vim mysqlback.sh

###编辑内容


#!/bin/bash
day1=`date -d '-1 days' +%Y%m%d`
day3=`date -d '-3 days' +%Y%m%d`
db1=/db-$day1.sql
db3=/db-$day3.sql
if [ -f $db3 ]; then
    rm -f $db3
fi
/usr/local/mysql/bin/mysqldump -uroot -p123456  demo > $db1

以上脚本的意思是执行导出数据库,导出的文件名按日期格式命名,如果发现sql文件名是3天前的,则删除该文件,即删除3天前的备份文件,这样也可以节省空间。



这里,为了方便测试,可以简便的修改上述脚本为:

#!/bin/bash
day1=`date -d "1 minute ago" +"%Y-%m-%d"`
day3=`date -d "3 minute ago" +"%Y-%m-%d"`
db1=/db-$day1.sql
db3=/db-$day3.sql
if [ -f $db3 ]; then
    rm -f $db3
fi
/usr/local/mysql/bin/mysqldump -uroot -p123456  demo > $db1

        这样的话,生成的脚本其实只生成了 db-2019-01-31.sql 文件,直接覆盖 该文件,我们可以实时的新插入一条数据,以此来简要的查看是否成功备份了数据库。


6、设置为可执行权限:

[root@localhost /]# chmod +x mysqlback.sh

7、最后我们使用crontab来定时执行脚本。

[root@localhost /]# crontab -e

####编辑内容:
*/1 * * * *  /mysqlback.sh >> /dev/null 2>&1

8、重新启动定时任务

[root@localhost home]# systemctl restart crond.service  
[root@localhost home]# systemctl status crond.service

9、查看定时任务

[root@localhost home]# cat /var/spool/cron/root

10、查看Crontab的日志信息

[root@localhost home]# tail -f /var/log/cron
Jan 31 18:20:01 localhost CROND[4677]: (root) CMD (/mysqlback.sh >> /dev/null 2>&1)
Jan 31 18:21:01 localhost CROND[4709]: (root) CMD (/mysqlback.sh >> /dev/null 2>&1)
Jan 31 18:22:01 localhost CROND[4773]: (root) CMD (/mysqlback.sh >> /dev/null 2>&1)

11、当执行一次之后,我们可以往表里新添加一条数据

INSERT INTO runoob_tbl (runoob_title, runoob_author, submission_date) VALUES ("学习 PHP4", "菜鸟教程4", NOW());


之后,再查看  上述  $db1 文件,即生成的该日期 db-2019-01-31.sql 文件内容。

冷暖自知一抹茶ck

冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论