我在组复制(多主)基础架构中使用 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
您要将所有这些都压缩到 1.0GB 吗?
- 操作系统
mysqld
innodb_log_buffer_size
(0.8GB)key_buffer_size=50M
,尽管 MyISAM 已经消失
难怪它正在交换。
返回默认值 (8M) innodb_log_buffer_size
。这可能足以解决您的问题。