nacos 2.0.0 docker-compose部署导入脚本出现乱码的原因分析

简言

记录下nacos2.0.0 docker部署时初始化数据乱码的问题,记录以备忘。

nacos部署脚本

version: '3.0'
services:
  nacos:
    image: nacos/nacos-server:2.0.0
    hostname: "nacos-standalone"
    env_file:
      - ./env/nacos-standlone-mysql.env
    volumes:
      - ./nacos/standalone-logs/:/home/nacos/logs
      - ./nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - 8848:8848
      - 9848:9848
      - 9849:9849
    depends_on:
      - mysql
    restart: on-failure

  mysql:
    container_name: mysql
    image: mysql:8.0.21
    env_file:
      - ./env/mysql.env
    volumes:
      - ./mysql/conf/:/etc/mysql/conf.d
      - ./mysql/logs/:/logs
      - ./mysql/data/:/var/lib/mysql
      # 初始化目录挂载
      - ./mysql/init/:/docker-entrypoint-initdb.d/
    ports:
      - "3306:3306"
    restart: always
    command:
      # 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1

详情请查看:https://gitee.com/matevip/matecloud/blob/dev/doc/deploy/docker-standalone/docker-compose.yml

其中增加了初始化脚本init.sql,主要就是mysql启动后创建用户并导入数据后发现,默认自带的中文乱码。

排坑过程

排坑一:command设置utf-8参数

    command:
      # 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1

尝试后,发现依然乱码

 排坑二:shell脚本导入

通过shell方式导入,发现依然乱码

开始怀疑SQL脚本有问题

脚本是官方提供的,我只是在里面插入了matecloud的配置数据,后来比较使用mysql工具导出的数据来看,里面有一行代码引起了注意。

SET NAMES 'utf8mb4';

然后在init.sql里增加此条代码,问题解决。

记录以备忘。