繁体   English   中英

如何在docker-compose上禁用MySQL binlog

[英]How to disable MySQL binlog on docker-compose

在运行执行许多数据库查询(更新/删除/插入)的软件的服务器上,MySQL 服务器在 docker-compose 设置中运行。

version: '3.7'
services:
  database:
    image: registry.var-lab.com/mysql/mysql:8.0.27
    command:
      - '--default-authentication-plugin=mysql_native_password'
      - '--sql_mode='
      - '--max_allowed_packet=1073741824'
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: db
      MYSQL_USER: user
      MYSQL_PASSWORD: iamsecure!11
    volumes:
      - ../database:/var/lib/mysql
      - ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    healthcheck:
      test: [ "CMD", "mysqladmin" ,"ping", "-h", "-u", "symfony", "-p", "symfony", "localhost" ]
      timeout: 20s
      retries: 10

软件运行几天后,磁盘空间已满。 调查之后,我注意到 MySQL 持续将所有数据操作操作记录到../database文件夹中的二进制日志文件中,该文件夹作为卷安装到 MySQL Docker 容器中。

如何在 docker-compose.yml 文件中禁用此日志记录操作?

在 MySQL 8.0 中设置log-bin=OFF以禁用二进制日志。 阅读https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#option_mysqld_log-bin了解完整的详细信息。

您也可以让二进制日志在短时间内过期。 使用选项binlog-expire-logs-seconds=N其中 N 表示如果日志文件早于 N 秒,它会在 mysqld 启动时自动删除,或者当日志滚动到新的日志文件时,或者当你执行刷新日志)。 阅读https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds了解更多详细信息。

按照 Bill Karwin ( https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#option_mysqld_log-bin ) 已经提到的文档,我将以下命令添加到我的 docker-compose。 yml:

command:
        - '--skip-log-bin'

我构建了容器,运行它,进入终端,启动 mysql 客户端并通过SHOW VARIABLES LIKE 'log_bin'; 它起作用了:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM