自动备份其实就是定时执行数据导出的操作。所谓天有不测风云,我们辛苦经营的网站数据哪天弄丢了的话结果是非常尴尬的。所以我们应该定时或者不定时的备份数据库,视网站项目情况,可以每隔几分钟、几小时、1天会几天备份一次数据库。
1、创建数据库
1 | CREATE DATABASE demo; |
2、选择数据库
1 | use demo; |
3、新建表
1234567 | 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、插入数据
123 | 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:
1234567891011121314 | [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天前的备份文件,这样也可以节省空间。
这里,为了方便测试,可以简便的修改上述脚本为:
123456789 | #!/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、设置为可执行权限:
1 | [root@localhost /] # chmod +x mysqlback.sh |
7、最后我们使用crontab来定时执行脚本。
1234 | [root@localhost /] # crontab -e ####编辑内容: * /1 * * * * /mysqlback .sh >> /dev/null 2>&1 |
8、重新启动定时任务
12 | [root@localhost home] # systemctl restart crond.service [root@localhost home] # systemctl status crond.service |
9、查看定时任务
1 | [root@localhost home] # cat /var/spool/cron/root |
10、查看Crontab的日志信息
1234 | [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、当执行一次之后,我们可以往表里新添加一条数据
1 | INSERT INTO runoob_tbl (runoob_title, runoob_author, submission_date) VALUES ( "学习 PHP4" , "菜鸟教程4" , NOW()); |
之后,再查看 上述 $db1 文件,即生成的该日期 db-2019-01-31.sql 文件内容。