mysql 5.5 到 8 - 如何迁移密码

use*_*099 0 php mysql

我有 MySQL 5.5 的旧服务器和 MySQL 8 的新服务器。我不知道用户密码,我需要移动大约 30 个用户。
将“mysql”数据库复制到新服务器的正确方法是什么? 我尝试像任何其他常规数据库一样复制 mysql,我知道不推荐这样做,并得到:

[警告] [MY-013360] [服务器] 插件 sha256_password 报告:“sha256_password”已弃用,并将在未来版本中删除。请改用caching_sha2_password' <

如何将 sha256 转换为 sha2?我也尝试过:

显示授予用户“user_name”@“localhost”;

然后取出该行并在新服务器(mysql 8)上运行它:

创建用户 'user_name'@'localhost' 通过密码识别 '*1E0C2C7ED8F8315F6816F...';

当我运行时: select * from user where user='user_name'

我在“authentication_string”列中得到不同的哈希密码:*E5FDC4D51AC7AB43AC9...

任何想法?

小智 5

MySQL 5.5 和 8.0 之间有很多差异。也就是说,您应该能够通过大约三个步骤来完成此操作:

\n

1 \xe2\x80\x94 导出授权

\n

从数据库服务器的 shell 运行此命令:

\n
mysql -u root -p'PASSWORD' --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -u root -p'PASSWORD' --skip-column-names -A | sed 's/$/;/g' > user_grants.sql\n
Run Code Online (Sandbox Code Playgroud)\n

这会将所有授权user_grants.sql以易于导入新服务器的格式放入文件中。

\n

2 \xe2\x80\x94 构建创建用户语句

\n

从数据库服务器的 shell 运行此命令:

\n
mysql -u root -p'password' --skip-column-names -A mysql -e "SELECT CONCAT('CREATE USER \\'', user, '\\'@\\'', host, '\\' IDENTIFIED WITH \\'mysql_native_password\\' AS \\'', password,'\\';') FROM mysql.user WHERE user NOT IN ('mysql.session','mysql.sys','debian-sys-maint','root');" > create_user.sql\n
Run Code Online (Sandbox Code Playgroud)\n

这会将所有用户帐户create_user.sql以易于导入新服务器的格式放入文件中。

\n

重要提示:此查询适用于 MySQL 5.6 及更低版本。从 5.7 开始,该password字段不再存在于users表中。

\n

3 \xe2\x80\x94 恢复数据

\n

将文件复制到新服务器并导入数据:

\n
mysql -u root -p mysql < create_user.sql\nmysql -u root -p mysql < user_grants.sql\n
Run Code Online (Sandbox Code Playgroud)\n

完成此操作后,连接到 MySQL 并刷新权限:

\n
mysql -u root -p\n{enter password}\nFLUSH PRIVILEGES;\nquit;\n
Run Code Online (Sandbox Code Playgroud)\n

完毕。

\n