【问题标题】:Importing mysql procedures generated from mysqldump --routines导入从 mysqldump --routines 生成的 mysql 过程
【发布时间】:2009-02-02 19:09:58
【问题描述】:

我使用 mysqldump 工具来制作我的数据库的副本。问题是,当我使用 --routines 参数将存储过程与数据一起输出时,生成的输出在我尝试导入时会导致错误。

它是这样的:

% mysqldump --routines MyDB | mysql MyDB2

(其中 MyDB2 已存在但为空)

我得到的错误如下:

ERROR 1064 (42000) at line 307: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 23

如果我省略 --routines,一切都会正常工作。

有没有其他人遇到过这种情况?

【问题讨论】:

  • 目标 MySQL 服务器的版本是什么?它是否支持存储的例程?你能在第 307 行附近显示脚本,还是只显示其中的一部分?

标签: mysql stored-procedures mysqldump


【解决方案1】:

我能够通过将其拆分为两个调用来使其工作:

% mysqldump MyDB | mysql MyDB2
% mysqldump --routines --no-create-info --no-data --no-create-db --skip-opt MyDB | mysql MyDB2

【讨论】:

  • 我遇到了类似的问题,我有一个 linux 数据库,我正在迁移到 windows 并且我有 --routines 的所有类型的错误
  • 我有同样的问题并遇到了同样的解决方案,但我希望有人能告诉我为什么会这样,如果它只是一个 mysql 错误,是否已确认。有什么想法吗?
  • 据我所知,在将 5.0 转储导入 5.1 db 时,我遇到了类似的问题。有一点不兼容
【解决方案2】:

如果在 MyDB2 中运行查询时出现错误,最好:

  1. 运行 mysqldump 将输出保存到保存的文件中。
  2. 逐位运行文件,找出问题所在。
  3. 修复那个位。

我曾经遇到过这样的问题,我从旧版本的 mysql 导出并导入到新版本,它已将我的列名之一声明为保留字。您在不同服务器上的两个数据库是否运行不同版本的mysql?还是数据库之间有其他区别(例如字符集)?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多