参考命令

拉取镜像

  1. # 比如想拉取 mysql5.7, 则 mysql:5.7
  2. docker pull mysql:<mysqlVersion>

容器启动命令

  • MYSQL_ROOT_PASSWORD 是 root 密码。

linux

  1. docker run --name mysql -p 3306:3306 \
  2. -e MYSQL_ROOT_PASSWORD=molotest123 \
  3. --volume=/usr/local/mysql:/var/lib/mysql -d mysql:5.7

macos

  1. docker run --name mysql -p 3306:3306 \
  2. -e MYSQL_ROOT_PASSWORD=molotest123 \
  3. --volume=/Users/`whoami`/mysql:/var/lib/mysql -d mysql:5.7

数据持久化到本地

数据持久化到本地,只需要挂载本地的目录。/var/lib/mysql 是 Mysql 存放数据的位置。

  1. $ docker run -d -e MYSQL_ROOT_PASSWORD=admin --name mysql -v /data/mysql/data:/var/lib/mysql -p 3306:3306 mysql

同一个镜像的话,只要挂载的本地目录相同,那么即便换一个容器,还是能够加载同样的数据的。这些数据不会丢失。

实践-重启 light_dev 上的Mysql

light_dev 上 mysql 新的启动命令:

  1. docker run --name=mysql --hostname=ee7518391b46
  2. --env=MYSQL_ROOT_PASSWORD=qwe123456
  3. --env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  4. --env=MYSQL_MAJOR=5.7 --env=MYSQL_VERSION=5.7.19-1debian8
  5. --volume=/usr/local/mysql:/var/lib/mysql --volume=/var/lib/mysql
  6. -p 3306:3306 --restart=always --detach=true mysql:5.7.19 mysqld

使用 runlike 分析出原来的启动命令:

  1. docker run --name=mysql --hostname=ee7518391b46
  2. --env=MYSQL_ROOT_PASSWORD=qwe123456
  3. --env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  4. --env=GOSU_VERSION=1.7
  5. --env=MYSQL_MAJOR=5.7
  6. --env=MYSQL_VERSION=5.7.19-1debian8
  7. --volume=/usr/local/mysql:/var/lib/mysql
  8. --volume=/var/lib/mysql -p 3306:3306
  9. --restart=no --detach=true mysql:5.7.19 mysqld

这个 restart 启动失败,原因是日志中看到了这些东西:

image.png

不知道为什么会疯狂连接 light_sit 这台机,还要搞 php 的客户端。

踩坑

使用了 Mysql8 的镜像

使用了 Mysql8 的镜像。

Mysql8 的镜像启动成功后,不允许本地连接。
改为 「容器启动命令」,mysql 启动失败有个异常:

[ERROR] [FATAL] InnoDB: Table flags are 0 in the data dictionary but the flags in file ./ibaredata1

这个异常很普遍,mysql 版本不兼容,导致换了 mysql 后挂载的目录受到污染不能正常启动了。

解决办法:

先把 Mysql5.7 的镜像指向一个另外一个目录,然后把受污染的目录的表文件 cp 过去就可以了。

删除镜像重建

删除镜像重建, 修改了密码, 重置的密码不能使用.