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://stackoverflow.com/questions/31067135/in-centos7-can-not-start-mysql
这里抄袭一段记录一下:
但是我就想,既然mariadb和mysql的关系那么密切,应该所使用的命令差不多吧?
service mysqld restart
执行这句时提示:bash: service: command not found
好像是在docker里面的centos镜像本身就比较小,很多功能默认是没有的,关于bash: service: command not found的解决
yum list | grep initscripts
yum install initscripts.x86_64
服务安装了,再次运行 service mysqld restart 出现的提示:
关于这个:Failed to get D-Bus connection: Operation not permitted,貌似是centos7镜像本身的一个bug,解决方法
https://stackoverflow.com/questions/50393525/failed-to-get-d-bus-connection-operation-not-permitted
这意思是,在执行将镜像变成容器这一步时就应该加上 --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
才进去的!!!
原因可能是这个?
最后终于进到容器里面了,检查了一下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 后,就是选择数据库的相关配置了,比如设置秘密等
配置结束后,想尝试连接数据库,有以下的提示
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