【问题标题】:mysqldump without "CREATE ALGORITHM" and "DEFINER"没有“CREATE ALGORITHM”和“DEFINER”的mysqldump
【发布时间】:2014-11-13 12:14:27
【问题描述】:

在我的数据库备份和导出中,我得到如下内容:

/*!50001 DROP TABLE `vTime`*/;
/*!50001 DROP VIEW IF EXISTS `vTime`*/;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`db_user`@`%` SQL SECURITY DEFINER */
/*!50001 VIEW `vTime` AS select ... */;
  1. 这会导致还原时出现问题,因为“CREATE ALGORITHM”和“DEFINER”部分在尝试还原时失败。有没有办法让mysqldump 只做一个简单的CREATE VIEW

  2. 额外问题:/*!50001 部分是什么意思?

编辑:我应该补充一点,这是我遇到的错误:

#1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation

编辑 2:似乎只有 /*!50013 DEFINER= 部分失败。

【问题讨论】:

    标签: mysql mysqldump database-backups


    【解决方案1】:

    这个 sed 命令应该适用于从 mysqldump 中删除这两个子句 -

    sed -e 's|^/[*]!50001 CREATE ALGORITHM=UNDEFINED [*]/|/*!50001 CREATE */|' -e '/^[/][*]!50013 DEFINER=/d'
    

    其中 50001 和 50013 是上面已经提到的各自版本。

    【讨论】:

      【解决方案2】:

      /*!50001 部分是版本号。

      这里已经回答了这个问题:MySQL flags in dumps

      删除 DEFINER 的主要问题最好使用脚本来完成。一些已经在线的例子:

      https://dbperf.wordpress.com/2010/04/12/removing-definer-from-mysql-dump/

      Remove DEFINER clause from MySQL Dumps

      【讨论】:

        猜你喜欢
        • 2017-03-20
        • 1970-01-01
        • 2013-11-23
        • 2016-01-11
        • 2011-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-01
        相关资源
        最近更新 更多