MySQL Workbench:无法导出数据库

11

我遇到了有关导出数据库的问题。首先,我必须澄清一下,我正在使用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

我不知道我可能做错了什么,并且我已经在谷歌上搜索了解决方案,但应该是正常导出的。

如有需要,可以提供其他信息。

谢谢。


在 frm、MYI 或 MYD 文件中移动是非常糟糕的。每次这样做,一只无辜的小猫就会死去。 - RandomSeed
我没有使用过它,所以无法告诉您如何修复它,但问题似乎是MySQL Workbench没有将您的密码传递给mysqldump命令。 - Joachim Isaksson
有没有办法我可以修复它? - Dimitra Micha
6个回答

27

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

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

6
为了完整性,在Mysql Workbench中,在“高级选项->其他”下,可以取消“锁定表”标志,如果用户没有LOCK TABLE权限,则此操作是必需的。 - user2340612
3
我也试过了,如果你找不到“高级选项”按钮,它并不在应用程序菜单中,而是在右上角的数据导出选项卡中。 - Darlington Moyo
@DarlingtonMoyo 你真是个美好的人 - Edward

2

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

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

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

因此,只需创建一个名为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文件 - 同时删除“Running:”信息以及您已在database.cnf中提供的每个参数:

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

然后打开一个Shell,进入你的MySQLWorkbench文件夹并运行命令,例如:

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命令,而无需使用--defaults-file参数。
解决方案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

0

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

实际上,我们可以使用Workbench中的高级选项来禁用列统计信息,如https://dev59.com/8VUL5IYBdhLWcg3wI1Ap#52944315所述-请参见以下内容:

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

根据此帖子的作者,“不幸的是,每次启动MySQL Workbench时都必须这样做。”

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


0
操作以退出代码2失败
也出现在列统计问题中,我通过修改MySQL Workbench配置文件wb_admin_export.py来解决了这个问题。
请查看我的答案 这里

0

在尝试了MysqlWokbench 8.0.32上面大多数选项后,这个方法对我有效,并且根据Stack Overflow问题的答案列出了流程。

  1. 找到'C:\Program Files\MySQL\MySQL Workbench 8.0 CE\modules'。

  2. 备份'wb_admin_export.py'文件(在任何情况下都要替换回去)。

  3. 关闭MysqlWorkbench。

  4. 以管理员权限打开记事本并打开文件'wb_admin_export.py'。

  5. 搜索以下行。

    skip_column_statistics = True if get_mysqldump_version() > Version(8, 0, 2) and self.owner.ctrl_be.target_version < Version(8, 0, 0) else False

  6. 仅保留'skip_column_statistics = True'并删除上述行的右侧部分。(不要保留任何制表符或行注释,因为Python代码块通过制表符识别,只需删除代码的右侧部分即可)。

Before file

After change

保存文件,启动MySQL工作台,然后尝试再次导出。

-4

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


“using password: No” 出现纯属巧合,因为我尝试使用密码连接。我已更改所有密码以便能够使用数据库。我也尝试了我提供的密码 :) - Dimitra Micha
那么您的(MySQL WB)服务器实例肯定出现了问题,因为它从未提供密码。尝试重新创建服务器实例,有什么变化吗? - RandomSeed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接