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

我正在build立一个新的MySQL服务器,我想给它一组相同的用户名,允许主机和密码作为现有的服务器(这是消失)。

它会工作只是做一个用户表的转储,然后将其加载到新的服务器上?

有没有比这更好的方法?

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

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

我会看看Percona Toolkitpt-show-grants工具的描述说明了这一切…

pt-show-grants extract,orders,然后打印MySQL用户帐户的授权。

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

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

第二个用途是把你的资助版本控制….

虽然mysql数据库的转储可能会工作,根据我的经验,正确logging所有的访问,并用GRANT语句再次设置它是好得多。 这样做有两个好处:

  1. 您将了解您的数据库安全性以及如何实施。
  2. 您将删除不再需要的访问权限。

这已经在这里解决了如何从MySQL导出权限,然后导入到新的服务器?

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

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

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

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

所以,如果你升级你的服务器版本,请注意。 更多的提示在这里:

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

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

 # /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 

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

将database.table上的所有数据授予“user”@“host”,由“password”

所以

GRANT ALL在数据库。*到“jack”@“localhost”由“somepass”