docker-compose挂载mysql8

404 阅读1分钟

1、挂载

mysql:
    # 容器名(以后的控制都通过这个)
    container_name: mysql
    # 重启策略
    restart: always
    image: mysql:8
    ports:
      - "3306:3306"
    volumes:
      # 挂挂载配置文件
      #  - ./mysql/db/:/docker-entrypoint-initdb.d
      # 挂挂载配置文件
      - ./mysql/conf:/etc/mysql/conf.d
      # 挂载日志
      - ./mysql/logs:/var/log/mysql
      # 挂载数据
      - ./mysql/data:/var/lib/mysql
      #- ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql
      - ./mysql/sql/*.sql:/docker-entrypoint-initdb.d/
    command: [
          'mysqld',
          '--innodb-buffer-pool-size=80M',
          '--character-set-server=utf8mb4',
          '--collation-server=utf8mb4_unicode_ci',
          '--default-time-zone=+8:00',
          '--lower-case-table-names=1'
        ]
    environment:
      # root 密码
      MYSQL_ROOT_PASSWORD: 123

2、设置配置文件 ./mysql/conf

vim my.cnf

[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

3、mysql的一些问题

mysql5.7以上默认开启了only_full_group_by选项,无法使用分组。我的版本是mysql8.0以上的
进入文件夹找到自己的my.cnf配置文件,修改[mysqld]中的内容,添加下面的内容就可以
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION



错误:

    增加sql_mode配置,启动时出现下面错误

[ERROR] [MY-000077] [Server] /usr/sbin/mysqld: Error while setting value 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' to 'sql_mode'.

如何解决:8.0以上已经取消了 NO_AUTO_CREATE_USER 这个关键字,在mysql.ini/my.cnf中的sql_mode中删掉这个关键字即可