一、问题原因

问题开始是因为我不小心删除了根目录下的/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
chmod 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/syslog
tail -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
chmod  777 tmp/

然后执行sudo mysqld --initialize没有报错,然后执行sudo service mysql start没有报错
查询mysql服务 显示已有进程。

name@127:/$ sudo mysqld --initialize
name@127:/$ sudo service mysql start
name@127:/$ ps -ef |grep "mysql"
mysql    2496371       1 82 20:19 ?        00:00:21 /usr/sbin/mysqld

终于启动成功。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐