mysqldump定时备份mysql数据库
命令行下直接运行备份
mysqldump工具是一个用于快速备份小型mysql数据库的工具,可以把数据库中的数据以sql、xml等格式转储到文件中,然后再进行恢复或者导入其他数据库的操作。
mysqldump通常有这三种用法:
1 | 备份某一个数据库(或其中的某个、多个表) |
正常来说,mysqldump在使用的时候会用到这些参数:
- –add-drop-database:在每个CREATE DATABASE statement前面添加DROP DATABASE statement,这样在把备份数据导入mysql的时候,会先删除重名的表再导入数据
- –add-drop-table:跟上面一样的作用
- –all-databases,-A:备份全部的数据库以及全部的表
- –quick:在转储数据库的时候,添加了这个参数,导出时就会逐个表逐行导出,而不是全部导出到内存里面,为了防止导出的时候使用太多内存,通常会添加此参数
- –no-data:不导出数据,只导出结构
还有一些重要参数是连接数据库的参数,主要有:
- –host,-P,数据库连接的端口
- –host,-h,数据库连接的主机地址,比如ip,或者localhost
- –socket,-S,如果不适用主机+端口号连接,可以使用socker file连接mysql
- –user,-u,连接数据库的用户名,注意此用户名应当与要导出的内容有相应的权限
- –password,-p,密码
因此在命令行下,如果是对当前主机上的mysql进行dump备份,那么运行如下的命令就可以:
1 | mysqldump -u root -p --quick -A > database.sql |
将会要求输入密码。
运行定时备份任务
免密码输入
如果要定时备份,那么情况发生了一些变化,首先就是没法每次都手动输入密码了,但是在命令中直接输入密码又是不安全的,这个时候我们需要通过一个文件来把用户名和密码告诉mysqldump。
方法很简单,如果你登录的是linux的root用户,就在/root/
文件夹下建立一个文件.my.cnf
,如果是其他用户,就在/home/用户名/
下面建立一个文件.my.cnf
,然后填写如下内容:
1 | [client] |
然后就可以不输入用户名与密码进行备份了,备份语句变成了:
1 | mysqldump --quick -A > database.sql |
备份到压缩文件中
通常备份下来的sql文件是文本文件,大小很大,可以通过压缩来节省存储空间,直接使用gzip即可,命令是:
1 | mysqldump --quick -A | gzip > database.sql.gz |
crontab定时备份
最终我们要实现的是定时备份,那么就还有一个需求,如果输出的文件名是同一个,就会导致每次备份都覆盖了之前的文件,我们希望在输出的文件前面添加一个时间,这样可以区分不同的备份,这样最好就写一个sh来实现了。新建一个backup_all_db.sh文件,在其中写入:
1 | filename=`date +%Y%m%d-%H%M%S` |
这样备份的文件名称就变成了下面这样,文件名中会包含具体备份的时间,精确到分钟:
1 | 一段前缀-20220607-220000.sql.gz |
然后就可以通过crontab定时运行了:
1 | crontab -e |
添加以下内容:
1 | 0 3 * * * bash /your_path/backup_all_db.sh |
这样就实现了每天凌晨3点自动备份一次数据库。
记得定期清理那些不需要的备份文件,不让备份文件会不断增加。
mysqldump定时备份mysql数据库