[英]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.