当我尝试使用SHOW FULL FIELDS FROM
或其他SHOW COLUMNS语法查询时,我收到以下奇怪的错误消息:
MariaDB [mysql]> show full fields from user;
ERROR 1036 (HY000): Table '/tmp/#sql_126_0.MAI' is read only
Tmp dir存在且具有777
权限。
在my.cnf
中更改tmp目录无济于事。
Chown
将该目录提供给mysql用户也无济于事。
重现的步骤:
apk add mysql mysql-client
)创建基于alpine的图像或使用随时可用的图像docker run --name mariadb_container mariadb_image
docker exec -ti mariadb_container mysql -A
SHOW FULL FIELDS FROM some_table
查询有关如何追踪该问题的任何建议?
答案 0 :(得分:4)
警告:这是一个有效的理论,未经任何独立来源确认。
有3个失败点可以解释为什么在特定条件下(CentOS 7
,docker
,alpine
,mariadb 10.1.22+
)可以重现错误:
/proc/self/fd/%d
容器线程权限和setuid /proc/
- 基于musl
库中的realpath
implementation
mi_open
race condition security issue 讨论的链接:
readlink
behavior realpath
代码链接:
3.12+
)4.4+
)修复方法:
musl
realpath
implementation mi_open
implementation中的问题(特别是对10.1.22中此文件的更改)解决方法:
答案 1 :(得分:0)
您应该尝试将 Mariadb 降级为版本 10.1.17 (为我工作)