【问题标题】:mysql 5.5 to 8 - how to migrate passwordmysql 5.5 到 8 - 如何迁移密码
【发布时间】:2021-01-14 15:11:49
【问题描述】:

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

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

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

show 授予用户 'user_name'@'localhost';

然后取线,在新的服务器(mysql 8)上运行:

create user 'user_name'@'localhost' IDENTIFIED BY PASSWORD '*1E0C2C7ED8F8315F6816F...';

当我跑步时: select * from user where user='user_name'

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

有什么想法吗?

【问题讨论】:

  • 小点不同的HASHED密码,你是在散列而不是加密

标签: php mysql


【解决方案1】:

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

1 — 导出赠款

从您的数据库服务器的 shell 运行它:

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

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

2 — 构建创建用户语句

从您的数据库服务器的 shell 运行它:

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

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

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

3 — 恢复数据

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

mysql -u root -p mysql < create_user.sql
mysql -u root -p mysql < user_grants.sql

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

mysql -u root -p
{enter password}
FLUSH PRIVILEGES;
quit;

完成。

【讨论】:

  • 当我执行第 2 部分时,我收到错误:第 1 行的错误 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'IDENTIFIED BY PASSWORD '*FD67756553FE...'' 附近使用正确的语法
  • @user1980099,编辑user_grants.sql 并删除“IDENTIFIED BY PASSWORD 'password'”事件。 MySQL 8 不接受该部分命令。
【解决方案2】:

需要更改第二部分,因为不存在密码列。改为:

身份验证字符串

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 2017-02-03
    • 2015-05-03
    • 2012-10-10
    • 2019-02-07
    • 2012-10-31
    • 2011-09-22
    相关资源
    最近更新 更多