簡體   English   中英

從命令提示符mysql工具中導出MySQL數據庫。 沒有mysqldump

[英]Exporting MySQL database from within a command prompt mysql tool. Without mysqldump

我已在服務器上登錄mysql並能夠從那里鍵入命令。 我在命令行工具中找不到允許我導出的命令。 當然,我可以注銷並運行mysqldump -u -p...但這很痛苦。 要從客戶端內部導入,您只需鍵入source path/to/the/source

必須有類似這樣的內容才能導出,但是互聯網上的所有內容都指向mysqldump,因此找不到所需的工具。 畢竟,mysqldump只是我要查找的命令的包裝。 有人知道該用什么嗎? 多謝能幫助您的人。

畢竟,mysqldump只是我要查找的命令的包裝。

不,實際上不是。

其他一些實用程序(例如mysqladminmysqlcheck )僅是SQL語句的“方便”(或者,如果您問我,基本上沒有意義的)包裝程序,您可以自行發布,因此我認為您的假設可能是合理的,但是mysqldump不是這種情況。

mysqldump的源代碼約為C的5,061行- 甚至不包括實際管理與MySQL服務器的TCP或Unix套接字通信的代碼,或者不包含由MySQL服務器與公用事業。

是的, mysqldump實用程序確實在可行的情況下匯編一些SQL語句,將它們發送到服務器以執行,然后將服務器的響應寫入轉儲文件中...

my_snprintf(query, sizeof(query), "SHOW CREATE TABLE %s", result_table);

……這很容易,幾乎不需要重新發明輪子。

但是,它執行的許多操作根本無法由MySQL服務器代碼處理。 例子...

if (opt_drop_trigger)
  fprintf(sql_file, "/*!50032 DROP TRIGGER IF EXISTS %s */;\n", (*show_trigger_row)[0]);

fprintf(sql_file,
      "DELIMITER ;;\n"
      "/*!50003 SET SESSION SQL_MODE=\"%s\" */;;\n"
      "/*!50003 CREATE */ ",
      (*show_trigger_row)[6]);

mysql內部沒有執行該操作或該操作的功能...

if (write_data)
{
  if (opt_replace_into)
    dynstr_append_checked(&insert_pat, "REPLACE ");
  else
    dynstr_append_checked(&insert_pat, "INSERT ");
  dynstr_append_checked(&insert_pat, insert_option);
  dynstr_append_checked(&insert_pat, "INTO ");
  dynstr_append_checked(&insert_pat, opt_quoted_table);
  if (complete_insert)
  {
    dynstr_append_checked(&insert_pat, " (");
  }
  else
  {
    dynstr_append_checked(&insert_pat, " VALUES ");
    if (!extended_insert)
      dynstr_append_checked(&insert_pat, "(");
  }
}

while ((row= mysql_fetch_row(result)))
{
  if (complete_insert)
  {
    if (init)
    {
      dynstr_append_checked(&insert_pat, ", ");
    }
    init=1;
    dynstr_append_checked(&insert_pat,
                  quote_name(row[SHOW_FIELDNAME], name_buff, 0));
  }
}
num_fields= mysql_num_rows(result);
mysql_free_result(result);

對於包裝器來說,這似乎是很多不必要的工作。 :)您可能現在已經解決了,這是mysqldump所做的一些簡單操作的示例,它在發出SELECT /*!40001 SQL_NO_CACHE */ * FROM ...后,以打包的二進制格式讀取從服務器返回的行數據SELECT /*!40001 SQL_NO_CACHE */ * FROM ...從每個表中獲取所有數據,並將其轉換為SQL語句。 實際制作這些INSERT語句的代碼來自mysqldump 不在服務器中。

互聯網上的所有內容都指向mysqldump是有原因的。

可以通過不同的SHOW命令實現什么mysqldump ,經過足夠的努力,您最終會得到mysqldump ;)

查看http://dev.mysql.com/doc/refman/5.5/en/show.html,了解所有可能的變體。

從我的角度來看,使用mysqldump更方便,因為它使用與mysql Command Line Tool相同的所有連接參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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