poc*_*ese 6 mysql mysqldump backup
我正在尝试使用 SELECT ... INTO OUTFILE 查询转储一个大表(40GB,600,000 行)。我想使用它,因为我希望我的结果以特定方式排序(因此 mysqldump 不够好)。
问题是,我收到错误代码 28。我很确定这是因为默认 /tmp 位置的磁盘空间不足。如果我可以在运行时指定用于 tmp 的位置,我在其他地方的磁盘上有足够的空间。
我发现我可以通过修改 my.cnf 来更改 tmpdir,但是我没有足够的服务器权限来修改它或重新启动 mysqld。
这里的解决方案是什么?
编辑:一些答案建议使用 mysql -e。我可能不得不走这条路并对我的文件进行后处理。我想使用 SELECT ... INTO OUTFILE 的原因是因为我想
fields terminated by '\t'
escaped by '\\'
lines terminated by '\r\n' ;
Run Code Online (Sandbox Code Playgroud)
假设您拥有 FILE 权限,您应该能够指定 /tmp 位置以外的位置。例如:
SELECT .. INTO OUTFILE '/home/foo/myfile.csv'
Run Code Online (Sandbox Code Playgroud)
如果您有权访问命令行,则另一个选项是使用-e
开关:
> mysql -e "SELECT * FROM foo ORDER BY bar" > '/path/to/file'
Run Code Online (Sandbox Code Playgroud)
问题是服务器口袋里装满了奶酪,但由于奶酪创建者(MySQL 服务器进程)无权将奶酪(查询输出)放在任何其他口袋中,因此无法指定另一个口袋来放置奶酪由于 privs,口袋(目录位置)。
如果你的主机不能给你一个替代的挂载点来将文件转储到(有适当的权限供 MySQL 服务器写入),一个解决方法是从 MySQL 提示连接到服务器(确保你在相同的子网或相同的服务器,因为您不想通过互联网传输 40Gb 的数据)并使用mysql -e
:
mysql -h your.host.name.com -u youruser --password=yourpass -e 'select stuff from mytable order by stuff' > /wherever/you/want/mylocaloutput.txt
Run Code Online (Sandbox Code Playgroud)
这将在您选择的位置为您创建一个本地文件。