Docker Hub MySQL:https://hub.docker.com/_/mysql?tab=description
一、在宿主机创建目录和配置文件
- 数据目录:
mkdir -p /home/allen3/mysql57/data
- 日志目录:
mkdir -p /home/allen3/mysql57/log
- 配置文件目录:
mkdir -p /home/allen3/mysql57/conf
- 配置文件:
vi /home/allen3/mysql57/conf/my.cnf
,并将配置文件权限改为只读 (有写权限 MySQL 会忽略此配置文件)chmod 444 my.cnf
```shell [client] default-character-set=utf8mb4 # 客户端默认字符集
[mysql] default-character-set=utf8mb4 # 客户端默认字符集
[mysqld]
Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0 lower_case_table_names=1 # 设置表名不区分大小写,linux默认是区分的,windows默认不区分 max_connections=200 # 允许最大连接数 max_connect_errors=10 # 允许连接失败的次数 default-time_zone=’+8:00’ character_set_server=utf8mb4 # 服务端使用的字符集默认为UTF8MB4 collation-server=utf8mb4_unicode_ci character-set-client-handshake=FALSE init_connect=’SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci’
默认使用 mysql_native_password 插件认证
default_authentication_plugin=mysql_native_password
Custom config should go here
!includedir /etc/mysql/conf.d/
<a name="UNPDX"></a>
## 二、拉取 MySQL 镜像
目前5.7版本使用更广,因此拉取 MySQL 5.7 镜像:`docker pull mysql:5.7`
<a name="FViMx"></a>
## 三、创建 MySQL 容器
- --name 设置容器名称
- --detach , -d 守护态运行,后台运行
- --privileged=true 容器内的 root 拥有真正root权限,否则容器内 root 只是外部普通用户权限
- --restart=always 当 Docker 重启时,容器会自动启动
- -p 映射端口号
- -v 把容器内部文件或目录挂载至宿主机
- -e 设置环境变量,这里直接设置了 root 的连接密码
- 所用镜像,如 `mysql:latest`,`mysql:5.7`
```shell
docker run --name mysql57 \
-d \
--privileged=true \
--restart=always \
-p 3307:3306 \
-v /home/allen3/mysql57/data:/var/lib/mysql \
-v /home/allen3/mysql57/log:/var/log/mysql \
-v /home/allen3/mysql57/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=密码 \
mysql:5.7
四、设置远程访问
- 登录容器:
docker exec -it mysql57 bash
- 通过 MySQL 客户端连接:
mysql -uroot -p
- 允许远程访问:
- 允许指定ip:grant all privileges on . to ‘root’@’ip’ identified by ‘密码’;
- 允许本地:grant all privileges on . to ‘root’@’localhost’ identified by ‘密码’;
- 允许所有:grant all privileges on . to ‘root’@’%’ identified by ‘密码’;
use mysql
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
flush privileges;