🙆

MySQLのパラメータ指定(Docker)

2023/10/09に公開

DockerでMySQLを利用していると一定期間ごとに Too many connections が出るため、許容可能なプロセスの数を増やすか、タイムアウトにする時間を短縮したい。

**プロセスの数

MySQL> show variables like "%max_connections%";
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+

タイムアウトの設定
タイムアウトは8時間(28800秒)となっている

SHOW GLOBAL VARIABLES LIKE '%timeout%';
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| connect_timeout             | 10       |
| delayed_insert_timeout      | 300      |
| have_statement_timeout      | YES      |
| innodb_flush_log_at_timeout | 1        |
| innodb_lock_wait_timeout    | 50       |
| innodb_rollback_on_timeout  | OFF      |
| interactive_timeout         | 28800    |
| lock_wait_timeout           | 31536000 |
| net_read_timeout            | 30       |
| net_write_timeout           | 60       |
| rpl_stop_slave_timeout      | 31536000 |
| slave_net_timeout           | 60       |
| wait_timeout                | 28800    |
+-----------------------------+----------+

Nextjsでは都度接続する設定にしているためrequestwを送る毎にコネクションの数が増えて定期的上限に到達していたようです。MySQLはデフォルトで使っていたためシステム変数を指定します

docker-compose.yml
version: "3"
services:
  db:
    image: mysql:5.7.41
    platform: linux/amd64
    command: 'mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci'
    container_name: dbcontainer
    volumes:
      - db_data:/var/lib/mysql
+     - ./mysql/mysql.d:/etc/mysql/conf.d
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MYSQL_USER=
      - MYSQL_PASSWORD=
      - MYSQL_DATABASE=
    expose:
      - 3306
    ports:
      - 3306:3306
volumes:
  db_data:

MySQLの設定

mysql/mysql.d/my.cnf
wait_timeout = 60
interactive_timeout = 60

タイムアウトの時間を1分(60秒)に変更しました

SHOW GLOBAL VARIABLES LIKE '%timeout%';
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| connect_timeout             | 10       |
| delayed_insert_timeout      | 300      |
| have_statement_timeout      | YES      |
| innodb_flush_log_at_timeout | 1        |
| innodb_lock_wait_timeout    | 50       |
| innodb_rollback_on_timeout  | OFF      |
| interactive_timeout         | 60       |
| lock_wait_timeout           | 31536000 |
| net_read_timeout            | 30       |
| net_write_timeout           | 60       |
| rpl_stop_slave_timeout      | 31536000 |
| slave_net_timeout           | 60       |
| wait_timeout                | 60       |
+-----------------------------+----------+

Discussion