查找Docker Hub上的mysql镜像
docker search mysql
file
默认拉取最新版的mysql 8.0的
file
拉取完成后 看下镜像是否成功拉取
docker images
file
在上一篇Redis的安装教程中,大家都有疑问,为什么我要采取挂载的方式以及我怎么知道配置文件在哪?
好的,接下来我们一一解答
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql
file
docker exec -it mysql bash
file
命令介绍:
mysql --help | grep my.cnf
查找Docker内,MySQL配置文件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 mysql
file
file
输出显示源文件夹:/var/lib/docker/volumes
,表示已安装在 /var/lib/mysql
容器内的服务器数据目录中
这样就可以把相关路径了解清楚
接下来,我们需要在宿主机上,创建一个数据和配置文件的挂载路径
mkdir -p /usr/local/src/mysql/conf && mkdir -p /usr/local/src/mysql/data
file
创建好宿主机的挂载数据路径后,我们将测试容器里 MySQL 的配置文件复制到该路径。后面要是修改配置直接修改宿主机的配置文件即可。
docker cp mysql:/etc/mysql/my.cnf /usr/local/src/mysql/conf
file
启动前需要将之前的安装测试的删除掉
docker rm -f mysql
file
docker run --name mysql \
-p 3306:3306 -e MYSQL_ROOT_PASSWORD=root \
-v /usr/local/src/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/src/mysql/data:/var/lib/mysql \
--restart=on-failure:3 \
-d mysql
docker ps
docker logs -f mysql
file
启动命令分解
注: 我这里使用的是-v
,但是在最新的MySQL官方Docker搭建MySQL文档中,建议我们大家使用--mount
,因为研究表明它更易于使用。我这里也把--mount
挂载方式展示出来,看大家习惯
官网: https://docs.docker.com/storage/bind-mounts/
--mount type=bind,src=/usr/local/src/mysql/conf/my.cnf,dst=/etc/mysql/my.cnf \
--mount type=bind,src=/usr/local/src/mysql/data,dst=/var/lib/mysql \
进入Mysql容器并在容器内登陆Mysql::
docker exec -it mysql bash
mysql -u root -p;
Enter password:
输入密码即可
file
file
备注:host为 % 表示不限制ip , localhost表示本机使用 , plugin非mysql_native_password 则需要修改密码
这里建议不修改root
用户为%
,保证mysql安全性,建议创建重新用户
ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
CREATE USER user IDENTIFIED BY 'password';
也可以这样 给与ip地址权限
CREATE USER `user`@`%` IDENTIFIED BY 'passowrd';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%';
FLUSH PRIVILEGES;
file
连接前请注意修改安全组和防火墙
file
链接数据库时serverTimezone=UTC这个参数出的问题
只要改成serverTimezone=Asia/Shanghai即可
启用:
docker start mysql
停止:
docker stop mysql