我知道如何使用 mysqldump 导出/导入数据库,这很好,但我如何获得进入新服务器的权限。
额外的一点是,新数据库上已经有几个现有的数据库,我如何导入旧服务器权限而不破坏现有的几个数据库。
旧服务器:5.0.67-community
新服务器:5.0.51a-24+lenny1
编辑:我已经从旧服务器上转储了数据库“mysql”,现在想知道与新服务器上的“mysql”数据库合并的正确方法。
我尝试使用 phpMyAdmin 直接“导入”,结果出现了关于重复项的错误(我已经手动迁移了一个)。
任何人都有合并两个“mysql”数据库的优雅方法吗?
不要弄乱mysql db。除了 users 表之外,还有很多事情要做。您最好的选择是“ SHOW GRANTS FOR”命令。我的 .bashrc 中有很多 CLI 维护别名和函数(实际上是我在 .bashrc 中获取的 .bash_aliases)。这个功能:
第一个 mysql 命令使用 SQL 生成有效的 SQL,该 SQL 通过管道传输到第二个 mysql 命令。然后通过 sed 管道输出以添加漂亮的注释。
命令中的 $@ 将允许您将其称为:mygrants --host=prod-db1 --user=admin --password=secret
您可以像这样使用完整的 unix 工具包:
这是移动用户的正确方式。您的 MySQL ACL 是使用纯 SQL 修改的。
从 MySQL 实例中提取 SQL 授权有两种方法
方法#1
您可以使用Percona Toolkit中的 pt-show-grants
方法#2
pt-show-grants
您可以使用以下方法进行模拟任何一种方法都会产生 MySQL 授权的纯 SQL 转储。剩下要做的就是在新服务器上执行脚本:
试试看 !!!
Richard Bronosky 的回答对我非常有用。非常感谢!!!
这是一个对我有用的小变化。它有助于转移用户,例如在运行 phpmyadmin 的两个 Ubuntu 安装之间。只需转储除 root、phpmyadmin 和 debian-sys-maint 之外的所有用户的权限。那么代码就是
或者,利用 percona-toolkit(以前的 maatkit)并使用
pt-show-grants
(或mk-show-grants
)来实现该目的。无需繁琐的脚本和/或存储过程。您可以 mysqldump 'mysql' 数据库并导入到新数据库;将需要一个 flush_privileges 或重新启动,您肯定要先备份现有的 mysq 数据库。
为避免删除现有权限,请确保附加而不是替换权限表(db、columns_priv、host、func 等)中的行。
您也可以将其作为存储过程来执行:
并调用它
然后通过理查兹 sed 命令管道输出以获取权限的备份。
PHP脚本怎么样?:)
查看此脚本的源代码,您将拥有列出的所有权限:
虽然看起来@Richard Bronosky 的答案是正确的,但我在尝试将一组数据库从一台服务器迁移到另一台服务器后遇到了这个问题,而且解决方案要简单得多:
此时,如果我以 身份登录,我的所有数据都是可见的
root
,该mysql.user
表中包含我所期望的所有内容,但我无法以任何其他用户身份登录并发现这个问题假设我必须重新 -发表GRANT
声明。然而,事实证明,只需要重新启动 mysql 服务器即可使
mysql.*
表中更新的权限生效:希望这可以帮助其他人实现应该是一项简单的任务!
使用以下代码创建一个 shell 脚本文件:
#############################################3 #****然后像这样在shell上运行它:系统会要求您输入两次root密码,然后屏幕上将显示GRANTS SQL。****
One-liner 与 awesome 几乎相同
pt-show-grants
:仅基于 unix 工具,无需额外软件。
从 bash shell 中执行,假设您有一个可以读取用户
.my.cnf
密码的工作。mysql root