AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 555953
Accepted
dsl101
dsl101
Asked: 2013-11-20 02:50:51 +0800 CST2013-11-20 02:50:51 +0800 CST 2013-11-20 02:50:51 +0800 CST

第一次尝试将 EC2 MySQL 迁移到 Amazon RDS 不顺利 - 超级特权

  • 772

我一直在尝试将现有数据库从运行在 EC2 上的 MySQL 移动到新的 Amazon RDS 实例(一个实验,看看我们是否可以移动)。到目前为止,进展并不顺利。在设置复制之前,我被困在初始导入(此处的说明)。

我已经按照描述准备了 RDS 实例,并且可以使用 mysql 从 EC2 实例连接到它。我运行 mysqldump 命令为:

mysqldump --master-data --databases db1 db2 > dump.sql

然后尝试将其上传到 RDS:

mysql -h RDSHost -P 3306 -u rdsuser --password=rdspassword < dump.sql

第一个问题出现在转储的第 22 行:

将 MASTER 更改为 MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=106;

此行导致错误ERROR 1227 (42000) at line 22: Access denied; you need (at least one of) the SUPER privilege(s) for this operation。没问题,只是注释掉了那行,希望稍后通过mysql.rds_set_external_master() 修复它。重试上传,得到一个非常相似的错误:ERROR 1227 (42000) at line 7844: Access denied; you need (at least one of) the SUPER privilege(s) for this operation. 第 7844 行周围的部分如下所示:

/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`dev`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `jos_contributor_ids_view` AS select `jos_resource_contributors_view`.`uidNumber` AS `uidNumber` from `jos_resource_contributors_view` union select `jos_wiki_contributors_view`.`uidNumber` AS `uidNumber` from `jos_wiki_contributors_view` */;

通过注释掉前两行并在第三行添加“CREATE”,我能够通过这一行。但是有很多这样的部分。有没有办法在没有所有编辑的情况下解决这个问题?喜欢mysqldump不生产任何需要超级特权的东西的选项?

似乎很多人都遇到过类似的问题,比如不得不sed针对 mysqldump / mysqlbinlog 的输出运行!我也将在 AWS 论坛上发帖——我真的认为 RDS 应该有一种更宽容的从 mysqldump 导入的方式,或者可以针对现有数据库运行的特定工具来创建一个与 RDS 安全性有关的转储。只是想知道是否有人有其他可能对这里有所帮助的食谱或技巧。

谢谢,

戴夫

mysql
  • 2 2 个回答
  • 14937 Views

2 个回答

  • Voted
  1. Best Answer
    Michael - sqlbot
    2013-11-20T04:39:13+08:002013-11-20T04:39:13+08:00

    您确实可能需要log_bin_trust_function_creators在 RDS 上设置 = 1,但这不是问题所在。

     仅当您具有权限时,您才能指定 DEFINER 您自己帐户以外的值 。SUPER

    — http://dev.mysql.com/doc/refman/5.6/en/stored-programs-security.html

    当一个存储程序(proc、函数、事件或触发器)运行时,它所做的一切都具有定义它的用户的权限,或者使用声明明确声明的用户的权限DEFINER。除其他外,这允许存储程序允许其他用户对他们没有直接操作权限的数据执行操作,只要他们有权使用存储程序本身。

    SUPER那么,如果非用户可以使用任意定义器创建过程,这将是一个严重的漏洞,因为用户可以随意提升他或她的权限。

    当然,当使用定义器安全上下文时,视图也是如此,如您发布的示例中所示。

    我对 RDS 的最大抱怨之一是你不能拥有SUPER......现在它也可以成为你的一个 :) 因为这个事实是你遇到问题的原因。

    当然,如果我运行的是托管 MySQL 服务,我也不会给任何人SUPER,所以他们的安全模型是有意义的,即使它有时很笨拙。

    如果您的所有对象都具有相同的定义器,则一种解决方法是使用该帐户而不是您现在使用的帐户来恢复转储,但这似乎不太可能。

    仅删除带有DEFINER声明的行应该使转储文件在它单独出现在一行上的情况下工作,或者您可以使用 sed 或 perl 修改文件...我已经知道您不喜欢的想法,但是,对于 MySQL 来说,这样的黑客行为是相当合法的,这确实是一件好事,而且与我作为 DBA 必须做的事情相距甚远,即使在非 RDS 环境中也是如此。

    perl -pe 's/\sDEFINER=`[^`]+`@`[^`]+`//' < oldfile.sql > newfile.sql
    

    ...可能不是您希望的答案,但您可以针对您的转储文件运行它,并最终得到一个更可用的文件。

    • 27
  2. Igor Toma
    2014-07-23T08:46:02+08:002014-07-23T08:46:02+08:00

    就我而言,转储中的“CHANGE MASTER TO MASTER_LOG_FILE= ...”行给了我错误。此行是由 mysqldump 的“--master-data”选项添加的。在 Amazon AWS 中,您需要通过使用“mysql.rds_set_external_master”过程设置主详细信息来开始复制,而不是在此处阅读

    所以我只是记下了第 22 行在错误中报告的“head 22 backup.dump”行。然后在导入之前将其删除,对于我使用的大文件:“sed '22d' backup.dump > backup_clean.dump”

    • 1

相关问题

  • 开源与专有关系 db mgt 系统的优缺点是什么?

  • 在 solaris 10 上为 mysql 设置 max_allowed_pa​​cket

  • 如何移动 MySQL 的数据目录?

  • 通过 VPN 连接什么是远程服务器 IP?

  • mysql崩溃

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve