昨天突然收到数据库启动不了的通知,要紧急处理。
查看错误日志报错如下:
Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
2024-04-17T09:47:27.329763Z 0 [ERROR] [MY-010952] [Server] The privilege system failed to initialize correctly. For complete instructions on how to upgrade MySQL to a new version please see the 'Upgrading MySQL' section from the MySQL manual.
Could not open the mysql.plugin table. Please perform the MySQL upgrade procedure.
解决方案步调:
1. 修改my.cnf配置文件,设置为无密码登录模式,然后启动。
vi /etc/my.cnf
[mysqld]
skip-grant-tables
2、启动mysql, service mysqld start
MySQL Server 8.0包罗一个全局数据字典,此中包罗事务表中数据库对象的信息。在以前的MySQL系列中,字典数据存储在元数据文件和非事务性系统表中。
启用数据字典的服务器会带来一些一般性操作上的差异;官方文档阅第16.7节“数据字典使用差异”。详细解释如下:
使用启用数据字典的MySQL服务器与没有数据字典的服务器相比,会导致一些操作上的差异:
1. 以前,启用 innodb_read_only 系统变量只阻止了对 InnoDB 存储引擎的表举行创建和删除操作。从 MySQL 8.0 开始,启用 innodb_read_only 会阻止所有存储引擎的这些操作。任何存储引擎的表创建和删除操作都会修改 mysql 系统数据库中的数据字典表,但这些表使用的是 InnoDB 存储引擎,在启用 innodb_read_only 时无法修改。对于需要修改数据字典表的其他表操作也实用相同的原则。
例如:
ANALYZE TABLE 失败,因为它会更新存储在数据字典中的表统计信息。
ALTER TABLE tbl_name ENGINE=engine_name 失败,因为它会更新存储在数据字典中的存储引擎指定。
复制代码
注意:启用 innodb_read_only 对 mysql 系统数据库中的非数据字典表也具有重要影响。