一、问题原因
问题开始是因为我不小心删除了根目录下的/tmp目录(因为前一段时间被服务器攻击,看到可疑文件就删了。。。)
删除之后数据库就开始报错 如下:
org.springframework.dao.DataAccessResourceFailureException:### Error querying database. Cause: java.sql.SQLException: Can't create/write to file '/tmp/xxxxx' (OS errno 2 - No such file or directory)### The error may exist in class path resource [com/abc/wys/mapper/NameMapper.xml]### The error may involve defaultParameterMap### The error occurred while setting parameters### SQL: select name from ......
二、正确解决办法
数据库查询可能需要在这个目录创建临时文件,现在目录不存在了,导致查询失败,正确的做法是,把文件夹新建回来 修改一下文件夹权限:
cd /
sudo mkdir tmp
chomd 777 tmp/
三、二次错误记录
当时我想的是重启一下mysql服务看看会不会好,结果用的还是kill命令( 各位千万不用用kill命令结束mysql服务,可能会丢数据、mysql服务异常等)
要用: sudo service mysql stop 或者 sudo service mysql restart 直接重启
当kill掉mysql服务后
输入命令启动mysql服务
sudo service mysql start
提示启动失败
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Tue 2022-01-11 19:56:27 CST; 5s ago Process: 2495816 ExecStartPre=/usr/xxx/mysql/mysql-systemd-start pre (code=exited, status=1/FAILURE)
三、继续解决mysql启动问题
问公司大佬,给出的解决方案是查询/var/log下的两个文件(/var/log/syslog和/var/log/mysql/error.log)需要切换到root用户查看(su root 后 输入密码)
su root
tail -f /var/log/syslogtail -f /var/log/mysql/error.log
然后再启动mysql服务看这里的日志,结果没有找到有用的信息。
然后从网上搜索到启动前需要执行以下初始化(mysqld --initialize),前面需要加sudo 要不没有权限操作。
sudo mysqld --initialize#提示:mysqld: Can't get stat of '/tmp' (OS errno 2 - No such file or directory)
五、问题最终解决
又提示没有文件,我这个时候才新建tmp文件
cd /
sudo mkdir tmp
chomd 777 tmp/
然后执行sudo mysqld --initialize没有报错,然后执行sudo service mysql start没有报错
查询mysql服务 显示已有进程。
name@127:/$ sudo mysqld --initializename@127:/$ sudo service mysql startname@127:/$ ps -ef |grep "mysql"mysql 2496371 1 82 20:19 ? 00:00:21 /usr/sbin/mysqld
终于启动成功。
来源地址:https://blog.csdn.net/wuyuanshun/article/details/125079287