一、拉取镜像
# 拉取最新 mysql 镜像
docker pull mysql
# 查看镜像
docker images
二、启动一个测试容器
目的:确定配置文件和数据文件的位置,复制文件到宿主机指定的位置,用于挂载文件,方便后期修改。
# 启动测试容器
docker run \
-p 3308:3306 \
--name mysql2 \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql
三、创建文件夹,复制配置文件
# 创建文件夹
mkdir /home/docker/mysql/conf
# 复制文件到宿主机上
docker cp mysql2:/etc/mysql/my.cnf /home/docker/mysql/conf
docker cp mysql2:/etc/mysql/my.cnf.fallback /home/docker/mysql/conf
docker cp mysql2:/etc/mysql/conf.d /home/docker/mysql/conf
# 删除测试容器
docker rm -f 容器id
四、启动mysql并挂载数据
注意:必须要在/home/docker/mysql中要有对应的文件,就是上面这一步不可以少
docker run \
-p 3308:3306 \
--name mysql8 \
-v /etc/localtime:/etc/localtime \
-v /home/docker/mysql/data:/var/lib/mysql \
-v /home/docker/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql
五、异常情况
- 客户端不能连接
1.使用命令进入到docker中的mysql
docker exec -it mysql8 bash
2.修改密码规则
# 连接mysq
mysql -uroot -proot
# 修改密码
use mysql;
update user set host='%' where user='root';
alter user 'root'@'%' IDENTIFIED BY 'root';
# 刷新权限
flush privileges;
# 修改密码规则
ALTER USER 'root'@'%' IDENTIFIED BY 'root' PASSWORD EXPIRE NEVER;
# 更新一下用户密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
# 刷新权限
FLUSH PRIVILEGES;
- 忘记密码
1.在宿主机/home/docker/mysql/conf/my.cnf目录下修改:
[mysqld]
skip-grant-tables
2.重启mysql容器
docker restart mysql8
3.登陆mysql,不用输入密码
mysql -uroot -p
4.设置root密码为空
use mysql;
select user,authentication_string,host from user;
update user set authentication_string='' where user='root';
flush privileges;
5.退出mysql,把第一步的skip-grant-tables注释。再重启mysql
6.用root登陆,不用输入密码,更新密码
# 修改密码
use mysql;
update user set host='%' where user='root';
alter user 'root'@'%' IDENTIFIED BY 'root';
# 更新配置
flush privileges;