数据导出

Navicat里面导出数据表

导出全部表

只是导出这个数据库里面的全部表,sql脚本里面没有写create 数据库,导入的时候都是要新建数据库

右键数据库——转储SQL文件

导出单表

打开这张表,或者右键这张表,有个导出
image.png

命令行导出SQL脚本(全备)

我的电脑把mysql下的bin目录设置为了环境变量,可以直接在cmd里面输入

mysqldump -u 用户名 -p 数据库名 [表名] [>导出文件路径] 导出的sql脚本包括结构和数据 多个数据库导出可以用空格隔开

image.png

SQL语句导出数据到文件

  1. select * from students
  2. into outfile 'D:\\mysql\\database\\students.csv' #导出路径,双反斜杠,不能转义
  3. [character set 'gbk'] #设置编码
  4. [fields terminated by ','] #文件模板用逗号分隔数据,这里的值是字符串
  5. [enclosed by '"'] #很多数据源的开始结尾都带有双引号,这个就是无视双引号,这里填的是字符
  6. [lines terminated by '\n'] #换行的模板是\n转义,这里不能双反斜杠,这里要转义

into outfile:导出路径,要用双反斜杠。没有指定目录,默认的目录就在mysql安装目录下的data文件夹下面 character set:设置编码,字符串,关于编码字符串正确的写法,用Navicat鼠标新建数据库,有编码选择,选项里面怎么写的就怎么写。excel用的是gbk编码,如果用utf8,乱码 fields terminated by:数据的模板,表示列之间的数据用什么字符串隔开隔开,一般用逗号,一般都能识别,这里的值是一个字符串 enclosed by:无视某些符号,这里填的是字符 lines terminated by:换行的模板,用什么字符串换行

添加表头
因为into outfile只是导出数据,并不会导出表结构,所以没有表头
用以下的写法可以导出数据的情况下还有表头

  1. select * from (select 'id','姓名','性别','生日','成绩' union select std_id,std_name,std_sexid,std_birthday,std_score from students) as S
  2. into outfile 'D:\\mysql\\database\\students2.csv'
  3. character set 'gbk'
  4. fields terminated by ','
  5. enclosed by '"'
  6. lines terminated by '\n'

思路:通过union把两个查询的结果连接起来,比如A表查出来3条数据,B表查出来8条数据,用union把这两个select连接起来,最后就是11条数据。 select ‘id’,’姓名’,’性别’,’生日’,’成绩’ 没有from,查的全是字符串,能查出来一行 后面再查学生表,把每一个字段单独写出来,和上面的纯查字符串一一对应。两个查询结果叠加起来称为一个新的查询结果,也可以算作一个临时的表,一定要给这个表取个别名。然后select这个临时表,最后导出的结果,第一行就是表头

可能会报以下错误
image.png
通过报错的提示可以发现是由于secure-file-priv变量的设置所引起的,查看该变量的设置
image.png
说明

  1. secure_file_prive=null 限制mysqld 不允许导入导出
  2. secure_file_priv=/var/lib/mysql-files/ 限制mysqld的导入导出只能发生在/var/lib/mysql-files/目录下
  3. secure_file_priv=’ ‘ 不对mysqld的导入导出做限制

解决办法:

windows下在mysql的安装目录的my.ini文件 [mysqld]节点 下添加secure_file_priv='',然后重启mysql服务。我的电脑右键——管理——服务和应用程序——服务

linux下 在 /etc/my.cnf中添加secure_file_priv=''

数据导入

Navicat里面导入数据

选择数据表——右键

SQL语句本地数据文件导入

从本地文件把数据导入数据库,据说比insert快得多

  1. load data local infile 'D:\\mysql\\database\\students2.csv' #数据文件路径
  2. [ignore] into table new_students #这个表结构需要自己建立
  3. [character set 'gbk'] #源数据是什么编码,导入数据库表就要用什么编码
  4. [fields terminated by ',']
  5. [enclosed by '"']
  6. [lines terminated by '\n' ] #这里不能双反斜杠,这里要转义
  7. [ignore 1 lines] #忽略第一行,有时候第一样是表头,插入数据时不能把源数据的表头插入了

ignore:忽略插入的报错,比如有些主键只能是唯一值,但是插入的数据重复了,会报错。不加ignore就会从报错这里开始停止导入数据,加了就忽略报错的这条数据,继续插入下面的数据

执行会报的错误:
涉及到数据库安全的问题,本地导入文件的参数没有打开。
image.png
查询到本地文件导入是关着的
image.png
解决办法:

windows下在mysql的安装目录的my.ini文件 [mysqld]节点 下添加local_infile=1,然后重启mysql服务。我的电脑右键——管理——服务和应用程序——服务

成功导入
image.pngimage.png

命令行导入SQL脚本

  1. 先在命令行登录mysql
  2. 然后还要选择使用哪个数据库,没有就自己建立一个
  3. 执行sql脚本source 文件路径

image.png

参考

浅谈Mysql数据库的备份方案