用mysqldump导出、备份、迁移数据库

Data Export and Migration with mysqldump

mysqldump是MySQL官方提供的一个数据库备份工具,利用它可以很方便地进行数据库的导出、备份和迁移。官方文档请查看这里,本文将对mysqldump的使用做一个简单的总结。

MySQL数据库

适用场景

数据库备份主要有两种方式:物理备份、逻辑备份。它们分别适用不同的场景,以下是这两种备份方式的对比:

  官方工具 备份方式 优点 缺点
物理备份 mysqlbackup 复制实际的数据存储文件 速度较快
适合较大数据量
不够灵活
逻辑备份 mysqldump 将数据库结构和数据导出 速度较慢
适合少量数据
使用灵活

根据上面表格的对比,我们可以看出mysqldump适合的使用场景。它主要适用于数据量不大(几十GB以内)、对备份时间要求不高的场景,同时还可以方便地对备份的数据进行编辑和修改(例如修改表的定义等)。

使用

如下是一个简单的数据库导出、备份和迁移的流程图:

graph TD start([开始]) srcDb[(源数据库)] export[使用mysqldump命令<br>将数据库从源数据库导出] modify["对导出的内容做一些编辑和修改<br>(可选)"] store[存储] migrate[迁移] dstDb[(目标数据库)] import[导入目标数据库] finish([结束]) start-->export-->modify export--获取数据-->srcDb--返回数据-->export modify-->store-->finish modify-->migrate-->import-->finish import--存入数据-->dstDb--返回存入结果-->import

首先,我们需要用到mysqldump工具将源数据库中的结构以及数据进行导出。导出以后,如果还需要对其进行调整,可以直接编辑导出的文件。

接下来,如果仅仅需要将导出的数据留作备份,那么就将导出的文件存储好即可。

如果需要做数据库迁移,那么就可以将导出的文件再导入到目标数据库中,这一操作可以使用mysql命令。

下面我们先来看一下基础的使用方式,然后后面再介绍具体的使用示例

导出

mysqldump提供的最基础的一个功能就是导出数据库结构以及数据,最常用的导出操作有三种:

  1. 导出单个数据库中的多张表
  2. 导出多个数据库
  3. 导出全部数据库

导出单个库中的多张表

实现这个操作的命令如下:

mysqldump [options] db_name [tbl_name ...]

其中 [options] 是可选的参数db_name 是数据库的名称,[tbl_name ...] 是表的名称,多张表名之间用空格分隔。下面是一些示例:

导出 db 库中的 table 表:

mysqldump [options] db table

导出 db 库中的 table1table2table3 三张表:

mysqldump [options] db table1 table2 table3

导出多个库

实现这个操作的命令如下:

mysqldump [options] --databases db_name ...

其中 [options] 是可选的参数--databases 表示导出多个库,db_name ... 是数据库的名称,多个库名之间用空格分隔。下面是一些示例:

导出 db 库:

mysqldump [options] --databases db

导出 db1db2db3 三个库:

mysqldump [options] --databases db1 db2 db3

这里可以看出,如果不加 --databases 参数,mysqldump会把 db2db3 当做 db1 数据库中的表名,因此导出多个库时一定要加 --databases 参数

导出全部库

实现这个操作的命令如下:

mysqldump [options] --all-databases

其中 [options] 是可选的参数--all-databases 表示导出全部数据库。

但是这里需要注意,这个命令实际并不会导出所有的库,它默认会忽略某些数据库(例如performance_schema、sys数据库)。如果确实需要导出这些数据库,可以使用导出多个库中的方法,用 --databases 参数来指定要导出的数据库。

将导出的内容存入sql文件

前面介绍的命令只会将导出的内容打印在控制台,为了保存这些内容,我们需要将其写入sql文件中。

大多数情况,我们只需要将导出的内容重定向到一个sql文件即可:

mysqldump [options] > dump.sql

该命令会将导出的内容写入到 dump.sql 这个文件中。

注意在Windows的PowerShell中使用这个命令时,会导出成一个UTF-16字符集的sql文件。当需要将这个文件导入到目标数据库时,可能会出现无法正确加载的情况。为了避免这个问题,可以使用 --result-file 参数来导出:

mysqldump [options] --result-file=dump.sql

导入

将数据导入目标数据库使用的是mysql命令。

如果已经有了sql文件,那么可以用如下命令将sql文件中的数据导入目标数据库:

mysql [options] < dump.sql

该命令会将 dump.sql 中的内容导入到数据库中,其中 [options] 是mysql命令的参数,具体请参考官方文档

如果没有sql文件,那么也可以直接结合mysqldump命令和mysql命令,将源数据库的数据迁移到目标数据库:

mysqldump [mysqldump-options] --host=<源数据库地址> | mysql [mysql-options] --host=<目标数据库地址>

参数

了解了mysqldump的基础使用,我们再来看一下它的命令参数,下表是mysqldump的一些常用参数:

参数名 示例 简写 功能
--host --host=host_name -h host_name 数据库的主机名
默认值:localhost
--port --port=port_num -P port_num 数据库连接端口
默认值:3306
--user --user=user_name -u user_name 访问用户名
--password --password[=password] -p[password]
注意中间没有空格
访问密码
[] 及其中的内容是可选的。
如果选项后面不输入密码,
会在执行命令后提示用户输入密码
--all-databases   -A 导出全部数据库
--databases --databases db_name ... -B 导出多个数据库
--ignore-table --ignore-table=db_name.tbl_name   导出时忽略某些表
必须同时用库名和表名来指定。
如果需要忽略多张表,
可以多次使用该参数
--no-data   -d 不导出数据,只导出表结构
--hex-blob     将二进制数据以十六进制形式导出
--help   -? 打印帮助信息
--version   -V 打印版本信息

以上参数的详细信息以及其他不常用参数的使用请参考官方文档

使用示例

将全部数据库的结构和数据导出到sql文件中:

mysqldump -h host_name -P port_num -u user_name -ppassword -A > dump_file.sql

db1db2db3 三个数据库的结构和数据导出到sql文件中:

mysqldump -h host_name -P port_num -u user_name -ppassword -B db1 db2 db3 > dump_file.sql

db 数据库的结构和数据导出到sql文件中,除了 table1table2 表:

mysqldump -h host_name -P port_num -u user_name -ppassword -B db --ignore-table=table1 --ignore-table=table2 > dump_file.sql

db 数据库的结构导出到sql文件中,不导出数据:

mysqldump -h host_name -P port_num -u user_name -ppassword -B db --no-data > dump_file.sql

 

 

文章评论
${fromAuthor ? '郄正元' : '游客'} 作者 ${gmtCreate}
${content}
${subList.length}
发表评论
${commentToArticle ? '' : parentContent}
字数:0/${maxCommentLength}
该邮箱地址仅用于接收其他用户的回复提醒,不会泄露