GNU/Linux >> Belajar Linux >  >> Linux

OpenStack Error – Ukuran kolom indeks terlalu besar. Ukuran kolom maksimum adalah 767 byte [Terpecahkan]

Jika Anda mendapatkan error saat menyinkronkan atau mengisi database layanan seperti Keystone, Glance, Nova, dan Neutron, inilah yang saya lakukan untuk memperbaikinya. Sebelum itu, lihat cuplikan kesalahan yang terjadi saat menjalankan keystone-manage db_sync dan glance-manage db_sync perintah. Namun, kesalahan yang sama terlihat saat menjalankan nova-manage db_sync dan pengelolaan neutron db_sync demikian juga. Kesalahan tidak terkait dengan OpenStack secara langsung, tetapi karena kumpulan karakter basis data yang tidak didukung.

Solusi yang akan kita lihat akan bekerja untuk semua perintah di atas.

Snapshot kesalahan saat mengisi basis data 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']

Snapshot kesalahan saat mengisi database 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']

Solusi:

Kesalahan sebenarnya adalah Ukuran kolom indeks terlalu besar. Ukuran kolom maksimum adalah 767 byte, yang dihasilkan saat menjalankan kueri CREATE TABLE migration_version (repository_id VARCHAR(250) NOT NULL, repository_path TEXT, version INTEGER, PRIMARY KEY (repository_id)

Alasan kesalahan adalah, panjang yang digunakan untuk kolom atau kunci repository_id adalah 250 VARCHAR dan 4 byte per karakter membuatnya lebih lama dari batas yang diizinkan oleh InnoDB, yaitu 767.

Sekarang untuk memperbaiki masalah ini kita perlu memahami bagaimana aplikasi menyimpan data dalam database menggunakan Character set and collation. Pengkodean karakter adalah cara untuk menyandikan karakter sehingga sesuai dengan memori dan susunan adalah sekelompok aturan untuk membandingkan karakter dalam kumpulan karakter. Artinya, kita perlu menyesuaikan character set dan collation pada file konfigurasi MySQL atau mengubah database untuk menggunakan character set dan collation yang benar.

Hal pertama yang harus diperiksa adalah my.cnf untuk melihat nilai set karakter dan susunan karakter saat ini.

Catatan :Memverifikasi my.cnf mungkin tidak cukup, Anda mungkin perlu memeriksa semua file konfigurasi di bawah conf.d atau mariadb.conf.d folder.

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

kumpulan karakter utf8mb4 dan susunan utf8mb4_general_ci  tidak cukup untuk menampung panjang repository_id dalam kueri SQL di atas. Jadi, solusinya adalah mengganti nilai tersebut dengan utf8 dan  utf8_general_ci masing-masing.

Referensi.

Perbaikan 1

Anda dapat dengan cepat memverifikasi semua file konfigurasi mysql dan mengganti character-set-server dan server-pemeriksaan nilai ke utf8 seperti yang ditunjukkan di bawah ini dan mulai ulang mysqld layanan:

/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

Secara keseluruhan, Anda perlu melakukan langkah-langkah di bawah ini:

  1. Ganti utf8mb4 ke utf8 di semua file konfigurasi
  2. Muat ulang mysqld daemon
  3. Lepaskan database keystone atau sekilas atau nova atau neutron (untuk layanan mana pun Anda mendapatkan kesalahan dan jangan khawatir, Anda belum mengisi database dan aman untuk dihapus)
  4. Buat basis data keystone atau sekilas atau nova atau neutron
  5. Coba db_sync atau isi database menggunakan perintah OpenStack. Mungkin akan berhasil, jika tidak, coba Perbaiki 2.

Perbaikan 2:

Langkah 1 :Masuk ke MySQL

# mysql -u root -p

Langkah 2 :Hubungkan ke database

MariaDB [(none)]> use glance

Langkah 3 :Periksa nilai set karakter

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

Langkah 4 :Ubah nilai utf8mb4 menjadi utf8 dan setel susun ke utf8_general_ci

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

Catatan :Ingatlah untuk mengganti nama database yang sesuai.

Langkah 5 :Konfirmasikan perubahan

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

Langkah 6 :Mencoba db_sync database dan itu akan berhasil.

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

Linux
  1. Apa yang Mendefinisikan Ukuran Maksimum Untuk Argumen Perintah Tunggal?

  2. Menemukan Ukuran Sektor Dari Sebuah Partisi?

  3. Mengapa Ls Dan Hexdump Tidak Setuju Tentang Ukuran File?

  1. Bagaimana cara mengatasi kesalahan:Cpanel::Exception::Database::Error/(XID 9a8sak)?

  2. Dapatkan ukuran database di MySQL

  3. Berapa ukuran maksimum nilai variabel lingkungan Linux?

  1. OpenStack Neutron db_sync error – Tidak dapat menambahkan kolom NOT NULL dengan nilai default NULL [Terpecahkan]

  2. OpenStack Compute Error – Tidak ada catatan node komputasi untuk host [Terpecahkan]

  3. OpenStack VM Launch Error – Pengecualian terakhir:Binding gagal untuk port [Diselesaikan]