MySQL と MariaDB
注: 私はMySQLとMariaDBについて、何も知りません
MariaDBはMySQL互換というイメージを持っている。
mysql
コマンドでつながるし、/etc/mysql/my.cnf
を参照している。
もしかして中身一緒なんじゃないかと思ったので以下のように実験をした。
実験内容
- docker で mysqlのDBを作り、データファイル的なもの(
/var/lib/mysql
)はvolumeに保存。 - mysqlコマンドで、データベース、テーブル、レコードを作成。
- mysqlのコンテナを削除。
- mariadbのコンテナを作成。データファイル的なものは先程のボリュームを指定。
- mysqlコマンドでselect出来るか確認。
実験手順
#!/bin/bash
mkdir db
docker run -d -p "3306:3306" -v "$(readlink -f ./db):/var/lib/mysql:rw" -e MYSQL_ROOT_PASSWORD=password --name db mysql
sleep 20
mysql -u root -ppassword -h 127.0.0.1 << EOF
create database test1;
use test1;
create table test_table(name varchar(255));
insert into test_table(name) values ('fooo');
EOF
docker stop db
docker rm db
docker run -d -p "3306:3306" -v "$(readlink -f ./db):/var/lib/mysql:rw" -e MYSQL_ROOT_PASSWORD=password --name db mariadb
sleep 20
mysql -u root -ppassword -h 127.0.0.1 << EOF
select * from test1.test_table;
EOF
環境はUbuntu Server 14.04 + docker 1.7.0
結果
こんなんなりました
ubuntu@ubuntu:~$ bash -x test.sh
+ mkdir db
++ readlink -f ./db
+ docker run -d -p 3306:3306 -v /home/fujioka/db:/var/lib/mysql:rw -e MYSQL_ROOT_PASSWORD=password --name db mysql
e64ce620ae9b849dde62338e63bd35375f36221ed989142bda40dfe31b8582b3
+ sleep 20
+ mysql -u root -ppassword -h 127.0.0.1
+ docker stop db
db
+ docker rm db
db
++ readlink -f ./db
+ docker run -d -p 3306:3306 -v /home/fujioka/db:/var/lib/mysql:rw -e MYSQL_ROOT_PASSWORD=password --name db mariadb
475af5ed11ce71d37075b87ce6aae7482d304bfde95bc9cb00d31613336ed3e2
+ sleep 20
+ mysql -u root -ppassword -h 127.0.0.1
name
fooo
ubuntu@ubuntu:~$
とりあえず、ちゃんとselect出来たように見えます。(最後のfoooは、test1.test_tableにinsertしたもの)
まとめ
MySQLとMariaDBは内部的なファイルの持ち方も同じで、差が無いように見える。
が、engineがInnoDBだからじゃないのか?とか、MariaDBのdockerのイメージがマイグレーション的なことをしているんじゃないのか?とか、これだけではわからないことが沢山有る。
なので、同じとは断言できないかなぁと思うものの、少なくともdockerのMySQLのイメージからMariaDBのイメージへの乗り換えはんたんに出来ると思われる。