MySQL太棒了!我目前正在参与主要的服务器迁移,之前,我们的小型数据库曾经与客户端托管在同一台服务器上.
所以我们习惯这样做:SELECT * INTO OUTFILE .... LOAD DATA INFILE ....
现在,我们将数据库移动到另一台服务器,SELECT * INTO OUTFILE ....
不再有效,可以理解 - 我相信安全原因.但是,有趣的LOAD DATA INFILE ....
是可以改为LOAD DATA LOCAL INFILE ....
和bam,它有效.
我不是抱怨,也不是我对MySQL的厌恶.替代方案增加了2行额外代码和系统调用形成.sql脚本.所有我想知道的是为什么LOAD DATA LOCAL INFILE
有效,为什么没有这样的东西SELECT INTO OUTFILE LOCAL
?
我完成了我的作业,找不到上述问题的直接答案.我找不到@MySQL的功能请求.如果有人能够清除它,那就太棒了!
MariaDB能够处理这个问题吗?
从手册:The SELECT ... INTO OUTFILE
语句主要是为了让您非常快速地将表转储到服务器计算机上的文本文件中.如果要在服务器主机以外的某个客户端主机上创建生成的文件,则无法使用SELECT ... INTO OUTFILE
.在这种情况下,您应该使用命令,例如mysql -e "SELECT ..." > file_name
在客户端主机上生成文件."
http://dev.mysql.com/doc/refman/5.0/en/select.html
一个例子:
mysql -h my.db.com -u usrname--password=pass db_name -e 'SELECT foo FROM bar' > /tmp/myfile.txt
您可以通过传入-s(--silent)选项的mysql控制台实现您想要的功能.
传入-r(--raw)选项也是一个好主意,这样特殊字符就不会被转义.您可以使用它来管理您想要的查询.
MySQL的名-u用户名-h主机名-p -s -r -e"选择CONCAT( '本',"", '工作')"
编辑:另外,如果你想删除输出中的列名,只需添加另一个-S(MySQL的-ss -R等)
您提供的路径LOAD DATA INFILE
是运行服务器的计算机上的文件系统,而不是您连接的计算机.LOAD DATA LOCAL INFILE
是客户端的计算机,但它要求服务器以正确的设置启动,否则不允许.你可以在这里阅读所有相关内容:http://dev.mysql.com/doc/refman/5.0/en/load-data-local.html
至于SELECT INTO OUTFILE
我不知道为什么没有本地版本,除了它可能是棘手的连接.您可以通过该mysqldump
工具获得相同的功能,但不能通过将SQL发送到服务器.