MySQL如何实现高效导入导出
MySQL在本身有提供高效的导入导出文件的服务,当然在这里指的并不是把结果转储成SQL脚本,在平时把查询的结果过导出成CSV文件的就是一种,在这里 简单的说一说如何在MySQL中正确的使查询结果导入导出成文件及用文件快速导入,首先MySQL查询结果的导出可以借助于各种客户端工具来快速时间,如Navicat等等,或者是自身的mysql二进制文件来把结果导出而其中在MySQL下最为高效的就是自身的SELECT ··· INTO OUTFILE的方式导出,在使用时很简单,如下把查询的结果导成CSV文件
SELECT * FROM book_tbl INTO OUTFILE '/tmp/book_tbl.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
如此指定分隔符及路径就可以把查询结果导出成各种文件,不过需要注意的是在使用这一种方法需要在MySQL中开启对文件写入的相关目录权限,一般MySQL常规部署后都是用mysql用户来启动MySQL那么在导出时需要该目录是在mysql用户下可以写入的权限一般可以导出在Unix系统下可以导出到/tmp目录,其中可以通过设置my.cnf中的secure_file_priv来设置允许导出到服务器本地下,要注意的是这个变量不支持动态修改,所以在添加修改后需要重启MySQL,如果在设置时没有指定路径则是允许到任意路径,如果 指定的值是null则是不允许导出,缺省就是这个值,平时在使用的时候建议指定导出目录,如指定在/tmp目录下
secure_file_priv = /tmp
当然使用这种办法导出的文件也是在服务器上,如果是需要导出到客户端本地则要使用相应的客户端工具,而在导入时则可以使用LOAD DATA INFILE来从文件中导入MySQL中,如下把服务器下的CSV导入事先建好的表中
LOAD DATA INFILE '/tmp/book_tbl.csv' INTO TABLE book_tbl_file FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
同SELECT …… INTO OUTFILE的方式一样可以根据不同的文件定义不同的文件分隔符来用文件导入数据库且该文件MySQL有权限读取。