Keystone、Glance、Nova、Neutronなどのサービスのデータベースの同期または入力中にエラーが発生した場合は、次の方法で修正しました。その前に、 keystone-manage db_syncの実行中にスローされたエラーのスナップショットを見てください。 およびglance-managedb_sync コマンド。ただし、 nova-manage db_syncの実行中に同じエラーが発生しました およびneutron-managedb_sync 同じように。このエラーはOpenStackに直接関係しているのではなく、サポートされていないデータベースの文字セットが原因です。
これから説明するソリューションは、上記のすべてのコマンドで機能します。
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']
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']
解決策:
ここでの実際のエラーは、インデックスの列サイズが大きすぎます。最大列サイズは767バイトです。 これは、クエリの実行中に発生しました CREATE TABLEmigrate_version(repository_id VARCHAR(250)NOT NULL、repository_path TEXT、version INTEGER、PRIMARY KEY(repository_id)
エラーの理由は、列またはキーに使用される長さ repository_id 250 VARCHAR また、1文字あたり4バイトであるため、InnoDBで許可されている制限である767よりも長くなります。
この問題を修正するには、アプリケーションが文字セットと照合を使用してデータベースにデータを格納する方法を理解する必要があります。文字エンコードは、メモリに収まるように文字をエンコードする方法であり、照合は、文字セット内の文字を比較するためのルールのグループです。つまり、MySQL構成ファイルの文字セットと照合を調整するか、正しい文字セットと照合を使用するようにデータベースを変更する必要があります。
最初に確認するのはmy.cnfです 文字セットと照合の現在の値を確認します。
注 : my.cnfを確認しています 十分でない場合は、 conf.dの下にあるすべての構成ファイルを確認する必要があります。 またはmariadb.conf.d フォルダ。
character-set-server = utf8mb4 collation-server = utf8mb4_general_ci
文字セットutf8mb4と照合utf8mb4_general_ci 上記のSQLクエリでrepository_idの長さを保持するには不十分です。したがって、解決策は、これらの値を utf8に置き換えることです。 およびutf8_general_ci それぞれ。
参照。
修正1:
mysqlのすべての構成ファイルをすばやく確認し、 character-set-serverを置き換えることができます および照合サーバー utf8の値 以下に示すように、 mysqldを再起動します サービス:
/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
全体として、以下の手順を実行する必要があります:
- utf8mb4をutf8に置き換えます すべての構成ファイルで
- リロードmysqld デーモン
- データベースを削除keystoneまたはglanceまたはnovaまたはneutron (エラーが発生したサービスがどれであっても、心配する必要はありません。データベースにはまだデータが入力されていないため、安全に削除できます)
- データベースを作成するkeystoneまたはglanceまたはnovaまたはneutron
- db_syncを試すか、OpenStackコマンドを使用してデータベースにデータを取り込みます。おそらく機能するはずです。そうでない場合は、修正2を試してください。
修正2:
ステップ1 :MySQLにログイン
# mysql -u root -p
ステップ2 :データベースに接続する
MariaDB [(none)]> use glance
ステップ3 :文字セット値を確認してください
MariaDB > select @@character_set_database; +--------------------------+ | @@character_set_database | +--------------------------+ | utf8mb4 | +--------------------------+ 1 row in set (0.00 sec)
ステップ4 :値utf8mb4をutf8に変更 およびcollateをutf8_general_ciに設定
MariaDB > ALTER DATABASE glance CHARACTER SET utf8 COLLATE utf8_general_ci; Query OK, 1 row affected (0.00 sec)
注 :それに応じてデータベース名を置き換えることを忘れないでください。
ステップ5 :変更を確認する
MariaDB> select @@character_set_database; +--------------------------+ | @@character_set_database | +--------------------------+ | utf8 | +--------------------------+
ステップ6 :データベースをdb_syncしようとすると、機能するはずです。
su -s /bin/sh -c "glance-manage db_sync" glance