MySQLについて少し詳しくなると、レプリケーションという言葉をたまに見かけるようになるはずです。ただ、レプリケーションの概念は理解するのが少し難しく、説明書きを見て諦めてしまったという方もいるかもしれません。
そこで本コラムでは、MySQLのレプリケーションについて、できるだけ丁寧かつ分かりやすく解説をしていきます。
- MySQL レプリケーションの概要
- MySQL レプリケーションメリット・デメリット
MySQL レプリケーションについて
こちらの見出しでは「MySQL レプリケーションがまだ理解できていない」という方に向けて、MySQL レプリケーションとはいったい何かということについて、できるだけ丁寧かつ簡単に解説をおこなっていきます。まずはこちらの見出しをじっくりと読み、MySQL レプリケーションがどのような意味を指しているのかについて理解していきましょう。
MySQL レプリケーションの意味
MySQL レプリケーションとは、すでに存在しているデータを他のデータベースサーバに複製しておくことです。データベースのミラーリングという言葉で表せられることもあります。データをバックアップする必要がある際にMySQL レプリケーションをおこなうことが多いです。
MySQL レプリケーションをおこなう流れ
では、どのようにしてMySQL レプリケーションをおこなうのかについて確認していきましょう。
メインデータベースサーバとスレーブの関係性
前提として、普段から使用しているメインのデータベースサーバがあるはずです。この中には複数のテーブルとデータが保存されています。
MySQL レプリケーションをおこなうためには、まずメインのデータベースサーバに対して、サブのデータベースサーバを用意します。このサブデータベースサーバのことをスレーブ(Slave)と呼びます。
このスレーブですが、メインのデータベースサーバに対して1つまたは複数のスレーブを作成することができます。しかし、逆にスレーブが複数のデータベースサーバに属することはできません。メインのデータベースサーバとスレーブは常に「1対1」もしくは「1対多数」の関係性で成り立っているということを覚えておいてください。
スレーブへのレプリケーション
メインのデータベースサーバからスレーブへのレプリケーションをおこなうためには、まずスレーブからメインデータベースサーバへのレプリケーションスタートを要求する必要があります。そして、メインデータベースサーバはその要求を受け取ります。
要求が正常に通過すれば、メインデータベースサーバは要求を出したスレーブに対してデータのレプリケーションをおこなっていきます。すると今度はレプリケーションがおこなわれたスレーブがデータを受け取ります。スレーブが正常にメインデータベースサーバからのデータを受け取ることができたら、スレーブ、つまりサブデータベースサーバの内容が更新されることとなります。
もちろん他のデータベース管理システムにもレプリケーションの機能はあります。ただ、MySQLの場合にはレプリケーション次のメインデータベースからサブデータベースへのデータ送信が非同期、つまりリアルタイムでメインデータベースサーバの変更をスレーブに送信しなくても良い設定になっているため、2つのデータベースサーバが常に接続される必要がないのです。
MySQL レプリケーションのメリット・デメリット
さて、ここまでMySQL レプリケーションの概要と仕組みについて簡単にご説明をしてきました。まとめると「メインデータサーバのデータを他のデータサーバに複製すること」がMySQL レプリケーションの持つ機能です。
一見すると便利なMySQL レプリケーションですが、メリットとデメリットを押さえておかなければ有効活用することができません。こちらではMySQL レプリケーションのメリット・デメリットをそれぞれ確認し、MySQL レプリケーションをより効果的に扱えるようになりましょう。
MySQL レプリケーションのメリット
まずはMySQL レプリケーションのメリットについて確認していきましょう。メリットは以下の3点です。
- サーバにエラーが発生した際に置換対応できる
- サーバを動かしながらオフラインバックアップができる
それぞれのメリットについて詳しく見ていきましょう。
サーバにエラーが発生した際に置換対応できる
1つ目のメリットはサーバエラー発生の際、スレーブで置換対応できるということです。MySQLに限らずサーバを使用している際に障害が発生し、メインデータサーバが使用できなくなるという場合があります。そんなときに、レプリケーションをおこなっておいたスレーブを一時的に代替で使用することができるのです。
こまめにレプリケーションをおこなっておき、スレーブにメインデータベースサーバの内容を反映させておけば、障害に強い環境を構築することができるでしょう。
ちなみに、システムを継続的に稼働させられるPCの能力のことを可用性と呼びます。たとえば「MySQLでレプリケーションをおこない、システムの可用性を高める」といったような使い方をします。レプリケーションに限らず、データベースサーバを扱う際に、可用性という言葉を度々見かけるようになるので、覚えておきましょう。
サーバを動かしながらオフラインバックアップを取得できる
2つ目のメリットはメインデータベースサーバを稼働させながら、スレーブからオフラインバックアップを取得することができるということです。メインデータベースサーバに対するスレーブを用意していないと、バックアップを取る際にいちいちデータベースの稼働をストップしなければなりません。
一方でスレーブを用意しメインデータベースサーバからスレーブにデータを反映させておけば、スレーブからオフラインバックアップを取ることができるのです。度々メインデータベースの稼働を止めることでパフォーマンスが下がる恐れがあります。そのため、レプリケーションでスレーブにデータを転送させておくと良いでしょう。
「オフラインバックアップ」という言葉が登場しましたが、はじめて聞く人もいるかもしれませんね。これはデータベースバックアップの1つであり、他にもコールドバックアップ や一貫性バックアップと呼ばれることもあります。
オフラインバックアップの特徴はもちろんデータベースを停止した状態でバックアップを取るということ。メリットはバックアップ中に内容が変更されないということです。
MySQL レプリケーションのデメリット
次はMySQL レプリケーションのデメリットについて確認していきましょう。デメリットは以下の点です。
- データ容量が増える
それでは、上記のデメリットについて詳しく見ていきましょう。
データ容量が増える
MySQL レプリケーションのデメリットとして、スレーブの数だけ容量が増えるという問題を挙げることができます。レプリケーションをおこなうと、メインデータベースをそのまま複製することになるからです。
つまりスレーブを1つ作れば、その分だけメインデータベースの容量が増えると考えて間違いありません。もしスレーブが複数あればその数だけ容量に負担をかけることになります。
メインデータベースをそのまま複製できるレプリケーションは便利ですが、裏を返すと容量的な負担が増えるということにもなります。また、それに関連してメインデータベースの問題点も同時に複製してしまうということになります。MySQLのレプリケーションをおこなう際にはこういった点を理解して扱うようにしましょう。
まとめ
本コラムでは、MySQLのレプリケーションについて、できるだけ丁寧かつ分かりやすく解説をしていきました。MySQLのレプリケーションはいろいろなメリットがあり便利である反面、容量的な問題が発生する可能性があるということも注意しておきましょう。
【関連記事】
▶︎MySQLでIN句を活用しよう!指定したカラムとリストを比較する!
▶︎【MySQL】GROUP BY句(グループ化)とGROUP BYを使った計算について徹底解説!
おそらくはじめて触れるキーワードとして「スレーブ(Slave)」という英単語が出てきました。この英単語を使うものとして、たとえば「Slave ant(働きアリ)」といったものがあります。つまりこの「Slave」という言葉には「働きもの」という意味、そしてそれに転じて「奴隷」や「隷属する」といった意味があるのです。つまりスレーブは、メインデータベースサーバに隷属するデータベースサーバという意味を持ちます。