docker 的centos容器搭建javaweb环境时mysql部分遇到的问题

照着腾讯云上的 搭建Java Web开发环境 这个实验,在自己的服务器上按部就班来做实验,发现jdk和tomcat部分都没有太大问题,一到mysql就不行了,问题很多,出问题的原因我觉得应该是实验室提供的是centos6.8,而购买的服务器选的是centos7。

使用yum安装mysql

yum install -y mysql-server mysql mysql-devel

该命令一执行后就哗啦啦啦地下载一大堆东西,当以为装好后,仔细看最后的信息,发现有点不对劲,显示安装的是mariadb.x86_64 1:5.5.60-1.el7_5,而不是mysql,关于原因:https://www.jb51.net/article/115540.htm

大概就是说,centos7下新系统无法再使用yum install mysql-server来安装mysql,因为已使用mariadb代替mysql!!!(所以说6和7的差别不是一般的大)

https://*.com/questions/31067135/in-centos7-can-not-start-mysql

这里抄袭一段记录一下:

docker 的centos容器搭建javaweb环境时mysql部分遇到的问题

 

docker 的centos容器搭建javaweb环境时mysql部分遇到的问题

 

但是我就想,既然mariadb和mysql的关系那么密切,应该所使用的命令差不多吧?

service mysqld restart

执行这句时提示:bash: service: command not found

docker 的centos容器搭建javaweb环境时mysql部分遇到的问题

 

好像是在docker里面的centos镜像本身就比较小,很多功能默认是没有的,关于bash: service: command not found的解决

yum list | grep initscripts
yum install initscripts.x86_64

 

服务安装了,再次运行 service mysqld restart 出现的提示:

docker 的centos容器搭建javaweb环境时mysql部分遇到的问题

 

关于这个:Failed to get D-Bus connection: Operation not permitted,貌似是centos7镜像本身的一个bug,解决方法

https://*.com/questions/50393525/failed-to-get-d-bus-connection-operation-not-permitted

docker 的centos容器搭建javaweb环境时mysql部分遇到的问题

 

这意思是,在执行将镜像变成容器这一步时就应该加上 --privileged 参数,赋予它某种权限?

所以把自己当前作了修改的容器重新commit成一个名为 centos-java的镜像,下次创建容器时直接用该镜像。

因为自己的容器里面有tomcat和mysql,所以执行了以下的命令,顺便把端口映射也做了

docker run -it --privileged -p 8081:8080 -p 3307:3306 centos-java /usr/sbin/init

但是,问题来了,运行上面那条命令后一直卡住了,一开始以为是需要运行那么久的,但是新开一个连接窗口,用 docker ps 一看,这个容器已经存在了,就是不知道为什么卡住了(可能是少用了参数 ‘-d’)?

然而,当在新的窗口使用 docker attach +id 想进入该容器时,发现又卡住了!!!

最后还是用

docker exec -it containerID /bin/bash

才进去的!!!

原因可能是这个?

docker 的centos容器搭建javaweb环境时mysql部分遇到的问题

 

 

最后终于进到容器里面了,检查了一下java和tomcat的配置,一切正常。

但是,新问题又来了!

[root@fd0fd1371b93 bin]# service mysqld start 
  Redirecting to /bin/systemctl start mysqld.service
  Failed to start mysqld.service: Unit not found

 Failed to start mysqld.service: Unit not found.

原因是之前提到过的,centos7安装的是mariadb了,所以提示找不到mysqld.server

解决:https://cloud.tencent.com/developer/ask/45981

(如果提示没有mariadb-server的话还得先 yum install -y mariadb-server

systemctl start mariadb.service
systemctl enable mariadb.service
mysql_secure_installation

 

执行最后的 mysql_secure_installation 后,就是选择数据库的相关配置了,比如设置秘密等

docker 的centos容器搭建javaweb环境时mysql部分遇到的问题

配置结束后,想尝试连接数据库,有以下的提示

host is not allowed to connect to this mariadb server

好吧,可能是上一步配置选择不当导致的(我记得好像有得选的),现在又要重新搞一遍

解决:进入到数据库里面执行

MariaDB [(none)]> grant all privileges on *.* to 'root'@'%' with grant option;

再执行

MariaDB [(none)]> flush privileges;

最后重启数据库服务

systemctl restart mariadb

还有就是,如果遇到

1045 - Access denied for user 'root'@'111.222.111.32'(using password:YES)

请参考这篇:https://www.cnblogs.com/Guhongying/p/10901895.html