やあ、ようこそ「世界一わかりやすいデータベース教室」へ!
講師の私だ。これから君を、MySQLからMariaDBへの移行という冒険にいざなおう。
実はこの二人、生みの親が同じなんだ。
つまり、MariaDBは「自由を求めて家出した、MySQLの生き別れの妹」なんだ。
アプリとデータベースをつなぐ「架け橋」の話をしよう。
アプリは直接SQLを話せない。間に「通訳さん(ドライバ)」がいるんだ。
「中身は似てるんだから、MySQL用のドライバでも動くでしょ?」
結論:動くこともあるが、予期せぬエラーの元になる。
解決策はシンプル。通訳さんを「MariaDB専属(Connector)」に交代させることだ。
MySQLとMariaDB、基本の会話は同じだが、「新しい単語」の使い方が違う。
MySQLのJSON型はバイナリだが、MariaDBのJSON型はただのLONGTEXT型のエイリアスだ。
「同じ性能が出る」と思っていると痛い目を見るぞ。
SELECT rows FROM my_table;
-- エラー!!「rows」はオレたちの言葉だ!
対策:怪しいカラム名はバッククォート(`)で囲もう。
MySQLの my.cnf をそのままコピペすると、パラメータ名の違いで起動しないことがある。
必ず「MariaDBのデフォルト」からスタートして継ぎ足そう。
MySQL 8.0の caching_sha2_password は強力だが、MariaDBとは互換性が低い。
ログインできない時は、昔ながらの mysql_native_password を試すといい。
CREATE USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';
--compatible オプションは最近はアテにならない。プレーンなSQLとして書き出すのが定石だ。
MySQLからダンプする時は、GTID(レプリケーションID)を含めないようにしよう。
mysqldump --set-gtid-purged=OFF ...
数GB以上のデータなら、テキスト形式のmysqldumpではなく、物理バックアップツールの MariaDB Backup を使おう。
最後に、よくあるエラーの対処法を授けよう。
0900_ai_ci を general_ci に置換せよ。innodb_large_prefix = ON を設定せよ。
Congratulations!
これで君も「DB移行マスター」だ。