用Qt转储MySQL数据库

| 我有这个插槽:
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\";
我正常执行,但没有出现转储文件,,2ѭ目录具有正确的权限,转储的数据库必须在客户端中。 更新: 搜索之后,我发现
INTO OUTFILE
查询将数据库转储到服务器中,而不是我想像的客户端中,因此现在我的问题是如何在没有任何外部工具(例如
mysqldump
客户端)的情况下将数据库转储到远程MySQL服务器中。     
已邀请:
“ 5”将在MySQL服务器计算机上创建一个文件,该文件的权限与运行MySQL服务器的用户匹配。除非您具有MySQL服务器上的root访问权限以检索要导出的文件,否则ѭ5不可能完成您想要的操作。 实际上,我认为我要说的是,如果您尝试从GUI客户端使用ѭ5,则可能是对问题采取了错误的方法。     
只是一个想法:另一种方法是使用QProcess调用mysqldump。与一些谷歌福这似乎是一个例子:
..
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
。     
您是否转储/打印保存以检查其是否有效? currentPath()是否返回Trailung \“ / \”? 客户端程序看到的路径和服务器看到的路径之间是否会有区别? 用户是否具有必要的特权(肯定有文件特权,也许还有更多特权) 您无法从日志中收到错误消息吗?     
您在运行sql语句时遇到任何错误吗? 我注意到您正在将文件名连接到SQL查询中,而不用引号引起来。您的代码将产生类似
SELECT * INTO OUTFILE /path/to/somewhere FROM Users, Data
但是MySQL文档说它想要这样的东西
SELECT * INTO OUTFILE \'/path/to/somewhere\' FROM Users, Data
另外请记住以下几点:   该文件是在服务器主机上创建的,因此您必须具有FILE特权才能使用此语法。
file_name
不能是现有文件,这尤其可以防止破坏prevents14ѭ等文件和数据库表。 如果您正在查看客户端,即使操作成功,您也不会在此处看到文件。     

要回复问题请先登录注册