Docker部署MySQL

由于自己测试的时候发现5.78.0部署不太一样,所以这里分2个版本来部署。

docker 部署 MySQL 5.7

直接运行运行一个5.7版本的MySQL

docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql57 -d mysql:5.7

MYSQL_ROOT_PASSWORD 指定了 root 的密码。

进入容器中,登陆到MySQL,需要输入root的登录密码。

docker exec -it mysql57 mysql -uroot -p

看看mysql.user表中的数据

mysql> select Host,User,plugin from mysql.user;
+-----------+---------------+-----------------------+
| Host      | User          | plugin                |
+-----------+---------------+-----------------------+
| localhost | root          | mysql_native_password |
| localhost | mysql.session | mysql_native_password |
| localhost | mysql.sys     | mysql_native_password |
| %         | root          | mysql_native_password |
+-----------+---------------+-----------------------+
4 rows in set (0.00 sec)

可以看到root用户可以在任意机器进行登陆。

于是在本地使用Sequel Pro尝试连接

使用Sequel Pro进行远程连接

可以看到,在5.7版本下可以直接连接上

成功连接

docker 部署 MySQL 8.0

按照5.7版本那样,直接运行一个8.0版本的MySQL

docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql8 -d mysql:8.0

MYSQL_ROOT_PASSWORD 指定了 root 的密码。

进入容器中,登陆到MySQL,需要输入root的登录密码。

docker exec -it mysql8 mysql -uroot -p

看看mysql.user表中的数据

mysql> select Host,User,plugin from mysql.user;
+-----------+------------------+-----------------------+
| Host      | User             | plugin                |
+-----------+------------------+-----------------------+
| %         | root             | caching_sha2_password |
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session    | caching_sha2_password |
| localhost | mysql.sys        | caching_sha2_password |
| localhost | root             | caching_sha2_password |
+-----------+------------------+-----------------------+
5 rows in set (0.00 sec)

可以看到MySQL8默认的认证方式是caching_sha2_password,而在MySQL5.7版本则为mysql_native_password

我们先不做任何改变,直接使用Sequel Pro尝试连接

使用Sequel Pro进行远程连接

可以发现,需要caching_sha2_password认证方式登陆,目前的客户端工具暂时还不支持caching_sha2_password认证方式登陆。

aching_sha2_password认证报错

解决方案

目前还没看到好的解决方案。

看到不少博文说

  1. 配置--default-authentication-plugin=mysql_native_password

  2. 兼容新老版本的认证方式

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'root' PASSWORD EXPIRE NEVER; #修改加密规则 
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; #更新一下用户的密码 
    FLUSH PRIVILEGES; #刷新权限
    

但是我自己试了这2种方式,仍然无法通过Sequel Pro远程进行连接??囱雍孟袷荢equel Pro的问题,并不是MySQL 8的问题。使用test-build版本的Sequel Pro进行连接就能可以正常连接了。

使用docker-compose进行部署

上面部署都是直接通过docker命令运行一个容器,但是在生产环境中很少会使用这种方式进行部署,通常都是通过docker stack进行部署的,docker stack会使用一个yml配置文件来进行部署,所以这里就演示通过docker-compose来部署,那么使用docker stack进行部署时就比较简单了

version: '3.7'
services:
  db:
    image: mysql:5.7 # 基础镜像
    secrets:
      - mysql_root_password # 这里使用了docker的secret机制,防止直接在yml文件中直接暴露root的密码
    environment:
      MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql_root_password # 通过文件的方式来指定root密码
      MYSQL_USER: wemeng # 非root的用户名
      MYSQL_PASSWORD: 123456 # 非root密码
    ports:
      - 3306:3306 # 暴露的端口
    networks:
      - net # 使用的网络
    volumes:
      - [你指定的绝路径]:/var/lib/mysql # mysql的默认数据存放位置是/var/lib/mysql,通过volumn可以持久化mysql的数据
      - [你指定的绝路径]:/etc/mysql/conf.d # 当 MySQL 服务启动时会以/etc/mysql/my.cnf为配置文件,本文件会导入 /etc/mysql/conf.d 目录中所有以 .cnf 为后缀的文件。这些文件会拓展或覆盖 /etc/mysql/my.cnf 文件中的配置。因此你可以创建你自己需要的配置文件并挂载至 MySQL 容器中的/etc/mysql/conf.d目录。
      - ./init-db:/docker-entrypoint-initdb.d/ # init-db目录映射到/docker-entrypoint-initdb.d,那么就可以在改目录下放一些初始化的sql语句
secrets:
  mysql_root_password:
    file: mysql_root_password.txt # 指定secret的文件
networks:  # 配置网络
  net:
    ipam:
      config:
        - subnet: 172.28.0.0/16

有了上述配置文件,可以直接通过

docker-compose -f docker-compose.yml up

就可以直接启动了,后面会发布多个服务时,只需要讲services里面再添加其他服务就可以使用docker stack进行部署了

欢迎关注我的公众号

我的公众号
最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容