使用Docker容器在生产环境部署最新MySQL 8.0.36版本

艺帆风顺 发布于 2025-04-03 21 次阅读


一、需求背景

    由于Mysql 5.7在项目中存在被扫描出的漏洞,故考虑升级到MySQL 8以上版本,采用docker进行部署,并适配此前Mysql 5.7配置文件

二、服务部署

1、创建挂载目录

    mkdir -p /home2/mysql8/confmkdir -p /home2/mysql8/logmkdir -p /home2/mysql8/data

    2、拉取镜像、运行容器

    docker run --privileged=true -d -v /etc/localtime:/etc/localtime:ro -v  /home2/mysql8/log:/var/log/mysql -v /home2/mysql8/data:/var/lib/mysql -v /home2/mysql8/conf:/etc/mysql/conf.d --name mysql8 -e MYSQL_ROOT_PASSWORD=YinLing_2024 -p 3308:3306 -d mysql:8.0.36

    或者参考以下启动命令:

      docker run -p 3306:3306 --name mysql --restart=always --privileged=true 
      -v /usr/local/mysql/log:/var/log/mysql
      -v /usr/local/mysql/data:/var/lib/mysql
      -v /usr/local/mysql/conf:/etc/mysql/conf.d
      -v /etc/localtime:/etc/localtime:ro
      -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

      3、处理报错

      1)不区分大小写参数lower_case_table_names导致运行报错:

          运行 MySQL 8之前就要修改好,运行之后不支持修改该参数。

      2)sql_mode参数导致报错

      sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ZERO_DATE,NO_ZERO_IN_DA    TE,ERROR_FOR_DIVISION_BY_ZERO

      原MySQL 5.7中配置如上,8版本可能部分不支持,将其注释掉。

      3)query_cache_相关参数报错

        报错信息:2024-01-22T08:49:17.874864+08:00 0 [ERROR] [MY-000067] [Server] unknown variable 'query_cache_limit=1048576'.

        MySQL 8.0版本中,query_cache_limit 这个系统变量已经被废弃,不再被支持。

        将其注释掉。

          #query_cache_limit=1048576#query_cache_size=1024M#query_cache_type=OFF#query_cache_wlock_invalidate=OFF

          二、连接测试

          mysql -uroot -P3308 -p -h192.168.3.104

          1、查询版本信息:SELECT VERSION();

            mysql> SELECT VERSION();+-----------+| VERSION() |+-----------+| 8.0.36 |+-----------+1 row in set (0.00 sec)

            2、查询是否区分大小写:

            SHOW VARIABLES LIKE 'lower_case_table_names';

              mysql> SHOW VARIABLES LIKE 'lower_case_table_names';+------------------------+-------+| Variable_name | Value |+------------------------+-------+| lower_case_table_names | 1 |+------------------------+-------+1 row in set (0.01 sec)

              根据查询结果,lower_case_table_names的值为1,表示MySQL不区分大小写。如果需要区分大小写,可以将该值设置为0。

              3、查询是否开启binlog:

                  SHOW VARIABLES LIKE 'log_bin';

                mysql> SHOW VARIABLES LIKE 'log_bin';+---------------+-------+| Variable_name | Value |+---------------+-------+| log_bin | ON |+---------------+-------+1 row in set (0.00 sec)