一、搭建mysql
1、拉取 MySQL 镜像
这里我们拉取官方的最新版本的镜像:
$ docker pull mysql:latest
查看是否已安装了 mysql:
$ docker images
二、运行 MySQL 容器
1、创建挂载文件:2、运行容器
docker run -d --name mysql
-v /opt/datas/docker/mysqllog:/var/log/mysql
-v /opt/datas/docker/mysql:/var/lib/mysql
-v /opt/datas/docker/mysqlconf:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=123456
-p 3306:3306 mysql
-d (detach) : 后台运行
–name : 为你的镜像创建一个别名,该别名用于更好操作
-p : 映射端口,一般会将默认端口进行更改,避免与本机的 mysql端口冲突,如果你宿主机有mysql,请更改端口,如 -p 33060:3306
-e : 环境变量,为 mysql 的 root 用户设置密码为123456
-v : 指定数据卷挂载(etc为配置文件,log为日志文件,lib为配置文件),意思就是将 mysql 容器中的 /var/lib/mysql (这个是数据库所有数据信息文件) 映射到宿主机 /Users/mew/Desktop/AllMyFile/Data/Docker/mysql 里面,这样就不会出现容器删除后数据也跟着删除
备注:mysql5.7和之前版本,默认字符集为latin1,直接插入中文字符的时候会出现乱码的情况。所以在安装5.7及之前的版本的mysql的时候要把字符编码修改为utf8字符集,utf8字符集指的是utf8mb3。从mysql8.0开始,数据库默认字符编码改为utf8mb4。这时候可以在运行时指定编码
docker run -d --name mysql
-v /opt/datas/docker/mysqllog:/var/log/mysql
-v /opt/datas/docker/mysql:/var/lib/mysql
-v /opt/datas/docker/mysqlconf:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=123456
-p 3306:3306 mysql --character-set-server=utf8 --collation-server=utf8_general_ci
三、
二. 开启远程连接
默认mysql是不可以远程连接的
1、进入到 mysql 容器中
$ docker exec -it mysql /bin/bash
2、通过上面的docker进入容器之后
登录mysql:mysql -u root -p
密码为123456,这个密码是docker安装mysql配置的
3、开启远程连接,由于我8.0运行后看到root授权的host为%,即为远程访问已经开启,所以这一步我省略了直接跳到修改密码认证,否则不能省略。
ALTER USER ‘root’@‘%’ IDENTIFIED WITH
mysql_native_password BY ‘123456’; ,(这个密码为123456,是之后远程连接mysql的密码)
刷新生效:FLUSH PRIVILEGES;
- 修改密码认证配置。
由于mysql8.0和mysql5.7两者的认证方式不一样前者是caching_sha2_password,后者是my_native_password因此我们对它进行修改。
直接连接会报错:
ALTER USER ‘root’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘root’;
修改后:
3、新增用户(根据自己需要,使用root用户也可以):
CREATE USER ‘zyh’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘zyh123!’;
4、给新建的用户授权
GRANT ALL PRIVILEGES ON . TO zyh@‘%’; #授予所有权限
ALL PRIVILEGES 所有权限
. 所有数据库
TO 后接用户
5、刷新生效
FLUSH PRIVILEGES;
三、服务器设置
由于我的是百度云服务器默认打开了3306,所以不用在服务器设置中打开,但是阿里云服务器需要设置打开
验证端口是否打开
打开cmd进入命令行,输入
telnet 180.76.165.145 3306
如下所示,端口已开放
四:连接