【问题标题】:MySQL Workbench: Cannot export a databaseMySQL Workbench:无法导出数据库
【发布时间】:2013-05-30 20:36:33
【问题描述】:

我遇到了有关导出数据库的问题。 首先,我必须澄清我使用的是 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 文件非常糟糕。每次你这样做,一只无辜的小猫就会死去。
  • 没用过,所以不能告诉你如何解决,但问题似乎是 MySQL 工作台没有将你的密码传递给 mysqldump 命令。
  • 有什么办法可以解决这个问题吗?

标签: mysql mysql-workbench server-administration


【解决方案1】:

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

这更像是一种解决方法,但它会让您获得所需的结果。只需使用提供的信息从 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 文件中的信息放入其中一个位置,然后在没有 --defaults-file-parameter

的情况下运行 mysqldump-command

方案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

【讨论】:

    【解决方案2】:

    操作失败,退出代码为 2

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

    看我的回答here

    【讨论】:

      【解决方案3】:

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

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

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

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

      这对我有用,也许它可以帮助别人。

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 为了完整起见,在 Mysql Workbench 中的“高级选项 -> 其他”下,可以取消选中“锁定表”标志,如果用户没有 LOCK TABLE 权限,这是强制性的
        • 也为我工作。如果您很难找到“高级选项”按钮,它不在应用菜单上,而是在右上角的数据导出选项卡上。
        • @DarlingtonMoyo 你这个美人
        【解决方案5】:

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

        【讨论】:

        • 巧合的是,出现“使用密码:否”,因为我尝试使用我的密码进行连接。为了能够使用数据库,我已经更改了所有密码。我也尝试过使用我提供的密码:)
        • 那么你的(MySQL WB)服务器实例肯定坏了,因为它从不提供密码。尝试重新创建服务器实例。有什么变化吗?
        猜你喜欢
        • 2019-03-30
        • 2012-10-12
        • 2012-10-12
        • 2012-10-19
        • 2013-12-06
        • 2016-01-13
        • 2020-04-08
        • 1970-01-01
        • 2014-04-12
        相关资源
        最近更新 更多