MySQL to MariaDB
Migration Guide

世界一わかりやすいデータベース移行の教科書

Start Learning

01. 基本のキ:双子のようで違う、ビターな関係

やあ、ようこそ「世界一わかりやすいデータベース教室」へ!
講師の私だ。これから君を、MySQLからMariaDBへの移行という冒険にいざなおう。

Database Fork Concept

1. そもそも、なんで名前が違うの?

実はこの二人、生みの親が同じなんだ。

  1. 昔、モンティさんがMySQLを作った。
  2. MySQLが大人気になり、巨大企業Oracleに買収された。
  3. モンティさんは「自由な開発ができなくなるかも」と危惧した。
  4. そこでコードをコピーして、新しいプロジェクトMariaDBを立ち上げた。(フォーク)

つまり、MariaDBは「自由を求めて家出した、MySQLの生き別れの妹」なんだ。

2. なぜ移行するの?

Q1. MariaDBがMySQLから分かれた主な理由は?
正解:B
「オープンソースの魂」を守るために生まれたのがMariaDBです。

02. 接続の極意:翻訳機(ドライバ)を入れ替えろ

アプリとデータベースをつなぐ「架け橋」の話をしよう。

Translator Robot

1. ODBC・JDBCって何?

アプリは直接SQLを話せない。間に「通訳さん(ドライバ)」がいるんだ。

2. 「MySQL用の通訳」をそのまま使うな

「中身は似てるんだから、MySQL用のドライバでも動くでしょ?」
結論:動くこともあるが、予期せぬエラーの元になる。

3. 正しい「MariaDB Connector」を使おう

解決策はシンプル。通訳さんを「MariaDB専属(Connector)」に交代させることだ。

Q2. MariaDBに接続するとき、MySQL用のドライバを使うとどうなる?
正解:C
これが一番怖い!横着せずにMariaDB公式のConnectorを使いましょう。

03. SQLの落とし穴:JSON型と予約語

MySQLとMariaDB、基本の会話は同じだが、「新しい単語」の使い方が違う。

1. JSON型の罠(最大の地雷)

MySQLのJSON型はバイナリだが、MariaDBのJSON型はただのLONGTEXT型のエイリアスだ。
「同じ性能が出る」と思っていると痛い目を見るぞ。

2. 予約語で転ぶ

SELECT rows FROM my_table;
-- エラー!!「rows」はオレたちの言葉だ!

対策:怪しいカラム名はバッククォート(`)で囲もう。

Q1. MariaDBにおける「JSON型」の実体はなに?
正解:B
MariaDBではJSONは実質テキストとして扱われます。

04. インフラの壁:設定と認証

1. my.cnf の方言

MySQLの my.cnf をそのままコピペすると、パラメータ名の違いで起動しないことがある。
必ず「MariaDBのデフォルト」からスタートして継ぎ足そう。

2. 認証プラグインの壁

MySQL 8.0の caching_sha2_password は強力だが、MariaDBとは互換性が低い。
ログインできない時は、昔ながらの mysql_native_password を試すといい。

CREATE USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';
Q. ユーザー名とパスワードが合っているのにログインできない時は?
正解:B
認証方式(プラグイン)の違いを疑いましょう。

05. 移行実践:ダンプ&リストア

Data Transport

1. 魔法のオプションには頼るな

--compatible オプションは最近はアテにならない。プレーンなSQLとして書き出すのが定石だ。

2. GTID問題

MySQLからダンプする時は、GTID(レプリケーションID)を含めないようにしよう。

mysqldump --set-gtid-purged=OFF ...

3. 大量データなら MariaDB Backup

数GB以上のデータなら、テキスト形式のmysqldumpではなく、物理バックアップツールの MariaDB Backup を使おう。

06. エピローグ&虎の巻

最後に、よくあるエラーの対処法を授けよう。

トラブルシューティング

Congratulations!
これで君も「DB移行マスター」だ。