docker安装MySQL记录及踩坑

前情提要

在学习开源框架时,觉得非常不错,准备部署在本地进行调试一下,发现此项目使用的是MySQL数据,但本地没有安装数据库,那怎么办?装呗!准备直接下载个安装包直接装在本地,但发现本地安装占用资源是在是太多了,那就通过docker装一个吧,说干就干!

准备镜像

直接通过docker search 命令检索一下MySQL镜像

docker search mysql

在这里插入图片描述
得到比较多的image,一般我们默认选择第一个star数最多的,也就是官方的image,其他image都是一些公司或者个人打包的镜像,在安全的情况下,建议还是使用官方镜像较为稳妥。

此处我选择就是,第一个官方镜像,直接通过docker pull mysql命令拉取镜像,默认拉取最新版本lasted,如需安装指定版本,添加版本号即可。

docker pull mysql 或 docker pull mysql:5.7.39(指定版本号)

拉取完毕后,通过docker images命令查看镜像列表,我这里指定了镜像名称,可以看到我这里有两个版本的MySQL 镜像,其中tag:5.7.39就是我刚才拉取的

docker images mysql

在这里插入图片描述

启动容器

哈哈哈,一切准备就绪,那么直接一条命令启动容器吧!(这里启动的8版本)(我记错了容器内的端口了。。。

docker run -v "/Users/XXXX/tools/docker/mysql/data":/var/lib/mysql --name my-mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:33060 -d mysql

在这里插入图片描述
完美,打完收工!用Navicat连接一下吧!
在这里插入图片描述
嗯?什么情况怎么连不上?搞什么飞机?仔细有检查了一遍,镜像没问题,启动也正常,但就是无法连接,进到容器里面看看,发现服务也正常,那么只能是一个可能性了,端口映射有问题,先查一下,容器内部的mysql服务的端口,果然是我搞错端口了。。。
在这里插入图片描述
在这里插入图片描述
删掉容器,重新启动

docker rm -f my-mysql
docker run -v "/Users/XXXX/tools/docker/mysql/data":/var/lib/mysql --name my-mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql

在这里插入图片描述
再次使用Navicat连接试一下,连接成功,完美收工!
在这里插入图片描述
导入数据库,启动项目,嗯?什么情况?

Caused by: org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: Table 'mt.QRTZ_LOCKS' doesn't exist
	at org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:157)
	at org.quartz.impl.jdbcjobstore.DBSemaphore.obtainLock(DBSemaphore.java:113)
	at org.quartz.impl.jdbcjobstore.JobStoreCMT.executeInLock(JobStoreCMT.java:238)
	at org.quartz.impl.jdbcjobstore.JobStoreSupport.clearAllSchedulingData(JobStoreSupport.java:2002)
	at org.quartz.core.QuartzScheduler.clear(QuartzScheduler.java:1541)
	at org.quartz.impl.StdScheduler.clear(StdScheduler.java:239)

表不存在,马上去Navicat里搜索了一下,发现有啊,怎么会不存在呢?
在这里插入图片描述
于是乎,写一个查询语句查一下吧,还真找不着!
在这里插入图片描述
是不是大小写敏感的问题呢?换成了小写,再查一次,果然正常了!实锤了,就是大小写的问题!
在这里插入图片描述
怎么解决呢?查询官方文档(https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_lower_case_table_names),原来默认将表名大小写敏感开启了,那么我们的目标就明确了,就是禁止它开启,大小写就均可查询!
在这里插入图片描述
只需要在启动命令中增加 --lower-case-table-names=1 命令即可,然后重新初始化数据库,已经初始化过的数据库无法生效!重新创建容器!
注意:以上操作均是因为当前数据库为新库,没什么需要备份的数据,所以反复删除均无所谓,实际应用时,建议先进行数据备份,然后再删除容器!

docker run -v "/Users/XXXX/tools/docker/mysql/data":/var/lib/mysql -v /Users/yangdongming/tools/docker/mysql/my.cnf:/etc/mysql/my.cnf --name my-mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql --lower-case-table-names=1

在这里插入图片描述
再次通过Navicat验证,表名大小写问题已解决!!重新启动项目,完美运行!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值