docker 安装 mysql
docker 环境安装
本文演示的环境是腾讯云的服务器,Linux版本:centos7; 已经安装了 docker 环境,版本:Docker version 20.10.12;
拉取镜像
执行 docker 命令拉取 mysql 镜像,默认拉取最新版本(mysql-8.0.27):
docker pull mysql
运行容器
在运行容器前,我们需要设置一些对应的参数:
- 启动时映射对应端口到宿主机;
- 启动时需要设置登录密码;
- 启动时需要把数据进行挂载到宿主机(包含配置文件conf 和数据文件);
docker run -d -p 3306:3306 -v /opt/software/mysql/conf:/etc/mysql/conf.d -v /opt/software/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='root' --name=mysql-test mysql
-d 后台启动
-p 端口映射
-v 数据卷挂载
-v /opt/software/mysql/conf:/etc/mysql/conf.d # 挂载 mysql 配置文件
-v/opt/software/mysql/data:/var/lib/mysql # 挂载 mysql 数据文件
-e MYSQL_ROOT_PASSWORD='root' # 设置 mysql 的登录密码,不设置启动容器失败
--name # 给容器起个名字
运行成功后,我们可以进入容器进行登录:
docker exec -it mysql-test /bin/bash
# 在容器中登录 mysql
mysql -u root -p
# 输入密码 root 成功登录
设置远程访问
mysql 容器启动成功之后,我们在本地通过工具,进行远程连接,我这里使用 SQLyog;
测试连接的时候,发现报错了,如下图:
直接把报错信息贴到网上,大概意思是:在MySQL 8.0中,caching_sha2_password是默认的身份验证插件,而不是mysql_native_password,有以下解决方案:
- 升级 SQLyog
- SQLyog-13.1.6-0.x64是默认支持 mysql8.0 以上身份验证,把低版本的sqlyog升级到13.1.6就可以解决。
- 修改 mysql 的认证方式
选用第二种,直接在容器中登录 mysql 然后执行以下命令:
# 修改加密规则(非必须)
ALTER USER 'root'@'%' IDENTIFIED BY 'root' PASSWORD EXPIRE NEVER;
# 更新用户的密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
# 刷新权限
FLUSH PRIVILEGES;
# 重置密码(==非必须==)
ALTER USER 'root'@'%' IDENTIFIED BY 'root';
修改完成后,再进行连接,就成功了:
安装时踩的坑
mysql 容器挂载 /var/lib/mysql
之后,启动失败了
运行容器命令:
docker run -d -p 3306:3306 -v /opt/software/mysql/conf:/etc/mysql/conf.d -v /opt/software/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='root' --name=mysql-test mysql
我挂载了 -v /opt/software/mysql/data:/var/lib/mysql
表面看着成功了,实际上 mysql 启动失败了
docker ps -a
看到容器时已经退出的状态
docker logs -f mysql-test
查看日志发现启动报错了:
我这里主要的报错信息:
[ERROR] --initialize specified but the data directory has files in it. Aborting.
[ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.
网上找了很久的资料,大多数都说是权限之类的问题,直接在启动的时候加多一个参数: --privileged=true
然后我加上了之后并不能解决我的问题,由于新手也不懂是为什么报错,按照网上的说法搞了个遍,还是解决不了,直接想放弃了;
参考文章:
https://blog.csdn.net/john1337/article/details/96272398
https://github.com/docker-library/mysql/issues/69#issuecomment-269537249
后来想到在用 docker 安装 jenkins 的时候,挂载 jenkins_home 的时候,是直接把宿主机的目前权限全放开的,决定也试一试:chmod -R 777 mysql
然后在执行,果不其然,直接就启动成功了;泪目啊!!!!!!
远程访问 mysql 时,提示:“plugin caching_sha2_password could not be loaded”
参考文章:
linux 下 mysql 表名区分大小写问题
https://blog.csdn.net/boya734698063/article/details/38421419