images/default4.jpg

Access denied for user

Monday, Aug 3, 2020

在开发的过程中坎坷不断。今天在Spring Boot中碰到了这个异常: `Caused by: com.mysql.cj.exceptions.CJException: Access denied for user 'root'@'localhost' (using password: YES)` 本篇文章就来记录下可能的情况以及解决方案。 问题原因 问题的根源就在数据库登陆上。肯定是账号和密码有误,所以我们要仔细检查配置文件,有以下几个地方容易出错: 情况一:检查配置文件是否包含空格 因为application.yml似乎并不会给我们的配置文件进行去空格处理,所以我们来仔细检查。配置文件人模人样的,看起来没啥问题: 结果一选中: 呵!其实不然。所以一定要去除多余的空格! 情况二:检查username和password值是否写反 因为26个字母中u在p的后面,所以默认的yml排序中username会在password下面。阿航就是踩了这个坑!以为用户名在上方,导致写反! 情况三:检查IP是否正确 如果确定账户密码正确,我们就来看看IP是否有误吧。 在数据库中输入以下SQL进行查询(这里以MySQL为例): ` SELECT CONCAT( USER, '@', HOST ) Result FROM mysql.USER;` 查看返回结果是否包含你的报错。如果不包含就说明你的IP未被创建。 情况四:检查数据库服务器配置 使用其他的软件连接你的数据库(如Navicat),使用相同的用户名和密码看看能否登陆。如果不能登陆则是数据库层的问题,与代码无关了。 结语 总之,解决方案就是细心。。
1 minute read
images/default4.jpg

MySQL JOIN MIN()/MAX() 组合使用

Tuesday, Jun 9, 2020

这次阿航在开发后端接口, 写复杂SQL查询时碰到了这个问题, 我需要将MySQL的JOIN关键字和MIN()同时使用. 本篇文章就来记录下MySQL JOIN MIN()/MAX()的组合使用. 应用场景 大家都有过淘宝网购的经历, 应该记得在搜索时, 出来的结果列表都是每个产品的最小价格. 点进去后, 选择不同的型号会有相应的价格. 阿航碰到的是我有两个表, 一个是SPU(产品表), 一个是SKU(商品表), 它们是一对多的关系(因为一款产品会有多个型号). 我需要在查询SPU的同时, 再把对应的最便宜的SKU的价格进行返回. 总结: 一对多关联查询, 并且把多的表的最大/最小值返回. 实战开始 [epcl_box type=“information”]为了方便大家理解, 阿航在这里进行相应的简化[/epcl_box] 数据关系 先来看下两个表的关系: 其中, 一个SPU对应多个SKU ( 比如一件衣服有多个颜色 ). 💡 解析 初始化数据库 进入数据库, 运行以下SQL语句定义并初始化数据表: CREATE DATABASE mysql_join_demo DEFAULT CHARACTER SET = 'utf8mb4'; USE mysql_join_demo; CREATE TABLE t_spu( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键', name VARCHAR(32) NOT NULL COMMENT '产品名', PRIMARY KEY (id) ) COMMENT = '产品SPU表'; CREATE TABLE t_sku( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键', spu_id BIGINT NOT NULL COMMENT '产品ID', spec VARCHAR(32) NOT NULL COMMENT '型号', price BIGINT NOT NULL COMMENT '价格', PRIMARY KEY (id) ) COMMENT = '商品表'; INSERT INTO `mysql_join_demo`.
2 minute read
images/default2.jpg

Docker 安装 MySQL

Monday, Apr 13, 2020

本文为 docker 安装 mysql 容器的完整详细教程. 若图片展示异常, 请访问我的官方博客 准备工作 开发环境 本博客的环境一览: 环境 版本号 docker 1.13.1 注意您的环境和文中的差异, 避免出现不兼容的情况哦! 需具备的条件 要顺利阅读本文, 假定您已经掌握了以下知识: docker环境已正常安装 掌握基本的终端命令 实战开始 查询所有的mysql镜像 docker search mysql 选择并拉取你想要的镜像(这里拿官方的mysql8进行举例) docker pull mysql:8.0 查询已下载的MySQL镜像 docker images |grep mysql 使用镜像创建容器 docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0 解析: -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。 -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的/etc/mysql/my.cnf。 -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。 -v $PWD/data:/var/lib/mysql:将主机当前目录下的data目录挂载到容器的 /var/lib/mysql **-e MYSQL_ROOT_PASSWORD=123456:**初始化 root 用户的密码。 查看容器运行情况 docker ps 优雅关闭 docker stop [容器id] 启动已停止的容器 docker start [容器id] 重启容器 docker restart [容器id] 大功告成 通过以上的一些步骤, 我们完成了Dokcer安装Mysql的目标, 是不是很简单?
1 minute read