我有一台 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