No se puede INSERTAR EN la base de datos de ClickHouse debido a permisos insuficientes: / var / lib / clickhouse / data /

Dec 15 2020

Creé una instancia de ClickHouse DB en un contenedor a través de 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'

Puedo acceder a él y encontrar la base de datos que creé, pero cuando ejecuto

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

Obtengo esta respuesta:

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.

¿Cómo obtengo permiso para INSERTAR EN?

Notas:

No tengo problemas para ejecutar:

SELECT * FROM simple_people

Estoy en WSL: Ubuntu-20.04

Respuestas

1 DennyCrane Dec 16 2020 at 00:27

Es gracias a la ventana acoplable WSL +.

Pruebe la ruta completa, en lugar de ./data

1 sh0ck_wave Dec 21 2020 at 04:42

Instalé clickhouse directamente en WSL Ubuntu 18.04 en Windows Server 2019 sin Docker y enfrenté el mismo problema. En mi caso, estaba intentando insertar datos en una tabla con la configuración de la política de almacenamiento de ClickHouse para que todos los datos se almacenaran en / mnt / f / clickhouse (F: \ clickhouse en Windows). El error que obtuve fue:

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

La solución para el problema fue habilitar la función de metadatos en WSL que sincroniza los permisos entre Linux y Windows al volver a montar la unidad F: con la función habilitada. Y luego vuelva a crear la carpeta clickhouse si ya existe.

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

Información extra

Si tiene alguna pregunta sobre cómo configurar una política de almacenamiento en clickhouse, elija la ubicación de sus datos. A continuación se muestra el contenido de mi /etc/clickhouse-server/config.d/storage.xml

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

Elija la política de almacenamiento al crear la tabla:

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