为解决mysql数据安全问题,使用linux自带的定时任务执行脚本,脚本调用mysqldump命令备份数据库。

所用到的技术点:

mysqldump命令

crontab定时任务

实现备份脚本

1、 创建备份目录

cd /data/mide/data_bak

mkdir mysql_bak

2、 创建脚本文件

touch autobackup_mysql.sh

3、 编辑脚本文件

vi autobackup_mysql.sh

文件内容如下:

以上脚本目的是调用mysqldump命令备份mide数据库到指定的sql文件,文件名使用了格式化的日期。导出后使用tar命令将文件打包压缩,然后删除sql文件,最终结果如下:

4、 测试脚本

脚本编写后不要直接写定时任务,先测试脚本

./autobackup_mysql.sh

查看生成的结果文件是否正确

5、mysqldump也可以直接生成压缩文件,这里并没有使用而是分开操作了。效果是一样的

实现定时任务

数据库的备份一般都使用定时任务,在夜里系统使用量小的时候自动执行。我们这里使用linux自带的crontab程序编写定时任务。

关于crontab的使用查看补充内容

1、 编写定时任务执行上一步的备份脚本

执行crontab -e

此命令会自动进入vi编辑状态,输入以下内容:

2、 esc退出编辑状态,:wq保存并退出文件

3、 查看任务是否已添加

执行crontab -l

看到刚才输入的内容说明任务添加成功

4、 重启crontab服务即可

5、 为了验证定时任务是否可用成功运行,可用先把定时任务的时间指定在未来几分钟之后,然后等待查看是否执行并生成备份文件,如果没问题再把时间改为凌晨三点

6、 修改完crontab的定时任务需要重启才能生效

7、 确定定时任务是开机自启动的

mysqldump常用于MySQL数据库逻辑备份。

A. 最简单的用法:

mysqldump -uroot -pPassword [database name] > [dump file]

上述命令将指定数据库备份到某dump文件(转储文件)中,比如:

mysqldump -uroot -p123 test > test.dump

生成的test.dump文件中包含建表语句(生成数据库结构哦)和插入数据的insert语句。

如果加上--opt参数则生成的dump文件中稍有不同:

建表语句包含drop table if exists tableName

insert之前包含一个锁表语句lock tables tableName write,insert之后包含unlock tables

C. 跨主机备份

使用下面的命令可以将host1上的sourceDb复制到host2的targetDb,前提是host2主机上已经创建targetDb数据库:

mysqldump --host=host1 --opt sourceDb| mysql --host=host2 -C targetDb

-C指示主机间的数据传输使用数据压缩

%1. 只备份表结构

mysqldump --no-data --databases mydatabase1 mydatabase2 mydatabase3 > test.dump

将只备份表结构。--databases指示主机上要备份的数据库。如果要备份某个MySQL主机上的所有数据库可以使用--all-databases选项,如下:

mysqldump --all-databases > test.dump

E. 从备份文件恢复数据库

mysqldump  [database name] < [backup file name]

更多mysqldump命令的参数和用法可以参考官方文档说明:

cron服务是Linux的内置服务,但它不会开机自动启动。可以用以下命令启动和停止服务:

/sbin/service crond start

/sbin/service crond stop

/sbin/service crond restart

/sbin/service crond reload

以上1-4行分别为启动、停止、重启服务和重新加载配置。

要把cron设为在开机的时候自动启动,在 /etc/rc.d/rc.local 脚本中加入 /sbin/service crond start 即可

查看当前用户的crontab,输入 crontab -l;

编辑crontab,输入 crontab -e

删除crontab,输入 crontab -r

添加任务

0 */1 * * * command

0 */2 * * * command

查询任务是否加了:

crontab -l -u root        #查看root用户

0 */1 * * * command

0 */2 * * * command

时间格式说明:

基本格式 :

*  *  *  *  *  command

分 时 日 月 周 命令

第1列表示分钟1~59 每分钟用*或者 */1表示

第2列表示小时1~23(0表示0点)

第3列表示日期1~31

第4列表示月份1~12

第5列标识号星期0~6(0表示星期天)

第6列要运行的命令

crontab文件的一些例子:

30 21 * * * /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每晚的21:30重启apache。

45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每月1、10、22日的4 : 45重启apache。

10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每周六、周日的1 : 10重启apache。

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart

上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每星期六的11 : 00 pm重启apache。

* */1 * * * /usr/local/etc/rc.d/lighttpd restart

每一小时重启apache

* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart

晚上11点到早上7点之间,每隔一小时重启apache

0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart

每月的4号与每周一到周三的11点重启apache

0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart

一月一号的4点重启apache

如果发现服务器没有安装crontab软件,可以使用以下命令安装(centos环境下):

安装crontab:

[root@CentOS ~]# yum install vixie-cron

[root@CentOS ~]# yum install crontabs

vixie-cron软件包是cron的主程序;

crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。