最近在学习JVM、SpringBoot、Mysql、多线程和并发,加上在家中躲避疫情有时间,于是想搭建一个基于SpringBoot的开源博客halo学习。
halo默认使用h2数据库,不过由于博客是开放平台,h2 console不可以打开,并且最近在增强对mysql数据库的练习,因此想着在云服务器上再搭一个mysql。
首先在菜鸟教程找了一篇mysql安装教程,顺利的安装并运行了5.6版本。不幸的是,在我看halo官方修改数据库配置的时候,发现halo支持5.7以上版本。为了避免版本冲突,就把5.6卸载并安装8.0。
8.0的安装过程还算顺利,但是在开启mysql服务的时候:
systemctl start mysqld.service
开始出现问题了:
mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Fri 2020-02-07 12:12:48 CST; 6s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 29626 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS (code=exited, status=1/FAILURE)
Process: 29593 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 29626 (code=exited, status=1/FAILURE)
Status: "Server startup in progress"
Error: 13 (Permission denied)
Feb 07 12:12:47 VM_0_12_centos systemd[1]: Starting MySQL Server...
Feb 07 12:12:48 VM_0_12_centos systemd[1]: mysqld.service: main process exited, code=exited, status=1/FAILURE
Feb 07 12:12:48 VM_0_12_centos systemd[1]: Failed to start MySQL Server.
Feb 07 12:12:48 VM_0_12_centos systemd[1]: Unit mysqld.service entered failed state.
Feb 07 12:12:48 VM_0_12_centos systemd[1]: mysqld.service failed.
一开始还只是以为mysql5.6没有卸载干净,没多想,直接按照网上教程彻底卸载mysql,重装还是出现问题。
又仔细看了一下,是这个命令执行失败了:
/usr/sbin/mysqld $MYSQLD_OPTS (code=exited, status=1/FAILURE)
我自己在终端试了一下这个命令,发现有一个warning:
TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details
这个问题在 /etc/my.cnf 配置文件添加 explicit_defaults_for_timestamp=true
除了这个问题,还有一个error:
[ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!
mysqld模式不允许root模式启动,同样需要在配置文件添加 user=mysql
确保mysqld可以启动的前提下,我又运行了一遍 mysqld.service,发现还是报错。结合下面的错误提示:
Error: 13 (Permission denied)
我觉得可能是/usr/sbin 路径权限的问题,于是使用赋予权限的指令:
chown -R mysql:mysql /usr/sbin
这个问题就排除了。
期间还报了一个类似的错误:
Could not open file '/var/log/mysqld.log' for error logging: Permission deni
同样,给mysql赋予权限就可以解决。
解决了以上问题,还是报错,这次只给了 Status: "Server startup in progress" 这么一个状态,没有错误代码。通过查看日志 /var/log/mysqld.log ,发现一直存在的问题还是没有解决:
--initialize specified but the data directory has files in it.
Aborting.
这个问题之前在网上搜索是删除 /var/lib/mysql 然后重启。在未解决以上问题之前,这个办法似乎没有用。当时头就很大。在多次尝试之后,本着放弃的态度尝试最后一遍这个方法,最后发现竟然可以运行啦。
mysql8关于设置密码的问题,网上教程有很多,在这里就不赘述了。
回过头反思了一下搭建博客网站的过程,发现自己还是有一些成长的。之前在linux系统上找错误,心里一直是非常抵触的,特别担心解决了一个问题之后,接二连三还是有问题。通过这次的经历,明白了找错误无非就是找log文件位置,定位到错误行,分析错误原因,调试并解决问题。有问题就勇敢的面对,并尝试各种手段解决。之前的实习也有类似的问题,想一想,大部分都是在师傅的帮助下解决的,真正在centos系统中发现问题、定位错误原因,还是第一次。到了正式工作的环境中,相信这样的情况肯定还会更多。如果自己不去想,不去上手,就永远不会成长。
最近疫情非常严重,得知李文亮医生不幸去世,深感痛惜。愿“平凡”的李医生一路走好。