我们在维护服务器的时候备份数据库用的什么方式?我们很多朋友应该是用的phpmyadmin直接客户端界面导出数据库。这个方法对于小数据库是没有问题的,如果数据库较大,达到几百兆的时候你导出来的数据库可能有不完整,即便完整的话你无法导入有可能无法导入超时。
当然,我们还可以利用其他的面板自带的数据库备份工具。但是有些时候我们没有这些环境如果导出数据库呢?这里,我们可以介绍用到mysqldump命令,是比较好用的数据库备份导出命令。
我们今天这篇文章就一起学习mysqldump的数据库备份命令。
1、导出单个数据库
mysqldump -u user_name -p db_name > dump-$(date +"%Y%m%d").sql
各项参数:
-u 用于指定数据库用户名,通常是 root,需要具备对目标数据库的读写权限。
-p 指定数据库账号密码。基于安全考量,一般不指定密码,运行命令后以交互方式输入。若要指定密码,在 -p 后输入密码(注意是紧挨着没有空格)。
db_name 备份数据库名称,这种写法不能同时备份多个数据库。如果用空格写了多个名称,则会被视为备份数据库下的表(第一名称是数据库,之后名称表示该数据库下的表名)。
dump-$(date +"%Y%m%d").sql 将数据库导出到文件,这里文件名加了时间戳。
2、导出多个数据库
导出多个数据库用 --databases 参数指定,语法如下。
mysqldump -u user_name -p --databases db1 db2 db3 > dump-$(date +"%Y%m%d").sql
当带了 --databases 和下面介绍的 --all-databases 参数,在转储输出前会写入 CREATE DATABASE 和 USE 语句。这样在恢复数据时,如果没有同名数据库,它会先创建数据库。并在恢复各个数据库时,通过 USE 语句设置默认数据库,以便将数据导入到同一数据库中。
3、导出所有数据库
备份所有数据库使用 --all-databases 参数。
mysqldump -u user_name -p --all-databases > dump-$(date +"%Y%m%d").sql
4、添加定时备份数据库任务
0 0 1 * * /usr/bin/mysqldump --defaults-extra-file=/root/.my.cnf --user=root db_name > /root/dump-$(date +"%Y%m%d").sql
这将每月备份一次数据库,文件存储在 /root 目录下。
5、恢复复原数据库
导入恢复单个数据库:
mysql -u user_name -p db_name < dump-backup.sql
导入恢复单个数据表:
mysql -u user_name -p db_name < dump-table-backup.sql
导入单个数据库或数据表时,目标数据库必须是已存在。否则需要先创建数据库,创建语法如下。
mysqladmin -u user_name -p create db_name
当导入使用 --databases 或 --all-databases 参数导出的数据库文件,则不需要指定目标数据库,它会自动创建数据库。
mysql -u user_name -p < dump-full-backup.sql