如何将 MySQL 用户表从一台服务器复制到另一台服务器?

Agv*_*rth 40 mysql export user-permissions user-accounts

我正在设置一个新的 MySQL 服务器,我想为它提供与现有服务器(即将消失)相同的一组用户名、允许的主机和密码。

仅转储用户表然后将其加载到新服务器上是否可行?

还有比这更好的方法吗?

Dav*_*ney 32

oldserver$ mysqldump mysql > mysql.sql
newserver$ mysql mysql < mysql.sql
newserver$ mysql 'flush privileges;'
Run Code Online (Sandbox Code Playgroud)

应该这样做,记得按要求添加-u $USER-p$PASSWORD

  • 'mysql' db 包含更多的用途,而不仅仅是授权。在执行上述步骤之前,请确保您要全部传输。 (17认同)
  • 这不是正确的答案。您不应该迁移整个 mysql 表。使用`SHOW GRANTS FOR ...` 提取当前权限,然后在新主机上授予它们。 (10认同)
  • 代表还没有足够的代表发表评论的@eerick:不要将 mysqldump 与任何 mysql 模式表一起使用。这可能会产生可怕的后果。我实际上只是使用接受的答案来尝试自己解决这个问题,但我遇到了各种错误。我实际上最终将自己锁定在数据库之外,因为我的管理员帐户无法识别我的密码并且我无法创建新用户。如果版本相同,您也许可以使用 mysqldump,但我仍然不会冒险。 (9认同)

Aar*_*ush 22

我会看看Percona Toolkit。该pt-show-grants工具的描述说明了一切......

pt-show-grants 提取,订购,然后打印 MySQL 用户帐户的授权。

你为什么要这个?有几个原因。

第一个是轻松地将用户从一台服务器复制到另一台服务器;您可以简单地从第一台服务器中提取授权并将输出直接通过管道传输到另一台服务器。

第二个用途是将您的赠款置于版本控制中......


sta*_*san 13

虽然转储mysql数据库可能会起作用,但根据我的经验,正确记录所有访问并使用GRANT语句重新设置它要好得多。这样做有两个好处:

  1. 您将了解您的数据库安全性及其实现方式。
  2. 您将可以删除不再需要的访问权限。


小智 11

如果您要迁移到新的服务器版本,接受的答案(使用 mysqldump 备份 mysql.user 表)是一种非常危险的方法。

我过去这样做过(将用户从 Mysql 4 迁移到 Mysql 5.1),后来我在尝试授予或修改数据库用户权限时遇到问题。

发生这种情况是因为 mysql.users 表结构在 mysql 服务器版本之间有所不同,如下所述:

https://dba.stackexchange.com/a/16441/18472

因此,如果您要升级服务器版本,请务必小心。这里还有一些提示:

/sf/answers/925271371/


Tim*_*Tim 5

mysqldump 可以工作,但由于 mysql 数据库使用 ISAM,您只需将目录复制到新服务器即可。您会在不同的地方找到它,但 mysql 数据库最常见的位置是 /var/lib/mysql/mysql。确保在新服务器上停止mysql,将旧目录移开,复制目录并重新启动。使用标准位置作为 root 的示例:

# /etc/init.d/mysqld stop
# cd /var/lib/mysql
# mv mysql ../mysql.backup
# rsync -a root@oldserver:/var/lib/mysql/mysql .
# /etc/init.d/mysql start
Run Code Online (Sandbox Code Playgroud)