ClickHouse插入数据时遇权限拒绝错误的求助
各位好,我在往ClickHouse表插入数据的时候碰到了权限拒绝的报错,试了几种方法都没解决,来向大家求助!
具体报错信息如下:
Got error while inserting date into Clickhouse table:
clickhouse_connect.driver.exceptions.DatabaseError: :HTTPDriver for http://localhost:8123 returned response code 500)
std::exception. Code: 1001, type: std::__1::__fs::filesystem::filesystem_error, e.what() = filesystem error: in rename: Permission denied ["./store/c67/c6760d86-380d-4d9a-806d-dc5b13398ca3/tmp_insert_all_1_1_0/"] ["./store/c67/c6760d86-380d-4d9a-806d-dc5b13398ca3/all_1_1_0/"]
Cannot print extra info for Poco::Exception (version 23.7.3.14 (official build))
从报错内容能看出,问题出在ClickHouse尝试重命名临时插入目录时没有足够权限,我整理了几个可能的解决方向,大家可以参考尝试:
检查数据目录的权限归属:先确认
./store/c67/c6760d86-380d-4d9a-806d-dc5b13398ca3/这个目录及其子文件夹的所属用户、组是否和ClickHouse服务运行的用户一致(通常是clickhouse用户)。可以用命令ls -l ./store/c67/c6760d86-380d-4d9a-806d-dc5b13398ca3/查看,如果权限不对,执行chown -R clickhouse:clickhouse ./store/c67/c6760d86-380d-4d9a-806d-dc5b13398ca3/来修改。核实临时目录的权限:ClickHouse插入数据时会用到临时目录(可能是默认的
/tmp,也可能是配置文件里指定的tmp_path),要确保运行ClickHouse的用户对这个目录有读写权限。排查系统安全工具的限制:如果系统开启了SELinux或者AppArmor这类安全工具,可能会拦截ClickHouse的文件操作。可以尝试临时关闭这类工具测试,或者给ClickHouse添加对应的权限规则。
确认服务运行身份:检查ClickHouse是不是用正确的用户启动的,避免用root或者没有目录权限的用户运行服务,用
ps aux | grep clickhouse就能查看进程的运行用户。
如果大家有其他解决思路或者遇到过类似问题,欢迎留言分享!
备注:内容来源于stack exchange,提问作者MC19

