繁体   English   中英

MySQL Workbench:无法导出数据库

[英]MySQL Workbench: Cannot export a database

我遇到了有关数据库导出的问题。 首先,我必须澄清我使用的是MySQL Workbench 5.2.47 到目前为止,我遵循的程序如下:

  1. 我按照http://mysqlworkbench.org/2012/07/migrating-from-ms-sql-server-to-mysql-using-workbench-migration-wizard/的说明与我的MSSQL DB建立连接为了将其转换为MySQL DB

  2. 然后我还检查了我的数据是否导入到数据库中。

  3. 现在我想将它导出到一个 sql 文件/或者最好是 frm,myi,myd 文件,以便将它们放在我的服务器中。

我试图将它们从

  • 服务器管理 -> 数据导出

  • 已经更改了安全性(用户和权限)的密码

但我遇到了问题

Dumping test (all tables)
Running: mysqldump.exe --defaults-extra-file="c:\users\d_micha\appdata\local\temp\tmpgtwa_m.cnf"  --user=root --max_allowed_packet=1G --host=localhost --port=3306 --default-character-set=utf8 --single-transaction=TRUE --routines --events --no-data "test"

mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect

Operation failed with exitcode 2

我不知道我可能做错了什么,我已经在谷歌搜索找到解决方案,但它应该正常导出。

任何其他信息将根据要求提供。

谢谢你。

当您没有LOCK TABLES权限时,我已经看到了这个问题。 您将在日志中的其余访问被拒绝错误之前看到此错误。 尝试在工作台的数据导出面板的高级设置中禁用LOCK TABLES

mysqldump: Got error: 1044: Access denied for user 'XXX'@'%' to database 'XXX' when doing LOCK TABLES

解决方案 1 - 为每个 mysqldump 调用提供正确的配置文件

这更像是一种解决方法,但它会让您获得所需的结果。 只需使用提供的信息从 CLI 获取 MySQL 表的转储 - 基本上它只是复制和粘贴:

从日志中可以看出mysqldump有参数--defaults-file 此文件可以并且将包含连接凭据,例如密码 显然 MySQLWorkbench 没有提供此文件的密码(“使用密码:否”)。

因此,只需创建一个名为 database.cnf 的文件并将其放在您计算机的某个位置(例如 c:\\temp\\database.cnf),其中包含如下凭据:

[client]
user=root
password=your-root-password
single-transaction=TRUE
host=localhost
port=3306
default-character-set=utf8
max_allowed_packet=1G

由于这也适用于命令行中的任何其他参数,您还可以添加所有其他内容,例如--single-transaction等。现在获取您的日志文件条目:

Running: mysqldump.exe --defaults-extra-file="c:\users\d_micha\appdata\local\temp\tmpgtwa_m.cnf"  --user=root --max_allowed_packet=1G --host=localhost --port=3306 --default-character-set=utf8 --single-transaction=TRUE --routines --events --no-data "test"

并替换--defaults-extra-file参数以指向您的database.cnf - 同时删除“运行:”信息和您已经在 database.cnf 中提供的每个参数:

mysqldump.exe --defaults-extra-file="c:\temp\database.cnf" --routines --events --no-data "test"

然后打开一个 Shell,转到你的 MySQLWorkbench-Folder 并运行命令,例如:

cd c:\Program Files\MySQL\MySQL Workbench 6.3 CE\
mmysqldump.exe --defaults-extra-file="c:\temp\database.cnf" --routines --events --no-data "test" > c:\Users\user\Downloads\table1.sql

不要忘记将输出路由到文件!

长话短说:使用 CLI 工具 mysqldump,MySQLWorkbench 也是这样做的,但不是正确的方法。

解决方案 2 - 提供全局正确的配置文件

mysqldump还会读取全局配置文件,如果它存在于这些位置之一:

  • C:\\WINDOWS\\my.ini
  • C:\\WINDOWS\\my.cnf
  • C:\\my.ini
  • C:\\my.cnf
  • c:\\Program Files\\MySQL\\my.ini
  • c:\\Program Files\\MySQL\\my.cnf

所以你可以把上面编辑过的 cnf 文件中的信息放到这个位置之一,然后运行 ​​mysqldump-command 而没有--defaults-file -parameter

解决方案 3 只调用 mysqldump 不带参数

这可能是最复杂的解决方案:my.cnf 将使用 mysqldump 接受的任何参数。 那么为什么不直接使用它来配置您的转储呢? 只需将所有参数添加到您的 my.cnf

[client]
user=root
password=secretPassword
single-transaction=TRUE
host=localhost
protocol=tcp
port=3306
default-character-set=utf8
skip-triggers=TRUE
all-databases=TRUE
all-tablespaces=TRUE

现在在 shell / 命令行上运行 mysqldump,不带任何参数,你很好:

cd c:\Program Files\MySQL\MySQL Workbench 6.3 CE\
mysqldump.exe  > c:\Users\user\Downloads\dump.sql

请尝试此解决方案https://bugs.mysql.com/bug.php?id=91640

实际上,我们可以根据https://stackoverflow.com/a/52944315/1694902使用 Workbench 中的高级选项禁用列统计信息 - 见下文:

  1. 转到管理/数据导出
  2. 在“要导出的表”列表中选择要导出的架构
  3. 单击“高级选项...”按钮(右上角)
  4. 搜索选项“其他/列统计”
  5. 将值设置为 0
  6. 单击“返回”按钮(右上角)

根据这篇文章的作者的说法,“不幸的是,每次启动 MySQL Workbench 时都必须这样做。”

这对我有用,也许可以帮助其他人。

操作失败,退出代码 2

列统计问题也会发生,我通过修改 MySQL Workbench 配置文件wb_admin_export.py解决了这个问题。

在这里看到我的答案。

MySQL 工作台正在尝试在没有密码的情况下访问您的数据库(请注意错误中的using password: NO )。 令人惊讶的是,您设法访问了服务器实例。 重新创建服务器实例,或者至少尝试使用新创建的实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM