mysqldump定时备份mysql数据库

mysqldump定时备份mysql数据库

命令行下直接运行备份

mysqldump工具是一个用于快速备份小型mysql数据库的工具,可以把数据库中的数据以sql、xml等格式转储到文件中,然后再进行恢复或者导入其他数据库的操作。

mysqldump通常有这三种用法:

1
2
3
4
5
6
# 备份某一个数据库(或其中的某个、多个表)
mysqldump [options] db_name [tbl_name ...]
# 备份多个数据库
mysqldump [options] --databases db_name ...
# 备份全部数据库
mysqldump [options] --all-databases

正常来说,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
2
3
[client]
user = 你的mysql账号
password = mysql密码

然后就可以不输入用户名与密码进行备份了,备份语句变成了:

1
mysqldump --quick -A > database.sql

备份到压缩文件中

通常备份下来的sql文件是文本文件,大小很大,可以通过压缩来节省存储空间,直接使用gzip即可,命令是:

1
mysqldump --quick -A | gzip > database.sql.gz

crontab定时备份

最终我们要实现的是定时备份,那么就还有一个需求,如果输出的文件名是同一个,就会导致每次备份都覆盖了之前的文件,我们希望在输出的文件前面添加一个时间,这样可以区分不同的备份,这样最好就写一个sh来实现了。新建一个backup_all_db.sh文件,在其中写入:

1
2
3
filename=`date +%Y%m%d-%H%M%S`
prefix="一段前缀"
/usr/local/mysql/bin/mysqldump --quick -A | gzip > /your_path/$prefix-$filename.sql.gz

这样备份的文件名称就变成了下面这样,文件名中会包含具体备份的时间,精确到分钟:

1
一段前缀-20220607-220000.sql.gz

然后就可以通过crontab定时运行了:

1
crontab -e

添加以下内容:

1
0 3 * * * bash /your_path/backup_all_db.sh

这样就实现了每天凌晨3点自动备份一次数据库。

记得定期清理那些不需要的备份文件,不让备份文件会不断增加。

作者

Haoran

发布于

2022-06-07

更新于

2022-06-07

许可协议

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×