我该怎么做才能防止 MySQL 耗尽 Debian 10 中的所有 RAM 和 SWAP?

我该怎么做才能防止 MySQL 耗尽 Debian 10 中的所有 RAM 和 SWAP?

我在组复制(多主)基础架构中使用 MySQL 8.0.18。目前有 4 个主服务器相互连接,一切似乎都运行良好,但在大约 2 周的时间里,所有服务器上的所有 mysqld 进程都用完了所有交换空间。内存使用量保持在 800Mb,因为我怀疑 innodb_log_buffer_size 正在发挥作用。

服务器规格:

Debian 10

1GB 内存

3GB 交换空间

20GB 固态硬盘

mysql.cnf:

最大连接数=20

innodb_log_buffer_size=800M

密钥缓冲区大小=50M

超级读取仅=关闭

gtid_mode = 开启

强制实施_gtid_consistency = ON

master_info_repository = 表

Relay_log_info_repository = 表

binlog_checksum = 无

log_slave_updates = ON

log_bin=binlog

binlog_format = ROW

transaction_write_set_extraction = XXHASH64

松散组复制引导组 = OFF

loose-group_replication_start_on_boot = OFF

loose-group_replication_ssl_mode = 必需

松散组复制恢复使用 SSL = 1

松散组复制不可达多数超时 = 80

松散组复制自动重新加入尝试 = 2015

松散组复制事务大小限制=0

相关操作系统配置:

vm.swappiness=5

我怎样才能让 mysql 停止使用这么多的交换空间?

答案1

配置 InnoDB 内存中可用数据空间的参数是innodb_buffer_pool_size。如果不设置,默认是128MB。这是InnoDB的主要参数,一般建议设置为总内存的80%。

innodb_log_buffer_size也是一个重要的点,但与当下发生的动作有关,以 16MB 的块形式写入磁盘,以避免在尚未确定写入时出现数据损坏。

还有很多其他与内存相关的配置存储引擎,但是到了8.0版本,绝大多数,或者说全部,都是InnoDB。

大概交换性很高,因为您的数据库不允许使用其所需的 RAM -innodb_buffer_pool_size为128MB。

消除innodb_log_buffer_size并把innodb_buffer_pool_size

相关内容