安装

拉取 image 镜像

docker pull mysql

查看镜像

docker image ls

创建 MySql 配置、挂载目录,在 root 目录下

mkdir docker-workspace/mysql

配置 docker-compose

docker-workspace/mysql 下新建

  • data 文件夹 - mysql 数据持久化目录
  • init.sql - mysql 启动时初始化脚本
  • my.cnf - mysql 配置文件
  • docker-compose.yml 文件

docker-compose.yml 文件配置

version: '3'
services:
  db:
    image: 'mysql:latest'
    restart: always
    container_name: mysql  # 容器名
    volumes:
      - ./data:/var/lib/mysql  # 挂载目录,持久化存储
      - ./my.cnf:/etc/mysql/my.cnf # mysql 配置文件
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql # sql 初始化脚本
    ports:
      - '3306:3306'
    environment:
      TZ: Asia/Shanghai # 设置时区为上海
      MYSQL_ROOT_PASSWORD: "xxxxxx"   #设置root用户的密码
    command:
      [
        'mysqld',
        '--character-set-server=utf8mb4', # 设置字符编码
        '--collation-server=utf8mb4_unicode_ci',
        # 默认情况下,MySQL 客户端是使用客户端设置的编码的。
        # 可以通过 --skip-character-set-client-handshake 来让客户端使用服务端的编码,来保持编码的一致性
        '--skip-character-set-client-handshake',
      ]

启动 mysql

docker-compose up -d

进入 mysql 终端

docker exec -it mysql bash

登录 mysql

mysql -uroot -p

查看和选择数据库

$ show databases; 
$ use mysql

修改加密方式并退出 MySql和容器

$ select host,user,plugin from user; 
$ alter user 'root'@'%' identified with mysql_native_password by 'root'; 
$ exit; 
$ exit;