问题发生在,尝试把腾讯云服务下的数据库开放远程连接后,不知道修改了哪个配置。导致本地后台运行的项目报错。
首先重新启动本地jar包,查看报错,显示数据库连接不上了。
既然是数据库问题,那就先看看是不是本地数据库没有启动。
奇怪的是使用systemctl status mysqld命令就会报错,显示启动失败
但是systemctl status mysql却是可以正常运行
既然使用mysql -uroot -p可以正常进入,那么mysql应该是启动成功了的
思索后上网查了一下发现,原来在 Ubuntu 系统中,MySQL 服务的名称是 `mysql` 而不是 `mysqld`。因此,当你运行 `systemctl status mysql` 时,它会检查 `mysql` 服务的状态,而运行 `systemctl status mysqld` 时,它会尝试检查 `mysqld` 服务的状态,但是在 Ubuntu 系统中,`mysqld` 服务通常不存在。
如果你的 MySQL 服务名称是 `mysql`,那么只有使用 `systemctl status mysql` 命令才能正确显示 MySQL 服务的状态。如果你运行 `systemctl status mysqld`,它会尝试查找一个名为 `mysqld` 的服务,并因此显示启动失败。
既然mysql启动成功了话,那就看看日志有没有报错吧
先去‘/etc/mysql/mysql.conf.d’ 查看一下配置文件 (其实我最先怀疑的就是之前为了连接远程数据库时,修改了配置文件中的一些参数导致了数据库连不上,但是在检查参数后,并没有发现问题)
配置文件里有问题日志的路径,继续查看问题日志,显示报错如下
2024-04-27T09:37:43.002670Z 0 [Note] /etc/init.d/mysqld: Shutdown complete
2024-04-27T09:37:38.401161Z 0 [Note] InnoDB: Check that you do not already have another mysqld process using the same InnoDB data or log files.
2024-04-27T09:37:39.401258Z 0 [ERROR] InnoDB: Unable to lock ./ibdata1 error: 11
2024-04-27T09:37:42.401669Z 0 [Note] InnoDB: Check that you do not already have another mysqld process using the same InnoDB data or log files.
2024-04-27T09:37:42.401684Z 0 [Note] InnoDB: Unable to open the first data file
2024-04-27T09:37:42.401707Z 0 [ERROR] InnoDB: Operating system error number 11 in a file operation.
2024-04-27T09:37:42.401714Z 0 [ERROR] InnoDB: Error number 11 means 'Resource temporarily unavailable'
2024-04-27T09:37:42.401718Z 0 [Note] InnoDB: Some operating system error numbers are described at http://dev.mysql.com/doc/refman/5.7/en/operating-system-error-codes.html
2024-04-27T09:37:42.401721Z 0 [ERROR] InnoDB: Cannot open datafile './ibdata1'
日志中显示了 MySQL 试图启动但失败的情况。主要问题是 InnoDB 存储引擎无法锁定 'ibdata1
'文件。
'ibdata1
'文件被占用导致无法获取
这就奇怪了,我也没手动使用过这个文件,怎么会出现占用呢,但是既然报错这么说,那就查看一下文件的使用情况吧。在终端运行以下命令
sudo lsof /var/lib/mysql/ibdata1
这将显示正在使用 ibdata1
文件的进程,以及这些进程的详细信息。如果没有显示任何输出,那么就没有进程在使用该文件,如果有输出,则会列出使用该文件的进程及其相关信息。
根据输出,可以看到有一个 mysqld
进程正在使用 ibdata1
文件。这表明MySQL服务(mysqld
)正在使用该文件。
虽然不知道这个mysqld哪儿来的,既然它占用了ibdatal文件导致mysql无法运行,那就使用如下命令杀死所有 MySQL 进程。
sudo pkill -f mysqld
然后再运行项目,大功告成,直接就跑起来了
但还是没弄清楚为什么‘ibdata1
’被占用了,在此记录一下