とある 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