参考命令
拉取镜像
# 比如想拉取 mysql5.7, 则 mysql:5.7
docker pull mysql:<mysqlVersion>
容器启动命令
MYSQL_ROOT_PASSWORD
是 root 密码。
linux
docker run --name mysql -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=molotest123 \
--volume=/usr/local/mysql:/var/lib/mysql -d mysql:5.7
macos
docker run --name mysql -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=molotest123 \
--volume=/Users/`whoami`/mysql:/var/lib/mysql -d mysql:5.7
数据持久化到本地
数据持久化到本地,只需要挂载本地的目录。/var/lib/mysql 是 Mysql 存放数据的位置。
$ 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 新的启动命令:
docker run --name=mysql --hostname=ee7518391b46
--env=MYSQL_ROOT_PASSWORD=qwe123456
--env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
--env=MYSQL_MAJOR=5.7 --env=MYSQL_VERSION=5.7.19-1debian8
--volume=/usr/local/mysql:/var/lib/mysql --volume=/var/lib/mysql
-p 3306:3306 --restart=always --detach=true mysql:5.7.19 mysqld
使用 runlike 分析出原来的启动命令:
docker run --name=mysql --hostname=ee7518391b46
--env=MYSQL_ROOT_PASSWORD=qwe123456
--env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
--env=GOSU_VERSION=1.7
--env=MYSQL_MAJOR=5.7
--env=MYSQL_VERSION=5.7.19-1debian8
--volume=/usr/local/mysql:/var/lib/mysql
--volume=/var/lib/mysql -p 3306:3306
--restart=no --detach=true mysql:5.7.19 mysqld
这个 restart 启动失败,原因是日志中看到了这些东西:
不知道为什么会疯狂连接 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 过去就可以了。
删除镜像重建
删除镜像重建, 修改了密码, 重置的密码不能使用.