GNU/Linux >> Tutoriales Linux >  >> Linux

Error de OpenStack:el tamaño de la columna de índice es demasiado grande. El tamaño máximo de columna es de 767 bytes [Resuelto]

Si recibe un error al sincronizar o completar la base de datos de servicios como Keystone, Glance, Nova y Neutron, esto es lo que hice para solucionarlo. Antes de eso, eche un vistazo a la instantánea del error lanzado al ejecutar keystone-manage db_sync y administrar de un vistazo db_sync comandos Sin embargo, se observó el mismo error al ejecutar nova-manage db_sync y administración de neutrones db_sync así como. El error no está relacionado directamente con OpenStack, sino que se debe al conjunto de caracteres de la base de datos no compatible.

La solución que vamos a ver funcionará para todos los comandos anteriores.

Instantánea del error al completar la base de datos de 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']

Instantánea del error al completar la base de datos de 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']

Solución:

El error real aquí es El tamaño de la columna de índice es demasiado grande. El tamaño máximo de columna es de 767 bytes, que resultó al ejecutar la consulta CREATE TABLE migrate_version (repository_id VARCHAR(250) NOT NULL, repository_path TEXT, version INTEGER, PRIMARY KEY (repository_id)

El motivo del error es la longitud utilizada para la columna o clave repository_id es 250 VARCHAR y 4 bytes por carácter lo hace más largo que el límite permitido por InnoDB, que es 767.

Ahora, para solucionar este problema, debemos comprender cómo las aplicaciones almacenan datos en la base de datos utilizando el conjunto de caracteres y la intercalación. Una codificación de caracteres es una forma de codificar caracteres para que quepan en la memoria y la intercalación es un grupo de reglas para comparar caracteres en un conjunto de caracteres. Significa que necesitamos ajustar el juego de caracteres y la intercalación en el archivo de configuración de MySQL o modificar la base de datos para usar el juego de caracteres y la intercalación correctos.

Lo primero que debe verificar es my.cnf para ver el valor actual del juego de caracteres y la intercalación.

Nota :Verificando my.cnf puede no ser suficiente, es posible que deba verificar todos los archivos de configuración en conf.d o mariadb.conf.d carpetas.

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

El conjunto de caracteres utf8mb4 y la intercalación utf8mb4_general_ci  no es suficiente para contener la longitud de repository_id en la consulta SQL anterior. Entonces, la solución es reemplazar esos valores con utf8 y  utf8_general_ci respectivamente.

Referencia.

Corrección 1:

Puede verificar rápidamente todos los archivos de configuración de mysql y reemplazar character-set-server y servidor de colación valores a utf8 como se muestra a continuación y reinicie mysqld servicio:

/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

En general, debe realizar los siguientes pasos:

  1. Reemplazar utf8mb4 por utf8 en todos los archivos de configuración
  2. Recargar mysqld demonio
  3. Dejar la base de datos keystone o vistazo o nova o neutron (para cualquier servicio que esté recibiendo un error y no se preocupe, aún no ha rellenado la base de datos y es seguro eliminarlo)
  4. Crear base de datos keystone o look o nova o neutron
  5. Pruebe db_sync o complete la base de datos usando los comandos de OpenStack. Probablemente debería funcionar; de lo contrario, intente la solución 2.

Solución 2:

Paso 1 :Iniciar sesión en MySQL

# mysql -u root -p

Paso 2 :Conectar a la base de datos

MariaDB [(none)]> use glance

Paso 3 :Comprobar el valor del juego de caracteres

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

Paso 4 :Cambia el valor utf8mb4 a utf8 y establezca intercalar en utf8_general_ci

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

Nota :Recuerde reemplazar el nombre de la base de datos según corresponda.

Paso 5 :Confirmar el cambio

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

Paso 6 :Intentando db_sync la base de datos y debería funcionar.

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

Linux
  1. Cómo corregir el error de OpenStack:¿no se pudo eliminar la red? [Resuelto]

  2. ¿Cómo reparar el error de Metasploit:requiere que se instale la gema del paquete? [Resuelto]

  3. Error de OpenCA No se puede cargar el certificado desde la base de datos

  4. ¿Qué define el tamaño máximo para un solo argumento de comando?

  5. ¿El valor máximo de la identificación del proceso?

Solucionar el error de Nginx:413 Entidad de solicitud demasiado grande

¿Cómo solucionar el error:Cpanel::Excepción::Base de datos::Error/(XID 9a8sak)?

Obtener el tamaño de la base de datos en MySQL

¿Cuál es el tamaño máximo de un valor de variable de entorno de Linux?

¿Puedo suponer que el tamaño de long int es siempre de 4 bytes?

¿Por qué el tamaño de un directorio siempre es de 4096 bytes en Unix?