RockyLinux 8 で MariaDB と MySQL の競合を解決する方法

MariaDBとMySQLは、非常に似た機能を持つ人気のあるオープンソースデータベースシステムです。時には、同じシステム上でこれらを同時に使用しようとすると、パッケージの競合が発生することがあります。この記事では、MariaDBとMySQLのパッケージ間の競合、およびMariaDBパッケージの異なるバージョン間の競合に直面した場合の解決策をいくつか提案します。

# エラー内容

以下のエラーが発生した場合:

```
 Problem 1: package mariadb-devel-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64 conflicts with mysql-devel provided by MariaDB-devel-10.6.12-1.el8.x86_64
  - cannot install the best update candidate for package mariadb-devel-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64
  - cannot install the best update candidate for package mariadb-connector-c-devel-3.1.11-2.el8_3.x86_64
 Problem 2: package mariadb-gssapi-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64 requires mariadb-server(x86-64) = 3:10.3.35-1.module+el8.6.0+1005+cdf19c22, but none of the providers can be installed
  - package mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64 conflicts with mysql-server provided by MariaDB-server-10.6.12-1.el8.x86_64
  - package MariaDB-server-10.6.12-1.el8.x86_64 obsoletes mariadb-server provided by mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64
  - cannot install the best update candidate for package mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64
  - cannot install the best update candidate for package mariadb-gssapi-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64
 Problem 3: problem with installed package mariadb-gssapi-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64
  - package mariadb-gssapi-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64 requires mariadb-server(x86-64) = 3:10.3.35-1.module+el8.6.0+1005+cdf19c22, but none of the providers can be installed
  - package mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64 conflicts with mysql-server provided by MariaDB-server-10.6.12-1.el8.x86_64
  - package MariaDB-server-10.6.12-1.el8.x86_64 obsoletes mariadb-server provided by mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64
  - cannot install the best update candidate for package mariadb-server-utils-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64
 Problem 4: problem with installed package mariadb-devel-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64
  - package mariadb-devel-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64 conflicts with mysql-devel provided by MariaDB-devel-10.6.10-1.el8.x86_64
  - problem with installed package mariadb-connector-c-devel-3.1.11-2.el8_3.x86_64
  - package mariadb-devel-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64 conflicts with mysql-devel provided by MariaDB-devel-10.6.11-1.el8.x86_64
  - package mariadb-devel-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64 conflicts with mysql-devel provided by MariaDB-devel-10.6.12-1.el8.x86_64
  - package mariadb-connector-c-devel-3.1.11-2.el8_3.x86_64 requires mariadb-connector-c = 3.1.11-2.el8_3, but none of the providers can be installed
  - package MariaDB-shared-10.6.12-1.el8.x86_64 obsoletes mariadb-connector-c provided by mariadb-connector-c-3.1.11-2.el8_3.x86_64
  - package MariaDB-shared-10.6.12-1.el8.x86_64 obsoletes mariadb-connector-c provided by mariadb-connector-c-3.1.11-2.el8_3.i686
  - cannot install the best update candidate for package mariadb-connector-c-3.1.11-2.el8_3.x86_64
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
```

これは、MariaDBとMySQLのパッケージ間の競合、およびMariaDBパッケージの異なるバージョン間の競合が原因です。

# 解決策

これらの競合を解決するために、以下のオプションがあります：

## 1. 競合するパッケージを削除して新しいものに置き換える

コマンドラインに`--allowerasing`フラグを追加して、競合するパッケージを削除し、新しいものに置き換えます。

```
sudo dnf update --allowerasing
```

## 2. 解決できない依存関係のあるパッケージをスキップする

`--skip-broken`フラグを使用して、解決できない依存関係のあるパッケージをスキップし、残りのパッケージをアップデートします。

```
sudo dnf update --skip-broken
```

## 3. 最良の候補パッケージだけでなく、他のバージョンも検討する

`--nobest`フラグを使用して、最良の候補パッケージだけでなく、他のバージョンも検討します。

```
sudo dnf update --nobest
```

## 4. MySQLとMariaDBを別々の場所にインストールする

MySQLとMariaDBの両方をシステムに保持したい場合は、各データベースシステムのドキュメントに従って別々の場所にインストールできます。

## 5. MariaDBのみを使用する

MariaDBのみを使用することにした場合は、MySQL関連のパッケージを削除してからアップデートします。

```
sudo dnf remove mysql\* --allowerasing
sudo dnf update
```

## 6. MySQLのみを使用する

MySQLのみを使用することにした場合は、MariaDB関連のパッケージを削除してからアップデートします。

```
sudo dnf remove mariadb\* --allowerasing
sudo dnf update
```

# 注意事項

システムに変更を加える前に、必ずデータをバックアップしてください。これにより、データ損失のリスクを最小限に抑えることができます。

# まとめ

この記事では、MariaDBとMySQLのパッケージ間の競合、およびMariaDBパッケージの異なるバージョン間の競合を解決する方法をいくつか紹介しました。最適な解決策を選択することで、これらの競合を効果的に解決し、システムの安定性を維持することができます。