Tidak dapat MEMASUKKAN KE DB ClickHouse karena Izin tidak mencukupi: / var / lib / clickhouse / data /

Dec 15 2020

Saya membuat sebuah instance dari ClickHouse DB dalam sebuah kontainer melalui docker-compose:

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'

Saya dapat mengaksesnya dan menemukan database yang saya buat, tetapi ketika saya menjalankannya

INSERT INTO simple_people (id, first_name, last_name) VALUES(1,'david','lo')

Saya mendapatkan tanggapan ini:

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.

Bagaimana cara mendapatkan izin untuk INSERT INTO?

Catatan:

Saya tidak mengalami masalah saat menjalankan:

SELECT * FROM simple_people

Saya menggunakan WSL: Ubuntu-20.04

Jawaban

1 DennyCrane Dec 16 2020 at 00:27

Itu karena WSL + buruh pelabuhan.

Coba jalur lengkap, bukan ./data

1 sh0ck_wave Dec 21 2020 at 04:42

Saya menginstal clickhouse langsung di WSL Ubuntu 18.04 di Windows server 2019 tanpa buruh pelabuhan dan menghadapi masalah yang sama. Dalam kasus saya, saya mencoba memasukkan data ke dalam tabel dengan pengaturan kebijakan penyimpanan ClickHouse sehingga semua data akan disimpan di / mnt / f / clickhouse (F: \ clickhouse di windows). Kesalahan yang saya dapatkan adalah:

DB::Exception: Access to file denied: insufficient permissions: /mnt/f/clickhouse/store/1e6/1e69cad8-25a1-4ec5-ab5b-fb32d73b7c8c/tmp_insert_all_2_2_0

Perbaikan untuk masalah ini adalah mengaktifkan fitur metadata pada WSL yang menyinkronkan izin antara linux dan windows dengan memasang kembali drive F: dengan fitur diaktifkan. Dan kemudian buat kembali folder clickhouse jika sudah ada.

sudo umount /mnt/f
sudo mount -t drvfs F: /mnt/f -o metadata

Informasi tambahan

Jika Anda memiliki pertanyaan tentang cara menyiapkan kebijakan penyimpanan di rumah klik untuk memilih lokasi data Anda. Di bawah ini adalah isi dari /etc/clickhouse-server/config.d/storage.xml saya

<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>

Pilih kebijakan penyimpanan saat membuat tabel:

CREATE TABLE test(
    EventId String,
    EventName Nullable(String),
) ENGINE = MergeTree()
ORDER BY EventId
SETTINGS storage_policy = 'mnt_f_only';