簡體   English   中英

使用Qt轉儲MySQL數據庫

[英]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 ,你可能會采取錯誤的方法解決你的問題。

  1. 您是否轉儲/打印保存以檢查它是否有效? currentPath()是否返回了一個“/”?
  2. 您的客戶端程序看到的路徑與服務器看到的路徑之間是否存在差異?
  3. 用戶是否具有必要的權限(肯定是文件權限,可能更多)
  4. 你不能從日志中收到錯誤信息嗎?

您是否在運行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM