GNU/Linux >> Linux Esercitazione >  >> Linux

Errore OpenStack – Dimensioni della colonna dell'indice troppo grandi. La dimensione massima della colonna è 767 byte [Risolto]

Se ricevi un errore durante la sincronizzazione o il popolamento del database di servizi come Keystone, Glance, Nova e Neutron, ecco cosa ho fatto per risolverlo. Prima di ciò, dai un'occhiata all'istantanea dell'errore generato durante l'esecuzione di keystone-manage db_sync e glance-manage db_sync comandi. Tuttavia, lo stesso errore è stato visualizzato durante l'esecuzione di nova-manage db_sync e db_sync a gestione neutronica anche. L'errore non è correlato direttamente a OpenStack, ma è dovuto al set di caratteri del database non supportato.

La soluzione che vedremo funzionerà per tutti i comandi precedenti.

Istantanea dell'errore durante il popolamento del database Keystone:

# su -s /bin/sh -c "keystone-manage db_sync" keystone
 ERROR keystone DBError: (pymysql.err.InternalError) (1709, u'Index column size too large. The maximum column size is 767 bytes.') [SQL: u'\nCREATE TABLE migrate_version (\n\trepository_id VARCHAR(250) NOT NULL, \n\trepository_path TEXT, \n\tversion INTEGER, \n\tPRIMARY KEY (repository_id)\n)\n\n']

Istantanea dell'errore durante il popolamento del database di Glance:

# su -s /bin/sh -c "glance-manage db_sync" glance
 ERROR glance DBError: (pymysql.err.InternalError) (1709, u'Index column size too large. The maximum column size is 767 bytes.') [SQL: u'\nCREATE TABLE migrate_version (\n\trepository_id VARCHAR(250) NOT NULL, \n\trepository_path TEXT, \n\tversion INTEGER, \n\tPRIMARY KEY (repository_id)\n)\n\n']

Soluzione:

L'errore effettivo qui è La dimensione della colonna dell'indice è troppo grande. La dimensione massima della colonna è 767 byte, risultante durante l'esecuzione della query CREATE TABLE versione_migrate (repository_id VARCHAR(250) NOT NULL, repository_path TEXT, versione INTEGER, PRIMARY KEY (repository_id)

Il motivo dell'errore è la lunghezza utilizzata per la colonna o la chiave repository_id è 250 VARCHAR e 4 byte per carattere lo rendono più lungo del limite consentito da InnoDB, che è 767.

Ora, per risolvere questo problema, dobbiamo capire come le applicazioni memorizzano i dati nel database utilizzando il set di caratteri e le regole di confronto. Una codifica dei caratteri è un modo per codificare i caratteri in modo che si adattino alla memoria e le regole di confronto sono un gruppo di regole per confrontare i caratteri in un set di caratteri. Significa che dobbiamo modificare il set di caratteri e le regole di confronto nel file di configurazione di MySQL o modificare il database per utilizzare il set di caratteri e le regole di confronto corretti.

La prima cosa da controllare è my.cnf per vedere il valore corrente del set di caratteri e delle regole di confronto.

Nota :Verifica di my.cnf potrebbe non essere sufficiente, potrebbe essere necessario controllare tutti i file di configurazione in conf.d o mariadb.conf.d cartelle.

character-set-server = utf8mb4
 collation-server = utf8mb4_general_ci

Il set di caratteri utf8mb4 e le regole di confronto utf8mb4_general_ci  non è sufficiente per contenere la lunghezza di repository_id nella query SQL precedente. Quindi, la soluzione è sostituire questi valori con utf8 e  utf8_general_ci rispettivamente.

Riferimento.

Correzione 1:

Puoi verificare rapidamente tutti i file di configurazione di mysql e sostituire character-set-server e server di confronto valori su utf8 come mostrato di seguito e riavvia mysqld servizio:

/etc/mysql# grep -lr "utf8mb4" *
 conf.d/openstack.cnf
 conf.d/mysql.cnf
 mariadb.conf.d/50-mysql-clients.cnf
 mariadb.conf.d/50-server.cnf
 mariadb.conf.d/50-client.cnf
# grep utf8 conf.d/mysql.cnf
character-set-server = utf8
collation-server = utf8_general_ci

Nel complesso, devi eseguire i passaggi seguenti:

  1. Sostituisci utf8mb4 con utf8 in tutti i file di configurazione
  2. Ricarica mysqld demone
  3. Database Drop chiave di volta o sguardo o nova o neutrone (per qualsiasi servizio stavi ricevendo un errore e non preoccuparti, non hai ancora popolato il database ed è sicuro rimuoverlo)
  4. Crea database keystone o sguardo o nova o neutrone
  5. Prova db_sync o popola il database usando i comandi OpenStack. Probabilmente dovrebbe funzionare, altrimenti prova con la correzione 2.

Correzione 2:

Passaggio 1 :Accedi a MySQL

# mysql -u root -p

Passaggio 2 :Connetti al database

MariaDB [(none)]> use glance

Passaggio 3 :controlla il valore del set di caratteri

MariaDB > select @@character_set_database;
 +--------------------------+
 | @@character_set_database |
 +--------------------------+
 | utf8mb4 |
 +--------------------------+
 1 row in set (0.00 sec)

Passaggio 4 :modifica il valore da utf8mb4 a utf8 e imposta la raccolta su utf8_general_ci

MariaDB > ALTER DATABASE glance CHARACTER SET utf8 COLLATE utf8_general_ci;
 Query OK, 1 row affected (0.00 sec)

Nota :Ricorda di sostituire il nome del database di conseguenza.

Passaggio 5 :Conferma la modifica

MariaDB> select @@character_set_database;
 +--------------------------+
 | @@character_set_database |
 +--------------------------+
 | utf8 |
 +--------------------------+

Passaggio 6 :Sto provando db_sync il database e dovrebbe funzionare.

 su -s /bin/sh -c "glance-manage db_sync" glance

Linux
  1. Errore di calcolo OpenStack – Nessun record del nodo di calcolo per l'host [Risolto]

  2. Errore di avvio della VM OpenStack – Ultima eccezione:associazione non riuscita per la porta [Risolto]

  3. Come risolvere l'errore OpenStack - Impossibile eliminare la rete? [Risolto]

  4. Come correggere l'errore Metasploit:richiede l'installazione della gemma bundler? [Risolto]

  5. Cosa definisce la dimensione massima per un singolo argomento di comando?

Correzione dell'errore Nginx:413 Entità richiesta troppo grande

Errore OpenCA Impossibile caricare il certificato dal database

Il valore massimo dell'ID di processo?

Come rimuovere X byte dalla fine di un file di grandi dimensioni senza leggere l'intero file?

Come trovo la dimensione massima dello stack?

Il database di fail2ban è troppo grande (oltre 500 MB). Come faccio a portarlo a una dimensione ragionevole?