我们经常有从数据库导出数据的需求,比如:导出当天新增用户数据,导出数据报表等。
其中比较常用的函数有以下三个:
- into dumpfile()
- into outfile()
- load_file()
因为涉及到在服务器上写入文件,所以上述函数能否成功执行受到参数 secure_file_priv 的影响。这个值可以通过下面命令查询。
select @@secure_file_priv;
secure-file-priv的值有三种情况:
secure_file_prive=null //限制mysqld 不允许导入导出
secure_file_priv=/path/ //限制mysqld的导入导出只能发生在默认的/path/目录下
secure_file_priv=’’ //不对mysqld 的导入 导出做限制
由于这个参数不能动态更改,只能在mysql的配置文件中进行修改,然后重启生效。
Mysql 8.0 默认配置文件路径:C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
Mysql重启方法:打开计算机管理>>服务与应用程序>>服务>>mysql>>右键重新启动>>完成重启
如果输入路径不对,则会报如下错误:
The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
1. 查询数据:
select * from game;
2. 导出数据:
select * from game into outfile 'game.sql'; //文件名不能重复
3. 查看导出文件:
4. 删除数据库中的数据:
delete * from game;
5. 还原数据:
load data infile 'game.sql' into table game;
6. 验证是否还原成功:
select * from game;
7. outfile和dumpfile的区别:
outfile 函数可以导出多行,而 dumpfile 只能导出一行数据
outfile 函数在将数据写到文件里时有特殊的格式转换,而 dumpfile 则保持原数据格式
8. 导出为CSV格式:
//将UID小于3的数据导出到game.csv 文件中
SELECT * FROM game where uid < 3 INTO OUTFILE 'game.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\n';