Docker 安装MySQL
约 1167 字大约 4 分钟
1. 查找镜像
查找Docker Hub上的mysql镜像
docker search mysql
2. 拉取镜像
默认拉取最新版的mysql 8.0的
docker pull mysql
3. 查看镜像
拉取完成后 看下镜像是否成功拉取
docker images
4. 配置文件
为什么我要采取挂载的方式以及我怎么知道配置文件在哪?
- 为什么我要采取挂载的方式?
有状态服务是指: 需要数据存储功能的服务、或者指多线程类型的服务,队列等。(mysql、redis、kafka、zookeeper等)
- 为什么我要采取挂载的方式?
Docker容器原则上是短暂的,如果容器被删除或损坏,任何数据或配置都将丢失
- 怎么知道配置文件在哪?
大家部署的 MySQL,大概文件路径不一致。我们可以先创建个测试的 MySQL 容器,然后再根据查找出的文件具体路径位置,重新创建我们符合我们需求的 MySQL 容器,
- 怎么知道配置文件在哪?
命令如下:
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql
#查找数据文件位置 进入Docker容器内
docker exec -it mysql bash
#查找Docker内,MySQL配置文件my.cnf的位置,路径按优先排序
mysql --help | grep my.cnf order of preference, my.cnf, $MYSQL_TCP_PORT
#输出
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
配置文件的路径不一定都一样,有些位置是在/etc/my.cnf
。而我centos系统上,实际存在位置是在/etc/mysql/my.cnf
#查找数据文件位置 用于在容器上运行docker inspect命令的JSON输出具有一个 Mount密钥,其值提供了有关数据目录卷的信息:
docker inspect mysql
输出显示源文件夹:/var/lib/docker/volumes,表示已安装在 /var/lib/mysql容器内的服务器数据目录中。
这样就可以把相关路径了解清楚
5. 挂载配置文件
接下来,我们需要在宿主机上,创建一个数据和配置文件的挂载路径
mkdir -p /usr/local/mysql/conf && mkdir -p /usr/local/mysql/data
创建好宿主机的挂载数据路径后,我们将测试容器里 MySQL 的配置文件复制到该路径。后面要是修改配置直接修改宿主机的配置文件即可。
docker cp mysql:/etc/mysql/my.cnf /usr/local/mysql/conf
6. 启动容器
- 6.1 启动命令
docker run --name mysql \
-p 3306:3306 -e MYSQL_ROOT_PASSWORD=root \
-v /usr/local/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/mysql/data:/var/lib/mysql \
--restart=on-failure:3 \
-d mysql
启动命令分解
- --name:为容器指定一个名字
- -p:指定端口映射,格式为:主机(宿主)端口:容器端口
- -e:MYSQL_ROOT_PASSWORD="xxx",设置环境变量
- --restart=on-failure:3:是指容器在未来出现异常退出的情况下循环重启3次
- -v:挂载
- -d:后台运行容器,并返回容器 id
注: 我这里使用的是-v
,但是在最新的MySQL官方Docker搭建MySQL文档中,建议我们大家使用--mount
,因为研究表明它更易于使用。
--mount type=bind,src=/usr/local/mysql/conf/my.cnf,dst=/etc/mysql/my.cnf \
--mount type=bind,src=/usr/local/mysql/data,dst=/var/lib/mysql \
- 6.2 查看是否启动成功
docker ps
- 6.3 查看启动日志
docker logs -f mysql
7. 设置mysql
进入Mysql容器并在容器内登陆Mysql::
docker exec -it mysql bash
mysql -u root -p;
Enter password:
输入密码即可
- 7.1 查看用户信息
select host,user,plugin,authentication_string from mysql.user;
- 7.2 修改用户
ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
备注:host
为 %
表示不限制ip
, localhost
表示本机使用 , plugin非mysql_native_password 则需要修改密码
这里建议不修改root用户为%,保证mysql安全性,建议创建重新用户。
- 7.3 创建用户
CREATE USER user IDENTIFIED BY 'password';
也可以这样 给与ip地址权限
CREATE USER `user`@`%` IDENTIFIED BY 'passowrd';
- 7.4 授权
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%';
- 7.5 刷新权限
FLUSH PRIVILEGES;
7.6 本地远程连接
连接前请注意修改安全组和防火墙7.7 数据库时区
连接数据库时serverTimezone=UTC这个参数出的问题
只要改成serverTimezone=Asia/Shanghai即可
8. 启动、停止、重启
docker start mysql
docker stop mysql
docker restart mysql
9 开机自启动
docker update mysql --restart=always 或者 docker update --restart=always <容器名称/ID>