end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

mysql8で、ERROR 1118 (42000) at line 2596: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.

とある DB のdumpデータをインポートしたところ、以下のエラーが発生。

どうやら、合計 column長があまりに長いtableが原因らしい。

$  mysql -u root -p test_db < xparc_schema.sql 
Enter password: 
ERROR 1118 (42000) at line 2596: Row size too large (> 8126).
  Changing some columns to TEXT or BLOB may help. In current row format,
  BLOB prefix of 0 bytes is stored inline.

そこで、mysql-server.cnf ( my.cnf )を少々、設定変更し、対応。

以下のように、innodb_strict_mode と innodb_file_per_table を追加。

$ sudo vi /etc/my.cnf.d/mysql-server.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/run/mysqld/mysqld.pid

innodb_strict_mode=0
innodb_file_per_table = 1

その後、mysql serverを再起動し、設定反映。

$ sudo systemctl start mysqld

が、そもそも、db tableの設計が悪い。 今回、とりあえず、インポートできる状態にしましたが、 今後、利用中にレコードが正しく登録されない等の問題が発覚するかも。

その他、インターネットで検索すると、 「innodb_file_format = Barracuda」を「mysql-server.cnf」へ追加した例もありましたが、 今回、利用した mysql8では、以下のエラーにより、起動できませんでした。

$ sudo tail -f /var/log/mysql/mysqld.log
2021-04-17T07:57:06.897406Z 0 [ERROR] [MY-000067] [Server] unknown variable 'innodb_file_format=Barracuda'.
2021-04-17T07:57:06.898027Z 0 [ERROR] [MY-010119] [Server] Aborting