一、搜索mysql

  1. docker search mysql

Docker安装mysql - 图1

二、选择需要的mysql

  1. docker pull mysql

Docker安装mysql - 图2

三、查看

  1. docker images

Docker安装mysql - 图3

四、启动mysql

  1. docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql --privileged=true -v=/data/docker/mysql/config/mysql:/etc/mysql -v=/data/docker/mysql/data:/var/lib/mysql mysql

需要把mysql配置文件从docker容器中下载,否则无法进行配置文件挂载

docker cp mysql:/etc/mysql/ /docker/mysql/config 映射后在config/mysql/conf.d/mysql.cnf 中添加 default-authentication-plugin=mysql_native_password lower-case-table-names=1 #区分大小写

设置区分大小写

在my.cnf中 增加lower_case_table_names=1,注意需要在初始化数据库时增加,否则需要把现有的数据库删除才能添加

说明:

  • mysql启动需要指定密码,不然启动报错。(database is uninitialized and password option is not specified
    You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
  • /home/mysql/config/my.cnf 指定服务器上面的配置文件
  • /home/mysql/data 指定数据存放在服务器的位置

mysql配置文件

  1. [mysqld]
  2. # 绑定IPv4和3306端口
  3. port = 3306
  4. # 允许最大连接数
  5. max_connections=200
  6. # 设置字符集为utf8
  7. character-set-server=utf8
  8. sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  9. lower_case_table_names=1
  10. [client]
  11. # 设置客户端字符集
  12. default-character-set=utf8

五、docker-compose 方式

  1. version: '3.1'
  2. services:
  3. db:
  4. image: mysql
  5. container_name: mysql
  6. restart: always
  7. privileged: true
  8. ports:
  9. - 3306:3306
  10. volumes:
  11. - /docker/mysql/config/mysql:/etc/mysql/
  12. - /docker/mysql/data:/var/lib/mysql
  13. - /docker/mysql/mysql-files:/var/lib/mysql-files/
  14. environment:
  15. TZ: Asia/Shanghai
  16. MYSQL_ROOT_PASSWORD: root
  17. command:
  18. --character-set-server=utf8mb4
  19. --collation-server=utf8mb4_general_ci
  20. --explicit_defaults_for_timestamp=true
  21. --lower_case_table_names=1 //区分大小写,mysql8必须要在初始化的时候进行
  22. --max_allowed_packet=128M
version: '3.1'
services:
  db:
    image: mysql
    container_name: mysql8
    command:
    # MySQL8的密码验证方式默认是 caching_sha2_password,但是很多的连接工具还不支持该方式
    # 就需要手动设置下mysql的密码认证方式为以前的 mysql_native_password 方式
      --default-authentication-plugin=mysql_native_password
      # 字符集要是utf8mb4的 utf8字符集有bug
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      # 区分大小写 mysql8必须要在初始化的时候进行
      --lower_case_table_names=1
    # docker的重启策略:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: root_password # root用户的密码
      MYSQL_USER: user # 创建新用户
      MYSQL_PASSWORD: user_password # 新用户的密码
    ports:
      - 3306:3306
    volumes:
      - /usr/local/docker/mysql8/data:/var/lib/mysql
      - /usr/local/docker/mysql8/conf:/etc/mysql/conf.d
      - /usr/local/docker/mysql8/logs:/logs
  # MySQL 的 Web 客户端
  adminer:
    image: adminer
    restart: always
    ports:
      - 8081:8080

docker-compose up -d启动容器
如果启动失败过,就需要删除宿主机上的data挂载目录,需要清楚上次启动留下的数据文件,不然重启启动的时候还是会报错

测试链接

链接数据库
image.png
链接网页版的管理工具
image.png
image.png
此管理工具有个帮助文档很好用
image.png
这里可以找到我在 docker-compose.yml 文件的配置的值
image.png

六、进入容器

docker exec -it ms bash
  • 进入容器可以直接执行sql语句