当前位置:网站首页>MySQL5.6到8.0的账号迁移

MySQL5.6到8.0的账号迁移

2022-08-09 12:05:00 51CTO

最近有套测试数据库需要从5.6迁移到8.x,用的是逻辑备份迁移方式。

试了下pt-show-grants,发现它导出的账号授权语句在8.x里面不再那么好用了。因为8.x下用户和授权被拆分成了create user和grant 这2个步骤。


工具不好直接搞,我们还可以用sql拼接下。


1 获取待迁移的账号列表

      
      
SELECT CONCAT( 'create user "',USER, '"@"',HOST, '";' )
FROM mysql.user
where user
not in ( 'root', 'mysql.infoschema', 'mysql.session', 'mysql.sys')
;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

2 获取到授权语句

      
      
# 只提取出grant sql,过滤掉创建账号的语句
pt-show-grants -uroot -p 'xxxxx' | egrep -v 'IDENTIFIED BY PASSWORD' | egrep -v '-- Grants' > grants.sql
  • 1.
  • 2.


3 获取批量刷新权限的sql

      
      
select concat( 'update mysql.user set authentication_string="', password, '" ', 'where user=', "'",user, "' and host=", "'",host, "'", ';' )
from mysql.user
where user
not in ( 'root', 'mysql.infoschema', 'mysql.session', 'mysql.sys')
;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.


4 在MySQL8.x执行

      
      
将上面几步获取到的结果,在8.x的MySQL上执行,注意最后要 flush privileges; 下,因为我们是直接改用户表的!
  • 1.
原网站

版权声明
本文为[51CTO]所创,转载请带上原文链接,感谢
https://blog.51cto.com/lee90/5557567