自动备份其实就是定时执行数据导出的操作。所谓天有不测风云,我们辛苦经营的网站数据哪天弄丢了的话结果是非常尴尬的。所以我们应该定时或者不定时的备份数据库,视网站项目情况,可以每隔几分钟、几小时、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 文件内容。
本文为崔凯原创文章,转载无需和我联系,但请注明来自冷暖自知一抹茶ckhttp://www.cksite.cn