Drush コマンドで Drupal UTF8 データベースを UTF8MB4 に変換する方法

Nid: 916

ステータス画面で "Database 4 byte UTF-8 support    Not enabled" のメッセージが出ている場合、この方法でDBを UTF8MB4 に変換して解決します。

1 . MariaDB設定

  • 現状確認
$ sudo mysql -u root -e "SHOW VARIABLES LIKE 'innodb%';" | grep 'large_prefix\|file_format\s\+\|file_per_table'
innodb_file_format      Antelope
innodb_file_per_table   ON
innodb_large_prefix     OFF
  • 設定変更
$ sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld]
...
innodb_file_per_table=1
innodb_large_prefix=true
innodb_file_format=barracuda
  • DB再起動して設定反映
$ sudo systemctl restart mysql
$ sudo mysql -u root -e "SHOW VARIABLES LIKE 'innodb%';" | grep 'large_prefix\|file_format\s\+\|file_per_table'
innodb_file_format      Barracuda
innodb_file_per_table   ON
innodb_large_prefix     ON

2 . drush コマンド "UTF8MB4 Convert" のインストール

$ drush dl utf8mb4_convert
$ drush cc drush

3 . DB変換とDrupal設定

$ cd /var/www/html/example.com/
$ drush vset maintenance_mode 1 # メンテナンスモード
$ sudo drush archive-dump # DBバックアップ
$ drush utf8mb4-convert-databases # 変換
$ sudo vim sites/default/settings.php # 設定
$databases['default']['default'] = array(
...
  'charset' => 'utf8mb4',
  'collation' => 'utf8mb4_general_ci',
);
$ drush vset maintenance_mode 0 # メンテナンスモード解除

4 . サイトにアクセスして確認

http://example.com/admin/reports/status

5 . 有効にしているのにエラー

Database 4 byte UTF-8 support Not supported
4 byte UTF-8 for mysql is activated, but not supported on your system. Please turn this off in settings.php, or ensure that all database-related requirements are met. See the documentation on adding 4 byte UTF-8 support for more information.
テーブル drupal_utf8mb4_test を削除して対応。
$ drush sql-query "drop table drupal_utf8mb4_test;"