公司里面要求做一个小demo 学习java相关的东西
然后使用了mysql数据库
很早之前做过mysql的容器化运行. 现在想想已经忘记的差不多了 所以这里总结一下 docker化运行mysql数据库的方法
1. 先说 mariadb
其实mariadb 就是mysql创始人反抗oracle的一个硬分支 里面的 环境变量和数据文件的路径还基本上相似.
我这里就使用一个比较简单的 mariadb:10.1 的镜像进行演示
先看下 我这里的三个 iamges
1. 创建目录 mkdir /mariadbstorage 2. 运行 mariadb 的 容器 docker run -d -p 3307:3306 -v /mariadbstorage:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=Test6530 --name mariadbtest --restart=always mariadb:10.1 3. 使用工具进行验证
备注: 1. 3306 是默认mysql的端口号
2. /var/lib/mysql 是默认的 mysql数据存放路径
3. MYSQL_ROOT_PASSWORD 是默认的传送密码的环境变量.
工具显示的版本号:
2. mysql 8.0.17 我直接pull mysql 2019.7.31 pull 下来的 mysql的版本是 8.0.17
docker run -d -p 3308:3306 -v /mysqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=Test6530 --restart=always --name mysql mysql
这里面 其实命令 是完全一样的 不过里面有一个坑, 我通过一个网页学习了下
https://blog.csdn.net/wcuuchina/article/details/85674891
设置了 MYSQL_ROOT_PASSWORD 的环境变量之后 navicat 还是不能用 需要再进入容器内部修改一下
我怀疑肯定有别的办法来处理. 但是 还不是很清楚.
mysql已经将之前的mysql_native_password认证,修改成了caching_sha2_password认证方式。
所以,使用类似于navicat或是sqlyog这些客户端时,默认使用还是mysql_native_password认证方式,所以即使输入正确的用户和密码依然登录不成功。
解决方法
1. 进入容器 docker exec -it mysql /bin/bash 2.在容器内部执行命令 mysql -u root -p #输入 MYSQL_ROOT_PASSWORD的密码 #然后执行 use mysql alter user 'root'@'%' identified with mysql_native_password by 'Test6530';
#执行刷新权限的命令
flush privileges
#完成
验证版本
3. mysql 5.7.26
指定版本进行pull
然后执行命令即可
mkdir /mysql5726 docker run -d -p 3309:3306 -v /mysql5726:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=Test6530 --name mysql5726 --restart=always mysql:5.7.26
验证版本