简介
在生产环境上,为了避免数据的丢失,通常情况下都会定时的对数据库进行备份。而Linux的crontab指令则可以帮助我们实现对数据库定时进行备份。首先我们来简单了解crontab指令,如果你会了请跳到下一个内容mysql备份。
本文章的mysql数据库是安装在docker容器当中,以此为例进行讲解。没有安装到docker容器当中也可以参照参照。
contab定时任务
使用crontab -e来编写我们的定时任务。
0 5 * * 1 [command]
前面的5个数字分别代表分、时、日、月、周,后面的 command为你的执行命令。
假如你需要在每天晚上8点整执行定时任务,那么可以这么写
0 8 * * * [command]
扩展:
crontab -l 可以查看自己的定时任务
crontab -r 删除当前用户的所有定时任务
mysql备份
快速上手
这里我的mysql数据库是docker容器。假如你需要在每天晚上8点整执行定时任务,那么可以这么写。
首先执行命令crontab -e。
0 8 * * * docker exec mysql_container mysqldump -uroot -proot_password database_name > /var/backups/mysql/$(date +%Y%m%d_%H%M%S).sql
mysql_container 为你的数据库容器名
mysqldump 是mysql数据库导出数据的指令
-u 填写root账号
-p 填写root密码
database_name 需要备份的数据库名
/var/backups/mysql/$(date +%Y%m%d_%H%M%S).sql 备份文件,后面是文件名的格式
如果你没什么要求,单纯的只是想要备份,那么上面那个命令就可以帮你进行定时备份。
小坑: mysql备份的时候我使用了docker exec -it mysqldump ... 这样的命令去做bash脚本,因为-i参数是有互动的意思,导致在crontab中执行定时任务的时候,没有输出数据到sql文件当中。所以使用crontab定时的对docker容器进行备份命令的时候不要添加-i参数。
crontab优化
我不建议直接在crontab -e里面写要执行的命令,任务多了就把这个文件写的乱七八招了。
建议把数据库备份的命令写成一个bash脚本。在crontab这里调用就好了
如:建立一个/var/backups/mysql/mysqldump.sh文件,内容如下
docker exec mysql_container mysqldump -uroot -pmypassword database_name > /var/backups/mysql