Yetersiz izinler nedeniyle ClickHouse DB'YE EKLENEMİYOR: / var / lib / clickhouse / data /
Docker-compose aracılığıyla bir kapsayıcıda bir ClickHouse DB örneği oluşturdum:
version: '3'
services:
ch:
image: yandex/clickhouse-server
restart: on-failure
volumes:
- '/mnt/c/DevTools/source/storm/clickhouse_setup/data/ch:/var/lib/clickhouse/'
- './ch_configs:/etc/clickhouse-server/'
ports:
- 9000:9000
- 8123:8123
ulimits:
nofile: 262144
client:
image: yandex/clickhouse-client
volumes:
- './client-config.xml:/etc/clickhouse-client/config.xml'
Ona erişebilir ve oluşturduğum veritabanını bulabilirim, ancak çalıştırdığımda
INSERT INTO simple_people (id, first_name, last_name) VALUES(1,'david','lo')
Bu yanıtı alıyorum:
Query id: 46ef1af8-5728-425e-87f5-511f7e0e79d1
Received exception from server (version 20.12.3):
Code: 1000. DB::Exception: Received from ch:9000. DB::Exception: Access to file denied: insufficient permissions: /var/lib/clickhouse/data/registry/simple_people/tmp_insert_1_2_2_0.
1 rows in set. Elapsed: 0.068 sec.
INSERT INTO için nasıl izin alabilirim?
Notlar:
Çalıştırmakta hiçbir sorunum yok:
SELECT * FROM simple_people
WSL: Ubuntu-20.04'teyim
Yanıtlar
WSL + docker yüzünden.
./Data yerine tam yolu deneyin
Clickhouse'u docker olmadan Windows sunucusu 2019 üzerinde WSL Ubuntu 18.04'e doğrudan yükledim ve aynı sorunla karşılaştım. Benim durumumda, ClickHouse depolama ilkesi kurulumuyla bir tabloya veri eklemeye çalışıyordum, böylece tüm veriler / mnt / f / clickhouse (Windows'ta F: \ clickhouse) içinde saklanacaktı. Aldığım hata şuydu:
DB::Exception: Access to file denied: insufficient permissions: /mnt/f/clickhouse/store/1e6/1e69cad8-25a1-4ec5-ab5b-fb32d73b7c8c/tmp_insert_all_2_2_0
Sorunun düzeltilmesi, WSL'de, Linux ve pencereler arasındaki izinleri, F: sürücüsünü etkin özellik ile yeniden bağlayarak eşitleyen meta veri özelliğini etkinleştirmek oldu. Ve sonra zaten varsa tıklama evi klasörünü yeniden oluşturun.
sudo umount /mnt/f
sudo mount -t drvfs F: /mnt/f -o metadata
Ekstra bilgiler
Verilerinizin konumunu seçmek için clickhouse'da bir depolama politikasının nasıl kurulacağına ilişkin sorularınız varsa. /Etc/clickhouse-server/config.d/storage.xml dosyamın içeriği aşağıdadır
<yandex>
<storage_configuration>
<disks>
<!--
default disk is special, it always
exists even if not explicitly
configured here, but you can't change
it's path here (you should use <path>
on top level config instead)
-->
<default>
<!--
You can reserve some amount of free space
on any disk (including default) by adding
keep_free_space_bytes tag
-->
<keep_free_space_bytes>1024</keep_free_space_bytes>
</default>
<mnt_f>
<!--
disk path must end with a slash,
folder should be writable for clickhouse user
-->
<path>/mnt/f/clickhouse/</path>
</mnt_f>
</disks>
<policies>
<mnt_f_only> <!-- name for new storage policy -->
<volumes>
<mnt_f_volume> <!-- name of volume -->
<!--
we have only one disk in that volume
and we reference here the name of disk
as configured above in <disks> section
-->
<disk>mnt_f</disk>
</mnt_f_volume>
</volumes>
</mnt_f_only>
</policies>
</storage_configuration>
</yandex>
Tabloyu oluştururken depolama politikasını seçin:
CREATE TABLE test(
EventId String,
EventName Nullable(String),
) ENGINE = MergeTree()
ORDER BY EventId
SETTINGS storage_policy = 'mnt_f_only';