将 MySQL 用户从一个数据库服务器移动到另一个数据库服务器?

将 MySQL 用户从一个数据库服务器移动到另一个数据库服务器?

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

我有一台 MySQL 服务器,里面有大约 6000 个 MySQL 用户。我现在正在另一台物理服务器上设置一个更好的 MySQL 服务器,需要将这 6000 个 MySQL 用户从旧服务器转移到新服务器。我该怎么做?

重要的是,权限和密码不应该改变。

答案1

转储 mysql.user 表(以及可选的 mysql.db 表),然后将对旧主机名称的任何特定引用替换为新主机的名称。导入新主机数据库并刷新权限。

这并不难,是吧?

答案2

请记住,mysql.user 在主要版本之间是不同的。

select count(1) from information_schema.columns
where table_schema='mysql' and table_name='user';

此查询返回

  • MySQL 5.0 版本为 37
  • MySQL 5.1 版本为 39
  • MySQL 5.5 为 42。
  • 您无法在 MySQL 4.x 中运行此查询,但运行desc mysql.user后您将看到 31 列。

实际上,无论 MySQL 的版本如何,都有两种方法可以安全地将用户从一个数据库移植到另一个数据库。

选项1: 使用mk-show-赠款(Percona Toolkit 即将将其命名为 pt-show-grants)

这会将所有 MySQL Grants 转储为 SQL 语句,这些语句可以完全移植到任何 MySQL 5.x 实例。

选项 2:运行这些命令(我个人模拟了 mk-show-grants 的功能)

mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql

任一选项生成的 MySQLUserGrants.sql 都可以简单执行,并且授权表也会被正确填充。

答案3

如果需要,您可以通过 phpMyAdmin 执行 symcbean 解释的操作。进入导出选项卡并选择导出 mysql 数据库(如果要保留权限,则导出user表和表)。db

相关内容