it-swarm.cn

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

我正在设置一个新的MySQL服务器,并希望为它提供与现有服务器相​​同的用户名,允许的主机和密码(即将淘汰)。

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

有没有比这更好的方法了?

40
Agvorth
oldserver$ mysqldump mysql > mysql.sql
newserver$ mysql mysql < mysql.sql
newserver$ mysql 'flush privileges;'

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

34
Dave Cheney

我来看看Percona Toolkitpt-show-grants工具的描述说明了一切...

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

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

首先是轻松地将用户从一台服务器复制到另一台服务器;您可以简单地从第一台服务器中提取授权,然后将输出直接传递到另一台服务器中。

第二个用途是将您的授权放入版本控制中。

21
Aaron Bush

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

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

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

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

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

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

因此,请注意是否要升级服务器版本。这里还有一些提示:

https://stackoverflow.com/a/13218162/710788

11
abu
11
Bruno Bronosky

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

# /etc/init.d/mysqld stop
# cd /var/lib/mysql
# mv mysql ../mysql.backup
# rsync -a [email protected]:/var/lib/mysql/mysql .
# /etc/init.d/mysql start
5
Tim

运行授权命令非常简单。它像是

将database.table上的ALL全部授予由“ password”标识的“ user” @“ Host”

所以

将数据库上的GRANT ALL。*到由“ somepass”标识的“ jack” @“ localhost”

2
Trausti Thor