[英]Dump MySQL database with Qt
我有这个插槽:
void Managment::dbExportTriggered()
{
save = QFileDialog::getSaveFileName(this, trUtf8("Export db"),
QDir::currentPath() + "Backup/",
trUtf8("Dumped database (*.sql)"));
sqlQuery = "SELECT * INTO OUTFILE '" + save + ".sql' FROM Users, Data";
//QMessageBox::critical(0, trUtf8("query dump"), QString::number(query.exec(sqlQuery)));
query.exec(sqlQuery);
}
我有这个问题:
sqlQuery = "SELECT * INTO OUTFILE " + save + " FROM Users, Data";
我正常执行但没有出现转储文件, backup
目录具有正确的权限,转储的数据库必须在客户端。
更新:搜索后我发现INTO OUTFILE
查询会将数据库转储到服务器而不是客户端,因为我想到了,所以我现在的问题是如何在远程MySQL服务器中转储数据库,任何快速方法都没有任何外部工具如mysqldump
客户端。
只是一个想法:另一种方法是使用QProcess调用mysqldump 。 有些google-fu 这似乎就是一个例子:
..
if (allDatabases->isChecked()) {
arguments << "--all-databases";
} else {
arguments << "--databases";
foreach(QListWidgetItem *item, databasesList->selectedItems())
arguments << item->text();
}
proc->setReadChannel(QProcess::StandardOutput);
QApplication::setOverrideCursor(Qt::WaitCursor);
proc->start("mysqldump", arguments);
..
因此,您还可以添加一些参数来仅转储特定的表 。
编辑:
请注意SELECT ... INTO OUTFILE
语句中的mysql文档 :
如果要在服务器主机之外的其他主机上创建生成的文件,通常无法使用 SELECT ... INTO OUTFILE,因为无法相对于服务器主机的文件系统写入文件的路径。
因此,您必须自己滚动,或者您可以使用上面文档中建议的mysql -e
。
SELECT ... INTO OUTFILE
在MySQL服务器计算机上创建一个文件,其权限与MySQL服务器运行的任何一个匹配。 除非您在MySQL服务器上具有root访问权限以检索您要导出的文件,否则SELECT ... INTO OUTFILE
不太可能执行您想要的操作。
事实上,我想我甚至会说,如果你试图从GUI客户端使用SELECT ... INTO OUTFILE
,你可能会采取错误的方法解决你的问题。
您是否在运行sql语句时遇到任何错误?
我注意到你将文件名连接到SQL查询而不用引号括起来。 你的代码会产生类似的东西
SELECT * INTO OUTFILE /path/to/somewhere FROM Users, Data
但MySQL文档说它需要类似的东西
SELECT * INTO OUTFILE '/path/to/somewhere' FROM Users, Data
还要记住以下几点:
该文件是在服务器主机上创建的,因此您必须具有FILE权限才能使用此语法。
file_name
不能是现有文件,除其他外,它会阻止/etc/passwd
和数据库表/etc/passwd
文件被销毁。
如果您在客户端上查看,即使操作成功,您也不会在那里看到该文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.