我在刚刚安装的debian 11.1上安装了非常新的mariadb 10.5(1:10.5.15-0+deb11u 1)。
在使用mysql-server (5.5.9999+default)和Debian9.6的旧机器上,我创建了如下所示的转储:
mysqldump -u root -pSOMEPW --all-databases > all_databases.dump我在新服务器上加载了这个转储:
source /path/to/all_databases.dump。源花了一段时间,没有导致任何错误,但是它在结束时发出了一次响声(没有可见的错误或警告消息)。
检查mysql.user表时,它只有3个条目用于根、mysql和mariadb.sys,因此我尝试使用以下命令创建用户(这些用户存在并在旧机器上使用):
create user 'testuser'@'localhost' identified by 'pw';但是它导致了这个错误:
ERROR 1396 (HY000): Operation CREATE USER failed for 'testuser'@'localhost'。
通过一个简短的脚本检查mysql db的所有表,“testuser”出现在3个不同的表中,但作为一个用户只能在db表中出现两次,如下所示:
| Host | Db | User | Select_priv
| localhost | somedb | testuser | Y
| localhost | somedbp2 | testuser | Y。
我认为这可能会导致创建用户失败。
如何在不丢失db表中的信息的情况下解决此问题?
谢谢。
发布于 2022-07-16 09:17:40
通常,当您切换到更新的MySQL或MariaDB版本时,或者在导入了从旧的主要版本中获取的备份之后,您都需要运行MySQL。
对于MariaDB 10.4和以后从MySQL或MariaDB 10.3或更高版本导入时尤其如此,因为内部特权表与10.4一起发生了很大的变化。
mysql.user表在10.4中被mysql.global_priv取代,允许更细粒度的身份验证控制,例如支持单个用户的多个身份验证插件。
所以现在mysql.user只是一个视图,以一种向后兼容的方式显示来自mysql.global_priv的信息。像用户和主机名这样的简单信息仍然可以通过该视图直接修改,因为它是一个可更新的视图,但是这对于更复杂的列不起作用。
而且,像CREATE USER这样的命令现在直接在mysql.global_priv表上操作,您所得到的错误是由于导入的转储中没有该表。
好消息是:mysql_upgrade将负责必要的转换,在此之后,CREATE USER将再次工作。
https://stackoverflow.com/questions/72920258
复制相似问题