docker 安装 mysql

时间:2024-03-12 14:33:19

docker 环境安装

本文演示的环境是腾讯云的服务器,Linux版本:centos7; 已经安装了 docker 环境,版本:Docker version 20.10.12;

拉取镜像

执行 docker 命令拉取 mysql 镜像,默认拉取最新版本(mysql-8.0.27):

docker pull mysql

image-20220112232921559

运行容器

在运行容器前,我们需要设置一些对应的参数:

  • 启动时映射对应端口到宿主机;
  • 启动时需要设置登录密码;
  • 启动时需要把数据进行挂载到宿主机(包含配置文件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                                           # 给容器起个名字

image-20220112233041250

运行成功后,我们可以进入容器进行登录:

docker exec -it mysql-test /bin/bash
# 在容器中登录 mysql
mysql -u root -p
# 输入密码 root 成功登录

image-20220113010434451

设置远程访问

mysql 容器启动成功之后,我们在本地通过工具,进行远程连接,我这里使用 SQLyog;

image-20220113010623041

测试连接的时候,发现报错了,如下图:

image-20220113010556351

直接把报错信息贴到网上,大概意思是:在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';

修改完成后,再进行连接,就成功了:

image-20220113011302987

安装时踩的坑

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 看到容器时已经退出的状态

image-20220113004308783

docker logs -f mysql-test 查看日志发现启动报错了:

image-20220113003210945

我这里主要的报错信息:

[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

https://www.cnblogs.com/fishsleep/p/13526402.html

后来想到在用 docker 安装 jenkins 的时候,挂载 jenkins_home 的时候,是直接把宿主机的目前权限全放开的,决定也试一试:chmod -R 777 mysql 然后在执行,果不其然,直接就启动成功了;泪目啊!!!!!!

远程访问 mysql 时,提示:“plugin caching_sha2_password could not be loaded”

参考文章:

https://www.cnblogs.com/likeyou99315/p/14940273.html