GNU/Linux >> Linux の 問題 >  >> Linux

OpenStackエラー–インデックスの列サイズが大きすぎます。最大列サイズは767バイトです[解決済み]

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

全体として、以下の手順を実行する必要があります:

  1. utf8mb4をutf8に置き換えます すべての構成ファイルで
  2. リロードmysqld デーモン
  3. データベースを削除keystoneまたはglanceまたはnovaまたはneutron (エラーが発生したサービスがどれであっても、心配する必要はありません。データベースにはまだデータが入力されていないため、安全に削除できます)
  4. データベースを作成するkeystoneまたはglanceまたはnovaまたはneutron
  5. 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に変更 およびcollat​​eを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

Linux
  1. OpenStack Neutron db_syncエラー–デフォルト値がNULLのNOTNULL列を追加できません[解決済み]

  2. コマンド単一引数の最大サイズを定義するものは何ですか?

  3. プロセスIDの最大値は?

  1. エラーをトラブルシューティングする方法:Cpanel ::Exception ::Database ::Error /(XID 9a8sak)?

  2. MySQLでデータベースサイズを取得する

  3. Linux 環境変数値の最大サイズは?

  1. OpenStack Compute Error –ホストのコンピューティングノードレコードがありません[解決済み]

  2. UNIXでディレクトリのサイズが常に4096バイトなのはなぜですか?

  3. fail2ban のデータベースが大きすぎます (500 MB 以上)。適切なサイズにするにはどうすればよいですか?