代码之家  ›  专栏  ›  技术社区  ›  Adam Bellaire

如何使用mysqldump在帐户之间复制视图?

  •  19
  • Adam Bellaire  · 技术社区  · 18 年前

    我正在使用 mysqldump

    /*!50013 DEFINER=`user_a`@`localhost` SQL SECURITY DEFINER */
    

    ... 在用户_b上将转储加载到mysql时,我们收到一个错误:

    ERROR 1227 (42000) at line 657: Access denied; you need the SUPER privilege for this operation
    

    不用说,我在这个mysql实例上没有超级权限。有没有办法说服我 以用户不可知的方式转储视图?关于这一点,我在手册上找不到任何东西。我真的需要解析转储文件来替换用户名吗?还是我遗漏了什么?

    4 回复  |  直到 18 年前
        1
  •  27
  •   Community Mohan Dere    13 年前

    同样的问题。我就是这样解决的:

    mysqldump -uuser1 -ppassword1 database1 > backup.sql
    
    sed '/^\/\*\!50013 DEFINER/d' backup.sql > backup_without_50013.sql
    
    mysql -u user2 -ppassword2 -D database2 < backup_without_50013.sql
    

    有趣的是 sed 命令,该命令将删除以/*开头的所有行!50013

    海蒂

        2
  •  12
  •   johnk    16 年前

    您需要处理备份文件并更改定义者:

    定义者= user_a @ localhost

    我想把它改成:

    然后,它将自动关联到加载它的帐户。

        3
  •  2
  •   Max Stewart    18 年前

    SQL安全性子句确定在检查视图的访问权限时要使用哪个MySQL帐户(您可能已经知道)。

    here ,但基本上默认情况下,访问权限仅限于视图的“定义者”,即创建视图的用户。

        4
  •  0
  •   Jérôme Verstrynge    15 年前

    跑 mysqldump 有选择权 "--skip-triggers"