docker部署mysql实现远程访问
查看Docker MySQL文档
docker 下载
MySQL文档地址:
https://hub.docker.com/_/mysql/
第一步,拉取MySQL镜像
docker pull mysql # 拉取最新版mysql镜像
之后docker会自动拉取(下载)MySQL镜像。
拉取成功后我们查看一下:
docker images
第二步,创建并启动一个MySQL容器
输入以下命令:
docker run --name mysqlserver -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql
- –name:给新创建的容器命名,此处命名为mysqlserver
- -e:配置信息,此处配置mysql的root用户的登陆密码
- -p:端口映射,表示在这个容器中使用3306端口(第二个)映射到本机的端口号也为3306(第一个)
- -d:成功启动容器后输出容器的完整ID
- 最后一个mysql指的是mysql镜像名字
如果要建立目录映射
docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql
- -v:主机和容器的目录映射关系,":"前为主机目录,之后为容器目录
到这里我们查看容器运行状态:
docker ps
可以看到容器的简写ID,容器的源镜像,创建时间,状态,端口映射信息,容器名字等
8.0 报错 mysqld: Error on realpath() on '/var/lib/mysql-files' (Error 2 - No such file or directory) 使用以下方式运行
docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql
第三步,测试连接MySQL
- 1、命令连接
docker exec -it mysql /bin/bash
或者
docker exec -it mysql bash
docker exec
:在运行的容器中执行命令
语法
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
OPTIONS说明:
- -i :即使没有附加也保持STDIN 打开
- -t :分配一个伪终端
- -d :分离模式: 在后台运行
进入mysql
mysql -h localhost -u root -p
使用navicat远程连接
若访问不成功请查看是否开启远程连接
mysql> use mysql;
mysql> select user,host from user;
host | user |
---|---|
% | root |
localhost | mysql.infoschema |
localhost | mysql.session |
localhost | mysql.sys |
localhost | root |
如果host没有% 就需要执行
8.0版本
ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则 ,'password'改成你的密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; #更新一下用户的密码 ,'password'是你的密码
grant all privileges on *.* to root@'%' identified by "password";
- password 为你新设置的密码
刷新权限
FLUSH PRIVILEGES;
如果连接状态为 2003
可能造成出现的原因:
- 网络不通畅
- mysql 服务未启动
- 防火墙未开放端口