社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

Linux 下如何实现 MySQL 数据库定时自动备份?

马哥Linux运维 • 8 年前 • 969 次点击  

概述:备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程。而对于一些网站、系统来说,数据库就是一切,所以做好数据库的备份是至关重要的!

备份是什么?






为什么要备份?


容灾方案建设


存储介质


光盘 

磁带 

硬盘 

磁盘阵列 

DAS:直接附加存储 

NAS:网络附加存储 

SAN:存储区域网络 

云存储


这里主要以本地磁盘为存储介质讲一下计划任务的添加使用,基本的备份脚本,其它存储介质只是介质的访问方式可能不大一样。

1、查看磁盘空间情况:


既然是定时备份,就要选择一个空间充足的磁盘空间,避免出现因空间不足导致备份失败,数据丢失的恶果! 


存储到当前磁盘这是最简单,却是最不推荐的;服务器有多块硬盘,最好是把备份存放到另一块硬盘上;有条件就选择更好更安全的存储介质;



2、创建备份目录:


上面我们使用命令看出 / home 下空间比较充足,所以可以考虑在 / home 保存备份文件;


cd /home

mkdir backup

cd backup

3、创建备份 Shell 脚本:


注意把以下命令中的 DatabaseName 换为实际的数据库名称; 

当然,你也可以使用其实的命名规则!


vi bkDatabaseName.sh

输入 / 粘贴以下内容:


#!/bin/bash

/usr/local/mysql/bin/mysqldump -uusername -ppassword DatabaseName > /home/backup/DatabaseName_$(date +%Y%m%d_%H%M%S).sql

对备份进行压缩:


#!/bin/bash

/usr/local/mysql/bin/mysqldump -uusername -ppassword DatabaseName | gzip > /home/backup/DatabaseName_$(date +%Y%m%d_%H%M%S).sql.gz

注意: 

把 username 替换为实际的用户名; 

把 password 替换为实际的密码; 

把 DatabaseName 替换为实际的数据库名;

4、添加可执行权限:


chmod u+x bkDatabaseName.sh

添加可执行权限之后先执行一下,看看脚本有没有错误,能不能正常使用;


./bkDatabaseName.sh

5、添加计划任务


检测或安装 crontab

确认 crontab 是否安装: 

执行 crontab 命令如果报 command not found,就表明没有安装


# crontab

-bash: crontab: command not found

如时没有安装 crontab,需要先安装它,具体步骤请参考: 

CentOS 下使用 yum 命令安装计划任务程序 crontab 

使用 rpm 命令从 CentOS 系统盘安装计划任务程序 crontab


添加计划任务

执行命令:


crontab -e

这时就像使用 vi 编辑器一样,可以对计划任务进行编辑。 

输入以下内容并保存:


*/1 * * * * /home/backup/bkDatabaseName.sh

具体是什么意思呢? 

意思是每一分钟执行一次 shell 脚本 “/home/backup/bkDatabaseName.sh”。


例如:


修改 /etc/crontab


#vi /etc/crontab


01   3 * * * root/home/backup/bkDatabaseName.sh


表示每天 3 点钟执行备份


退出编辑页:点击 ESC 推出,然后点击 ":wq"w 写入 write q 推出 quit


例如:在每周一中午 12 点运行一次


vi /etc/crontab 然后: 在最后一行, 0 12 * 1 * root run-parts /home/abckup.sh

6、测试任务是否执行


很简单,我们就执行几次 “ls” 命令,看看一分钟过后文件有没有被创建就可以了!


如果任务执行失败了,可以通过以下命令查看任务日志:


# tail -f /var/log/cron

输出类似如下:


Sep 30 14:01:01 bogon run-parts(/etc/cron.hourly)[2503]: starting 0anacron

Sep 30 14:01:01 bogon run-parts(/etc/cron.hourly)[2512]: finished 0anacron

Sep 30 15:01:01 bogon CROND[3092]: (root) CMD (run-parts /etc/cron.hourly)

Sep 30 15:01:01 bogon run-parts(/etc/cron.hourly)[3092]: starting 0anacron

Sep 30 15:01:02 bogon run-parts(/etc/cron.hourly)[3101]: finished 0anacron

Sep 30 15:50:44 bogon crontab[3598]: (root) BEGIN EDIT (root)

Sep 30 16:01:01 bogon CROND[3705]: (root) CMD (run-parts /etc/cron.hourly)

Sep 30 16:01:01 bogon run-parts(/etc/cron.hourly)[3705]: starting 0anacron

Sep 30 16:01:01 bogon run-parts(/etc/cron.hourly)[3714]: finished 0anacron

Sep 30 16:15:29 bogon crontab[3598]: (root) END EDIT (root)

Crontab 的格式


第 1 列分钟 1~59

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

第 3 列日 1~31

第 4 列月 1~12

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

第 6 列要运行的命令


下面是 crontab 的格式:

分 时 日 月 星期 要运行的命令


这里有 crontab 文件条目的一些例子:


30 21 * * * /usr/local/apache/bin/apachectl restart

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


45 4 1,10,22 * * /usr/local/apache/bin/apachectl restart

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


10 1 * * 6,0 /usr/local/apache/bin/apachectl restart

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


0,30 18-23 * * * /usr/local/apache/bin/apachectl restart

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


0 23 * * 6 /usr/local/apache/bin/apachectl restart

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


0 */1 * * * /usr/local/apache/bin/apachectl restart

每一小时重启 apache


#20160912 修正,感谢 @张琼的指正,之前写错了,*/1 和 * 表示的同样的意思,对于 / 的用法,可以参考另一篇文章 Crontab 中的除号到底怎么用?


0 23-7/1 * * * /usr/local/apache/bin/apachectl restart

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


0 11 4 * mon-wed /usr/local/apache/bin/apachectl restart

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


0 4 1 jan * /usr/local/apache/bin/apachectl restart

一月一号的 4 点重启 apache


文章来源:CU技术社区



————广告时间————

《马哥Linux云计算及架构师》课程,由知名Linux布道师马哥创立,经历了8年的发展,联合阿里巴巴、唯品会、大众点评、腾讯、陆金所等大型互联网一线公司的马哥课程团队的工程师进行深度定制开发,课程采用 Centos7.2系统教学,加入了大量实战案例,授课案例均来自于一线的技术案例。

开课时间:11月06号

课程咨询请长按即可咨询


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/GwZhQJP76x
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/3152
 
969 次点击