ownCloudのデータベースをデフォルトのSQLiteからMariaDBなどに変更する（CentOS7）

# 背景
* 事情があってCentOS7で運用していたownCloudをインストールしなおした。（従来のownCloudサーバのバージョンは8系列）
* データベースをデフォルトのSQLiteにしてしまったので、MariaDBに変更したい（ownCloudもそれを奨めてくる）。 
* 従来運用していたownCloudで利用していたデータベースがMariaDBにあるので、これを上書きして使ってしまってよい。
* MySQLでも基本的に同じ作業で変換できるはず。

# 方法
* 公式ドキュメント **[Converting Database Type]( https://doc.owncloud.com/server/admin_manual/configuration/database/db_conversion.html)** に、`occ` コマンドを使う方法が書いてある。
    * `occ` の `db` コマンドを使う。データベース変換機能は 2020.10.07 時点では実験的実装と表示される。（筆者の環境では動画などではない細かい文書ファイル中心に300 GBくらいを同期していますが、問題なく変換できた）
    * ネットで検索すると、日本語で引っかかってくるのは `config.php` を削除してwebから設定し直すというものが多い。こっちは試していないので、どっちが確実かは未検証。

# 手順
* 上記公式ドキュメントに沿って進める。

## ownCloud設定ファイルの更新
* ownCloudの設定ファイル `{インストール先}/config/config.php` に以下の１行を加える

```php:cinfig.php
'mysql.utf8mb4' => true,
```

## MariaDBの設定更新と再起動

### MariaDBのアップデート 
* 公式ドキュメントの設定は、CentOS7デフォルトのMariaDB5.5では使えないので、MariaDBをバージョン10にアップデート
    * **参考** : [CentOS7のMariaDB5.5を10.3にアップグレードする](https://qiita.com/egnr-in-6matroom/items/6dbb684ff03a228947bd)

```shell-session
# rpm -qa | grep -i mariadb
mariadb-5.5.50-1.el7_2.x86_64
mariadb-libs-5.5.56-2.el7.x86_64
mariadb-server-5.5.50-1.el7_2.x86_64
mariadb-libs-5.5.50-1.el7_2.x86_64
mariadb-5.5.56-2.el7.x86_64
# systemctl stop mariadb
# sudo yum update mariadb-server -y
# rpm -qa | grep -i mariadb
MariaDB-common-10.5.5-1.el7.centos.x86_64
MariaDB-server-10.5.5-1.el7.centos.x86_64
MariaDB-client-10.5.5-1.el7.centos.x86_64
MariaDB-compat-10.5.5-1.el7.centos.x86_64
# systemctl start mariadb
# ss -ltn | grep 3306
LISTEN     0      80          :::3306
```

### MariaDBの設定更新
* 設定ファイルをバックアップ

```shell-session
# cp -p /etc/my.cnf /etc/my.cnf.bak
```

* 設定ファイル `/etc/my.cnf` の `[mysqld]` ブロックに設定を追記

```conf:/etc/my.cnf
[mysqld]
   :
  中略 従来の設定内容
   :
key_buffer_size         = 32M
table_cache             = 400
query_cache_size        = 128M
#in InnoDB:
innodb_flush_method=O_DIRECT
innodb_flush_log_at_trx_commit=1
innodb_log_file_size=256M
innodb_log_buffer_size = 128M
innodb_buffer_pool_size=2048M
innodb_buffer_pool_instances=3
innodb_read_io_threads=4
innodb_write_io_threads=4
innodb_io_capacity = 500
innodb_thread_concurrency=2
innodb_file_format=Barracuda
innodb_file_per_table=ON
innodb_large_prefix = 1
character-set-server  = utf8mb4
collation-server      = utf8mb4_general_ci
```

### MariaDBの再起動

```shell-session
# systemctl start mariadb
# systemctl status mariadb
● mariadb.service - MariaDB 10.5.5 database server
   :
   :
  後略
```

#### サービスの自動起動
* サービスの自動起動を設定するには、以下を実行

```shell-session
# systemctl enable mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
```

## occコマンドでデータベースを変換する

```shell-session
# cd /var/www/html/owncloud
# sudo -u apache php occ db:convert-type --clear-schema --all-apps mysql owncloud 127.0.0.1 owncloud
```

* `--clear-schema` オプションで、現在のスキーマが上書きされる
* この記事を書いた時点（2020.10.07）では、データベース変換機能は実験的（This feature is currently experimental.）であると表示されます。覚悟の上使いましょう。

```shell-session
This feature is currently experimental.
Enter a password to access a target database: 
Clearing schema in new database
Creating schema in new database
oc_account_terms
    0 [>---------------------------]
   :
   :
  中略
   :
   :
oc_vcategory_to_object
    0 [>---------------------------]
```

**おしまいです**