为什么docker容器内的MySQL5.7总是崩溃?

为什么docker容器内的MySQL5.7总是崩溃?

我有一个通过 docker-compose 文件配置的 MySQL 5.7 docker 容器,该文件如下所示:

version: '3'

# Run command: docker compose --env-file .env.local up
services:
  # Database
  db_hm:
    image: mysql:5.7
    volumes:
      - db_data_hm:/var/lib/mysql
    restart: always
    ports:
      - '127.0.0.1:3316:3306'
    environment:
      MYSQL_ROOT_PASSWORD: ${HD_DB_PASSWORD}
      MYSQL_DATABASE: ${HD_DB_NAME}
      MYSQL_USER: ${HD_DB_USER}
      MYSQL_PASSWORD: ${HD_DB_PASSWORD}
    networks:
      - wpsite_hm
  # Wordpress
  wordpress_hm:
    depends_on:
      - db_hm
    build:
      context: ./docker/wordpress
      dockerfile: ./Dockerfile
    read_only: false
    ports:
      - '8001:80'
    expose:
      - 80
    restart: always
    volumes: 
        - './:/var/www/html'
        - './php.ini:/usr/local/etc/php/php.ini'
    environment:
      HDB_DB_HOST: ${HD_DB_HOST}
      HDB_DB_USER: ${HD_DB_USER}
      HDB_DB_NAME: ${HD_DB_NAME}
      HDB_DB_PASSWORD: ${HD_DB_PASSWORD}
    networks:
      - wpsite_hm

volumes:
  db_data_hm:

我有一个通过 JMeter 创建的压力测试脚本。每当我使用 30 个并发用户运行测试时,MySQL 容器总是会记录如下内容:

2023-01-28T19:23:59.927259Z 0 [Note] mysqld: ready for connections.
 Version: '5.7.40'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)
 2023-01-28 19:24:20+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.40-1.el7 started.
 2023-01-28 19:24:20+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
 2023-01-28 19:24:20+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.40-1.el7 started.
 '/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
 2023-01-28T19:24:21.595285Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
 2023-01-28T19:24:21.600648Z 0 [Note] mysqld (mysqld 5.7.40) starting as process 1 ...
 2023-01-28T19:24:21.659734Z 0 [Note] InnoDB: PUNCH HOLE support available
 2023-01-28T19:24:21.660855Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
 2023-01-28T19:24:21.660865Z 0 [Note] InnoDB: Uses event mutexes
 2023-01-28T19:24:21.660870Z 0 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
 2023-01-28T19:24:21.660875Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.12
 2023-01-28T19:24:21.660888Z 0 [Note] InnoDB: Using Linux native AIO
 2023-01-28T19:24:21.664699Z 0 [Note] InnoDB: Number of pools: 1
 2023-01-28T19:24:21.668572Z 0 [Note] InnoDB: Using CPU crc32 instructions
 2023-01-28T19:24:21.673989Z 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M
 2023-01-28T19:24:21.687345Z 0 [Note] InnoDB: Completed initialization of buffer pool
 2023-01-28T19:24:21.691938Z 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
 2023-01-28T19:24:21.715903Z 0 [Note] InnoDB: Highest supported file format is Barracuda.
 2023-01-28T19:24:21.723552Z 0 [Note] InnoDB: Log scan progressed past the checkpoint lsn 4363179685
 2023-01-28T19:24:21.723590Z 0 [Note] InnoDB: Doing recovery: scanned up to log sequence number 4363179694
 2023-01-28T19:24:21.723597Z 0 [Note] InnoDB: Database was not shutdown normally!
 2023-01-28T19:24:21.723601Z 0 [Note] InnoDB: Starting crash recovery.
 2023-01-28T19:24:21.989305Z 0 [Note] InnoDB: Removed temporary tablespace data file: "ibtmp1"
 2023-01-28T19:24:21.989429Z 0 [Note] InnoDB: Creating shared tablespace for temporary tables
 2023-01-28T19:24:21.989781Z 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
 2023-01-28T19:24:22.011166Z 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
 2023-01-28T19:24:22.012602Z 0 [Note] InnoDB: 96 redo rollback segment(s) found. 96 redo rollback segment(s) are active.
 2023-01-28T19:24:22.012633Z 0 [Note] InnoDB: 32 non-redo rollback segment(s) are active.
 2023-01-28T19:24:22.013269Z 0 [Note] InnoDB: Waiting for purge to start
 2023-01-28T19:24:22.064048Z 0 [Note] InnoDB: 5.7.40 started; log sequence number 4363179694
 2023-01-28T19:24:22.065063Z 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
 2023-01-28T19:24:22.072885Z 0 [Note] Plugin 'FEDERATED' is disabled.
 2023-01-28T19:24:22.088705Z 0 [Note] InnoDB: Buffer pool(s) load completed at 230128 19:24:22
 2023-01-28T19:24:22.127157Z 0 [Note] Found ca.pem, server-cert.pem and server-key.pem in data directory. Trying to enable SSL support using them.
 2023-01-28T19:24:22.127199Z 0 [Note] Skipping generation of SSL certificates as certificate files are present in data directory.
 2023-01-28T19:24:22.127213Z 0 [Warning] A deprecated TLS version TLSv1 is enabled. Please use TLSv1.2 or higher.
 2023-01-28T19:24:22.127219Z 0 [Warning] A deprecated TLS version TLSv1.1 is enabled. Please use TLSv1.2 or higher.
 2023-01-28T19:24:22.134621Z 0 [Warning] CA certificate ca.pem is self signed.
 2023-01-28T19:24:22.136068Z 0 [Note] Skipping generation of RSA key pair as key files are present in data directory.
 2023-01-28T19:24:22.153990Z 0 [Note] Server hostname (bind-address): '*'; port: 3306
 2023-01-28T19:24:22.155336Z 0 [Note] IPv6 is available.
 2023-01-28T19:24:22.155380Z 0 [Note]   - '::' resolves to '::';
 2023-01-28T19:24:22.155429Z 0 [Note] Server socket created on IP: '::'.
 2023-01-28T19:24:22.175855Z 0 [Warning] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
 2023-01-28T19:24:22.331036Z 0 [Note] Event Scheduler: Loaded 0 events
 2023-01-28T19:24:22.334317Z 0 [Note] mysqld: ready for connections.

请注意,有以下两行:

 2023-01-28T19:24:21.723597Z 0 [Note] InnoDB: Database was not shutdown normally!
 2023-01-28T19:24:21.723601Z 0 [Note] InnoDB: Starting crash recovery.

我的服务器有 8 个 vCPU 和 16 GB RAM。但是在测试期间,CPU 利用率变得非常高,甚至达到了 200% 以上。

我搜索过有关此类问题的答案,大多数都与内存分配不足有关。但在测试期间,内存利用率始终低于 40%。其他可能性是数据库损坏或某些原因导致 MySQL 实例终止,但不幸的是,我看不到与此相关的任何消息。

任何形式的帮助都将非常感激。

相关内容