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:
- Ganti utf8mb4 ke utf8 di semua file konfigurasi
- Muat ulang mysqld daemon
- 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)
- Buat basis data keystone atau sekilas atau nova atau neutron
- 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