# 拉取镜像
docker pull mysql
# 或者
docker pull mysql:latest
# 以上两个命令是一致的,默认拉取的就是 latest 版本的
# 我们还可以用下面的命令来查看可用版本:
docker search mysql
使用以下命令来查看是否已安装了 mysql镜像
docker images
初始化时运行以下文件:
docker run --name mysql --restart=always --privileged=true \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf.d:/etc/mysql/conf.d \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:latest
修改容器配置文件:
# 查看正在运行的容器
docker ps
# 查看所有的docker容器
docker ps -a
进入容器内部:
docker exec -it mysql /bin/bash
查看本地是否有配置文件:
/usr/local/mysql/conf/my.cnf
如果没有创建一个my.cnf:
vi my.cnf
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
# 设置东八区时区
default-time_zone = '+8:00'
# 设置密码验证规则,default_authentication_plugin参数已被废弃
# 改为authentication_policy
#default_authentication_plugin=mysql_native_password
authentication_policy=mysql_native_password
# 限制导入和导出的数据目录
# 为空,不限制导入到处的数据目录;
# 指定目录,必须从该目录导入到处,且MySQL不会自动创建该目录;
# 为NULL,禁止导入与导出功能
#secure_file_priv=/var/lib/mysql
secure_file_priv=
init_connect='SET collation_connection = utf8mb4_0900_ai_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_0900_ai_ci
skip-character-set-client-handshake
skip-name-resolve
复制文件到容器内部:
docker cp my.cnf 容器id:/etc/mysql/conf.d/
在进入容器内部:
docker exec -it mysql /bin/bash
exit 退出
docker update mysql --restart=always
docker restart mysql
docker exec -it mysql /bin/bash
此时我们使用mysql客户端连接服务器是失败的,因为默认的root不具有远程连接的权限。
上面的密码不要输入,直接回车进入。
show databases;
use mysql;
select host, user, plugin, authentication_string, password_expired from user;
ALTER USER root@'%' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER root@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出
exit
docker restart mysql