MySQL使用Longhorn的存储提示 OS errno 30 - Read-only file system
- 2025-11-04 19:05:00
- 丁国栋
- 原创 14
昨天晚上同事说一个测试用的MySQL服务器连不上了,日志显示:
2025-11-04T01:05:26.125382Z 0 [System] [MY-010116] [Server] /opt/bitnami/mysql/bin/mysqld (mysqld 8.0.40) starting as process 64 2025-11-04T01:05:26.127053Z 0 [Warning] [MY-010091] [Server] Can't create test file /bitnami/mysql/data/mysqld_tmp_file_case_insensitive_test.lower-test 2025-11-04T01:05:26.127057Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /bitnami/mysql/data/ is case insensitive mysqld: File './binlog.index' not found (OS errno 30 - Read-only file system) 2025-11-04T01:05:26.127307Z 0 [ERROR] [MY-010119] [Server] Aborting 2025-11-04T01:05:26.127399Z 0 [System] [MY-010910] [Server] /opt/bitnami/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.40) Source distribution.由此可知关键问题应该是 OS errno 30 - Read-only file system 这个问题。
这个数据库是部署在Kubernetes中的,进入这个容器发现确实文件系统是只读的,例如复制文件时提示 Input/output error。
通过查看这个MySQL的部署 Deployment 找到它的 persistentVolumeClaim,通过 pvc 找到它的存储类,发现存储类是 longhorn,读写类型是 RWO。
检查pvc事件,发现没有事件。检查 pv 事件,发现没有pv事件。执行 kubectl get volume -A | grep 找到 pv 对应的 volumes.longhorn.io ,发现没有对应的事件。
登录 longhorn 的控制台,也没有发现任何问题。因此尝试删除、重启这个MySQL Pod。
发现删除 Pod 并没有用,问题依旧。
但通过修改这个 Deployment 的副本数从 1 到 0 再到1,发现问题解决。
附 MySQL容器的一些设计:
- 配置文件可以使用 ConfigMap 类型
- MySQL数据目录一般使用pvc,如果是块存储那么需要注意删除 /data/lost+found,这点可以通过设置 initContainers 实现,例如 chown 1001 /data ; test -d /data/lost+found && (rm -rf /data/lost+found) || true 。
发表评论