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/

  1. <a name="UNPDX"></a>
  2. ## 二、拉取 MySQL 镜像
  3. 目前5.7版本使用更广,因此拉取 MySQL 5.7 镜像:`docker pull mysql:5.7`
  4. <a name="FViMx"></a>
  5. ## 三、创建 MySQL 容器
  6. - --name 设置容器名称
  7. - --detach , -d 守护态运行,后台运行
  8. - --privileged=true 容器内的 root 拥有真正root权限,否则容器内 root 只是外部普通用户权限
  9. - --restart=always 当 Docker 重启时,容器会自动启动
  10. - -p 映射端口号
  11. - -v 把容器内部文件或目录挂载至宿主机
  12. - -e 设置环境变量,这里直接设置了 root 的连接密码
  13. - 所用镜像,如 `mysql:latest`,`mysql:5.7`
  14. ```shell
  15. docker run --name mysql57 \
  16. -d \
  17. --privileged=true \
  18. --restart=always \
  19. -p 3307:3306 \
  20. -v /home/allen3/mysql57/data:/var/lib/mysql \
  21. -v /home/allen3/mysql57/log:/var/log/mysql \
  22. -v /home/allen3/mysql57/conf:/etc/mysql/conf.d \
  23. -e MYSQL_ROOT_PASSWORD=密码 \
  24. 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 ‘密码’;
      1. use mysql
      2. ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
      3. flush privileges;