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
Aar*_*ush 22
我会看看Percona Toolkit。该pt-show-grants工具的描述说明了一切......
pt-show-grants提取,订购,然后打印 MySQL 用户帐户的授权。你为什么要这个?有几个原因。
第一个是轻松地将用户从一台服务器复制到另一台服务器;您可以简单地从第一台服务器中提取授权并将输出直接通过管道传输到另一台服务器。
第二个用途是将您的赠款置于版本控制中......
sta*_*san 13
虽然转储mysql数据库可能会起作用,但根据我的经验,正确记录所有访问并使用GRANT语句重新设置它要好得多。这样做有两个好处:
小智 11
如果您要迁移到新的服务器版本,接受的答案(使用 mysqldump 备份 mysql.user 表)是一种非常危险的方法。
我过去这样做过(将用户从 Mysql 4 迁移到 Mysql 5.1),后来我在尝试授予或修改数据库用户权限时遇到问题。
发生这种情况是因为 mysql.users 表结构在 mysql 服务器版本之间有所不同,如下所述:
https://dba.stackexchange.com/a/16441/18472
因此,如果您要升级服务器版本,请务必小心。这里还有一些提示:
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)