0%

mysql导出表结构与数据

本文是关于如何将MySQL数据库中某数据库的数据表结构以及表数据导出为.sql文件,以及如何执行.sql文件。

适用于需要简单数据库迁移的读者。

导出数据表

MySQL导出表结构主要是使用mysqldump命令。该命令是在cmd下执行的,而非MySQL命令行中,使用相对路径,会将文件保存在当前目录下。

  1. 导出数据库dbname中全部表结构至db.sql中:

    1
    mysqldump -uroot -p -d dbname >db.sql

  2. 导出数据库dbname中某张表tablename结构至db.sql中:

    1
    mysqldump -uroot -p -d dbname tablename >db.sql

  3. 导出数据库dbname中全部表结构及其数据至db.sql中(不加-d):

    1
    mysqldump -uroot -p dbname >db.sql

  4. 导出数据库dbname中某张表tablename结构及其数据至db.sql中:

    1
    mysqldump -uroot -p dbname tablename >db.sql

导入数据表

当我们拥有一个sql文件的时候,我们就可以直接执行sql脚本来完成任务。

  1. 在cmd下执行命令:需要选择MySQL的sever下的目录,如果目录存在空格,则需要使用双引号,若sql文件中存在use 数据库则不需要指定-D数据库

    1
    "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql" –uroot –p -D dbname < C:\Users\username\Desktop\db.sql

  2. 在MySQL命令行中执行命令:sql文件需要是绝对路径

    1
    2
    3
    source C:\Users\username\Desktop\db.sql
    -- 或者推荐下面这个
    \. C:\Users\username\Desktop\db.sql

在导入数据库的时候,有可能会出现错误MySQL server has gone away。原因一般是操作sql的时间太长,或者插入数据库的数据量太大,一般来说,可以将数据分批插入,或者修改max_allowed_packet参数的配置。

首先查看max_allowed_packet的值,使用show global variables like 'max_allowed_packet'查看对应的值,之后输入语句进行调整,由于db.sql文件太大,本人这里设置为100M:

1
set global max_allowed_packet=1024*1024*100

接下来再读取sql文件导入数据库的时候问题就不大了

------ 本文结束------