繁体   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