mysql + crontab定时数据库备份

摘要:在生产环境中什么最重要?如果我们服务器的硬件坏了可以维修或者换新, 软件问题可以修复或重新安装, 但是如果数据没了呢?就问你怕不怕? 所以, 为了在数据丢失之后能够恢复数据, 我们就需要定期的备份数据。

在生产环境中我们数据库可能会遭遇各种各样的不测从而导致数据丢失, 所以为了保证数据丢失后能够有效的恢复数据,我们需要备份数据库。这里用到的是mysql + crontab定时备份数据库。

crontab的用法和定义:https://baike.baidu.com/item/crontab/8819388

如果没有crontab工具先安装下

[root@host ~]# yum -y install vixie-cron
[root@host ~]# yum -y install crontabs

原理大致是:mysqldump工具备份的语句,写入在一个shell文件中,对shell加一个定时任务。


1、创建备份目录

[root@iZ2ze3bc56k6c6h3fil2zgZ /]# cd /home/
[root@iZ2ze3bc56k6c6h3fil2zgZ home]# mkdir mysql_backup
[root@iZ2ze3bc56k6c6h3fil2zgZ home]# cd mysql_backup/

2、创建备份数据库shell脚本

[root@iZ2ze3bc56k6c6h3fil2zgZ mysql_backup]# vim mysql_backup.sh

3、编写内容后保存退出,记得对这个shell脚本增加可执行权限

#!/bin/bash

mysql_backup_path=/home/mysql_backup/`date +%Y-%m-%d`;

mkdir -p $mysql_backup_path;
chmod 500 $mysql_backup_path;

mysqldump -uxxxxxx -pxxxxxx dbname | gzip > $mysql_backup_path'/mysql_backup_'`date +%Y-%m-%d`.sql.gz

4、执行下这个mysql_backip.sh文件,看看是否可以备份成功

[root@iZ2ze3bc56k6c6h3fil2zgZ mysql_backup]# ./mysql_backup.sh 
mysqldump: [Warning] Using a password on the command line interface can be insecure.

有一个wanning,意思是在命令行使用密码可能不安全,其实这样并不影响导出和备份,也会导出成功。

[root@iZ2ze3bc56k6c6h3fil2zgZ mysql_backup]# ll
total 8
dr-x------ 2 root root 4096 Jan 18 10:57 2019-01-18
-rwx------ 1 root root  349 Jan 18 10:56 mysql_backup.sh
[root@iZ2ze3bc56k6c6h3fil2zgZ mysql_backup]# cd 2019-01-18/
[root@iZ2ze3bc56k6c6h3fil2zgZ 2019-01-18]# ll
total 28
-rw-r--r-- 1 root root 26720 Jan 18 10:57 mysql_backup_2019-01-18.sql.gz

但是既然有wanning我们就来解决下吧。【PS:如果没有警告报错,直接进行第5步即可】

打开mysql的官方文档:https://dev.mysql.com/doc/refman/5.7/en/password-security-user.html

翻了下文档大致意思是:

当您运行客户端程序以连接到MySQL服务器时,不建议以将其公开给其他用户发现的方式指定您的密码。此处列出了运行客户端程序时可用于指定密码的方法,以及每种方法的风险评估。简而言之,最安全的方法是让客户端程序提示输入密码或在受适当保护的选项文件中指定密码。以这种方式输入密码比在命令行中指定密码更安全,因为其他用户看不到密码。但是,这种输入密码的方法仅适用于以交互方式运行的程序。如果要从非交互式运行的脚本调用客户端,则无法从键盘输入密码。在某些系统上,您甚至可能会发现脚本的第一行被读取并被解释(错误地)作为您的密码。

找到问题所在,解决方案:

将密码存储在选项文件中。找到你的my.cnf文件中的[client]部分添加你的密码,点击保存退出,这里修改完后没有必要重启MySQL服务

[client]
password=xxxxxx

然后编辑mysql_backup.sh文件,根据官网的文档提示,将刚才的导出语句替换为这样,点击保存退出

#!/bin/bash
.
.
.
mysqldump --defaults-file=/etc/my.cnf dbname | gzip > $mysql_backup_path'/mysql_backup_'`date +%Y-%m-%d`.sql.gz

然后再来执行下这个mysql_backip.sh文件,报错解决

[root@iZ2ze3bc56k6c6h3fil2zgZ mysql_backup]# ./mysql_backup.sh 
[root@iZ2ze3bc56k6c6h3fil2zgZ mysql_backup]#

我的MySQL版本是5.7的,后来网上翻了一波,说的是MySQL5.6不允许直接在mysqldump命令里面输入用户名、密码执行导出,但是允许在my.conf里面直接配置好mysqldump的用户密码,在执行mysqldump命令的时候无需显示输入用户密码了。看见这个我还找了一个MySQL5.5版本的试了下,确实MySQL5.5版本是可以支持命令里面输入用户名,密码导出的。

不管怎么样,这样测试后导出成功,而且没有报错,这样就大功告成了,直接下一步

5、查看导出目标文件夹,导出数据正常,那就是证明这个shell没有问题

[root@iZ2ze3bc56k6c6h3fil2zgZ mysql_backup]# ll
total 8
dr-x------ 2 root root 4096 Jan 18 11:02 2019-01-18
-rwx------ 1 root root  248 Jan 18 11:02 mysql_backup.sh
[root@iZ2ze3bc56k6c6h3fil2zgZ mysql_backup]# cd 2019-01-18/
[root@iZ2ze3bc56k6c6h3fil2zgZ 2019-01-18]# ll
total 28
-rw-r--r-- 1 root root  8741 Jan 18 11:02 mysql_backup_2019-01-18.sql.gz

6、对这个shell脚本增加一个定时任务,每天凌晨1点定时备份下数据库

[root@iZ2ze3bc56k6c6h3fil2zgZ mysql_backup]# crontab -e
0 1 * * * /home/mysql_backup/mysql_backup.sh > /dev/null 2>&1

如果想对crontab有更多的了解也可以Google、百度下...

结束语:感谢您对本网站文章的浏览,欢迎您的分享和转载,但转载请说明文章出处。
Top