自动备份MySQL数据库

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

1、创建数据库

1
CREATE DATABASE demo;

2、选择数据库

1
use demo;

3、新建表

1
2
3
4
5
6
7
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、插入数据

1
2
3
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[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天前的备份文件,这样也可以节省空间。

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

1
2
3
4
5
6
7
8
9
#!/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来定时执行脚本。

1
2
3
4
[root@localhost /]# crontab -e
####编辑内容:
*/1 * * * *  /mysqlback.sh >> /dev/null 2>&1

8、重新启动定时任务

1
2
[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的日志信息

1
2
3
4
[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 文件内容。

1548934043577046

 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

未经允许不得转载:小林博客 www.vvso.cn小林博客 » 自动备份MySQL数据库
分享到: 更多 (0)

评论 抢沙发

切换注册

登录

忘记密码 ?

切换登录

注册