1 背景描述
CentOS-8.5.2111-x86_64安装mysql-8.4.4-linux-glibc2.28-x86_64, 启动服务时 systemctl start mysqld,报错:Job for mysqld.service failed because the control process exited with error code.See "systemctl status mysqld.service" and "journalctl -xe" for details.
2 、问题原因定位
2.1 查询日志
cat /usr/local/mysql/logs/mysql-error.log
2.2 原因分析
首先,执行`systemctl start mysqld`时出现错误,提示控制进程退出,错误代码。查看提供的错误日志,有几个关键错误点需要关注:
1. **ERROR [MY-000067] [Server] unknown variable 'query_cache_type=1'**
- 这个错误表明在配置文件中存在一个MySQL 8不再支持的参数。查询缓存(Query Cache)在MySQL 8.0之后已经被移除了,所以继续使用`query_cache_type`会导致启动失败。
2. **ERROR [MY-013236] [Server] The designated data directory /usr/local/mysql/data/ is unusable. You can remove all files that the server added to it.**
- 数据目录无法使用,可能因为初始化失败或者目录权限问题,或者目录中存在不完整的文件。
3. **ERROR [MY-010735] [Server] Could not open the mysql.plugin table. Please perform the MySQL upgrade procedure.**
- 提示`mysql.plugin`表不存在,说明系统表可能没有正确初始化,或者在升级过程中出现问题,需要执行MySQL的升级步骤。
4. **多个关于优化器成本常数表和Gtid表的警告**
- 这些表不存在或无法打开,同样指向系统表未正确初始化的问题。
接下来,我需要根据这些错误信息逐步解决问题:
首先,处理`query_cache_type=1`的问题。用户可能在`my.cnf`配置文件中设置了已经废弃的参数,需要删除或注释掉这一行。由于MySQL 8移除了查询缓存,所以必须移除相关配置。
其次,数据目录的问题。错误日志指出数据目录不可用,可能需要重新初始化数据目录。用户之前可能尝试过初始化但未完成,或者在初始化过程中出现错误,导致数据目录中存在残留文件。需要清理数据目录并重新初始化。
然后,系统表缺失的问题,如`mysql.plugin`不存在,这通常是因为初始化过程没有正确完成。需要确保以正确的方式初始化数据目录,使用`mysqld --initialize`或`mysqld --initialize-insecure`命令,并且指定正确的数据目录路径。
另外,还需要检查数据目录的权限是否正确,确保MySQL用户(通常是mysql)对数据目录有完全的读写权限。如果权限不正确,MySQL无法创建或访问必要的文件,导致启动失败。
此外,用户在之前的步骤中可能没有正确配置`my.cnf`文件,比如数据目录路径、socket文件位置、日志路径等,需要确保这些配置正确无误,并且相关目录存在且权限正确。
最后,可能需要执行MySQL的升级步骤,尤其是在数据目录初始化后,如果有旧版本的数据残留,但在此情况下,用户是全新安装,所以更可能是初始化未完成导致的系统表缺失,正确初始化后应该可以解决。
总结解决方案步骤:
1. 修改配置文件,删除废弃参数`query_cache_type`。
2. 清理数据目录,确保没有残留文件。
3. 重新初始化数据目录,使用正确的命令和参数。
4. 调整数据目录权限,确保mysql用户拥有权限。
5. 启动MySQL服务,检查是否成功。
6. 如有必要,执行后续的密码重置和配置调整。
需要确保每一步都正确执行,并验证日志以确认问题是否解决。可能还需要检查其他配置参数是否正确,例如`innodb_redo_log_capacity`代替旧的参数,避免警告信息,但主要问题在于初始化失败和配置错误。
3、解决方案
3.1 清理并重新初始化数据目录
3.1.1 停止服务(如果正在运行)
sudo systemctl stop mysqld
3.1.2 删除旧数据目录(请根据实际路径调整)
sudo rm -rf /usr/local/mysql/data/*
3.1.3 确保目录所有权
sudo chown -R mysql:mysql /usr/local/mysql/data
3.2 取消开机启动并重启系统
systemctl disable mysqld
reboot
3.3 执行数据目录初始化
系统启动后,重新设置开机启动
systemctl enable mysqld
执行 初始化命令
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
启动数据库服务
#开启mysql
systemctl start mysqld
#查看状态
systemctl status mysqld
至此,成功。