查找Docker Hub上的mysql镜像:docker search mysql
拉取官方的镜像:docker pull mysql (不加版本默认是:latest)或 docker pull mysql:version (docker pull mysql:5.6)
查看本地镜像列表:docker images |grep mysql
删除镜像:docker rmi <image id>
运行mysql:
docker run -p 3306:3306 --name mysql --restart=always --privileged=true \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=root-d mysql:latest
今天安装8.0命令改动
docker run -p 3306:3306 --name mysql --restart=always --privileged=true \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=root mysql:latest
命令说明:
-p 3306:3306:指定宿主机端口与容器端口映射关系
-name mysql:创建的容器名称
-restart=always:总是跟随docker启动
-privileged=true:获取宿主机root权限
-v /usr/local/mysql/log:/var/log/mysql:映射日志目录
-v /usr/local/mysql/data:/var/lib/mysql:映射数据目录
-v /usr/local/mysql/conf:/etc/mysql:映射配置目录
-v /etc/localtime:/etc/localtime:ro:让容器的时钟与主机时钟同步,避免时区的问题,ro是read only,就是只读的意思。
-e MYSQL_ROOT_PASSWORD=root:指定mysql环境变量,root用户的密码为root
-d mysql:latest:后台运行mysql容器,版本是latest。
查看运行中的容器:docker ps
查看所有容器:docker ps -a
启动容器:docker start < NAME or ID>
停止容器:docker stop < NAME or ID>
删除容器:docker rm <NAME or ID
>
查看日志:docker logs <NAME or ID
>
Navicat连接启动的mysql
注意关闭linux防火墙或者开放端口
出现这个问题的话
1.查看正在运行的容器是否有需要连接的mysql:docker ps
如果没有,启动:docker start < NAME or ID>
2.进入mysql容器里面: docker exec -it < NAME or ID>
bash
进入容器报错:Error response from daemon: Container xxx is restarting, wait until the cont
可创建my.cnf文件 vi /usr/local/mysql/conf/my.cnf
加入以下配置
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
# 设置东八区
default-time_zone = '+8:00'
# 密码验证规则,default_authentication_plugin已废弃,改为authentication_policy
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
重启mysql,使配置生效:docker restart mysql
登录mysql : mysql -u root -p 出现enterpassword直接回车,不需要输入密码
执行:use mysql;
开启远程访问权限:
ALTER USER root@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
update user set host = '%' where user = 'root';
刷新权限:FLUSH PRIVILEGES;
一定要带上分号!!
不开启远程访问权限的话,远程连接工具会报错,连不上mysql
再次用Navicat连接
搞定!
各服务镜像版本官方地址:https://hub.docker.com/