MySQLには、データベースのダンプを取得するためのコマンドのmysqldumpが用意されており、また、MySQLの管理ツールには、ダンプを取得する機能が必ず付いています。今回は、MySQLにおけるダンプの重要性と、ダンプの取得方法についてご紹介します。
IT用語としてよく聞くダンプとは
普段めったに使わない言葉でも、エンジニアをやっているとIT用語としてよく聞くことがあります。そして、そのようなIT用語の一つがダンプではないでしょうか。なお、MySQLには、mysqldumpというクライアントコマンドがあるくらいですからダンプの意味を知らないと管理できません。そこでまずは、ダンプ(dump)について解説します。
英語のdumpの意味
コンピュータ用語のほとんどが英語が基になっていますが、ダンプの語源になったdumpも例外ではありません。なお、英語のdumpの意味は、大量に物を投げ捨てることです。ダンプカーをイメージしてもらうと解りやすいでしょう。
一方、IT用語のダンプは、メモリー上の情報をそのままファイルに書き出す処理のことをさします。かつては、C言語で書かれたプログラムやOSなどが誤動作する場合、その原因を解析するためにメモリー上の情報を全てそのまま取り出して解析していました。そして、そのような処理を、ダンプと言っていたのですが、同じように一括でファイルに書き出すことをダンプと表現するようになりました。
なお、データベース管理システムであるMySQLは、全てのデータをメモリー上に保存している訳ではありません。しかし、独自フォーマットのデータベースを、人が読める状態でファイルに書き出す処理をダンプと呼んでいます。
MySQLのバックアップに用いる
mysqldumpコマンドなどでMySQLのデータベースをダンプしたファイルは、主にバックアップとして使われます。なお、MySQLが管理しているデータベースは、専用のフォーマットでファイルとして保存されていますが、そのファイルを別のサーバーに移したとしても、正しく動作するとは限りません。そのため、単にコピーするだけでは不十分です。
その点、ダンプしたファイルはSQLで記述されており、別のサーバーでそのSQLを実行することで、データベースを復元できます。そのため、mysqldumpなどで作成されたダンプファイルが、バックアップ用として利用されています。
dumpしたファイルのサイズに注意
MySQLはWordPressなど、比較的小規模なサーバーで使われることが多いのが特徴ですが、中には大きな情報システムで使われていることもあります。そして、そういったデータベースを全てダンプすると、巨大なテキストファイルが作られます。
一般的にダンプファイルが巨大になると、書き出すだけでかなり時間がかかります。そのため、書き出している最中にデータが書き換えられると、作成されたダンプファイルを使っても正しく復旧できません。ダンプする際は、サービスを停止したりデータの不整合が発生しない仕組みなどが必要です。
このため、MySQLを管理しているOracle社では、大規模なデータベースにも対応した有償版のMySQLを提供しています。そして、有償版のMySQLに含まれるダンプ用プログラムは、不整合が発生しない仕組みを持っているので、必要な場合は有償版を検討してください。
MySQLでデータをダンプする方法
先ほど解説したように、MySQLで管理しているデータベースを、他のサーバーでも利用できるようにファイルとして取り出すことをダンプすると言います。なお、ダンプする方法としては、MySQLに付属しているコマンドを使うか、まやは管理ツールから実行するなど、一つではありません。MySQLを管理する立場であれば、状況に応じてそれらを使い分けましょう。次から、代表的なコマンドや管理ツールを使った、MySQLのダンプ方法について解説します。
mysqldumpコマンドを使う
mysqlのクライアント用プログラムをインストールすると、LinuxのターミナルやWindowsのコマンドプロンプトから実行するmysqlコマンドといっしょに、mysqldumpコマンドもインストールされます。このコマンドは、MySQLに付属しているダンプ用のコマンドです。
なお、mysqldumpは、ターミナルやコマンドプロンプトからも実行できますが、主に時刻指定で実行されるバッチファイルから実行されるコマンドです。例えばLinuxでは、次のようなバッチをファイルを時刻を指定して実行させる仕組みに登録します。
#!/bin/bash echo "mysqldump execute Start" mysqldump --single-transaction --user=user --password=password db1 > log if [ $? = 0 ]; then echo "Backup success" else echo "Error !!" fi
上記の例では、MySQLのサーバーが稼働しているサーバーで実行されるバッチファイルで、アカウントuserの権限で、db1というデータベースのバックアップを実行します。
phpMyAdminのエクスポート機能を使う
LinuxをベースにしたLAMPスタックに含まれるMySQLの管理でよく使われているのがphpMyAdminです。レンタルサーバーなどでも使えるケースが多く、また、グラフィックな環境で操作も簡単なことから、ベテランのエンジニアも利用しているソフトです。
WordPressなど、管理しているデータベースがそれほど大きくなく、また、MySQLのサーバーとなっているホストを変更する場合、MySQLの管理ツールとしてよく使われているphpMyAdminのエクスポート機能が利用できます。ただし、phpMyAdminを使った場合、巨大なデータベースをエクスポートすると、失敗するケースもあります。もし、データベースのサイズが大きい場合はmysqldumpを利用しましょう。
MySQL Workbenchのエクスポート機能を使う
MySQLは、従来のMySQLを管理していた運営会社を買収したOracle社が管理しているMySQLと、MySQLの最初のバージョンを開発した方が立ち上げたプロジェクトが管理しているMySQL互換ソフトのMariaDBとがあります。このうち、Oracle社のMySQLでは、グラフィックな管理ツールMySQL Workbenchが利用できます。
そして、MySQL Workbenchのエクスポートを利用でれば、MySQLで管理しているデータベースのダンプが可能です。使い方は、簡単で、メニューから「Data Export」を選択し、ダンプしたいデータベースを選択して、エクスポートしたいフォルダ名を指定したら、「Start Export」ボタンを押すだけです。
こんな時はどうするの?
MySQLを運用では、確実にバックアップすることが重要です。しかし、ダンプのためにサービスを止められなかったり、また時間がかかりすぎたりします。そういった場合に、どうすればいいでしょうか。MySQLの管理を任されたら、システムに合った方法を考えるのが、管理者の一つです。次から、MySQLのダンプに役立つヒントをご紹介します。
サービスを止められない場合
データベースのバックアップを取る際、もしバックアップ中にデータが書き換わってしまうと正しく復元できないデータが作られていまいます。そのため、サービスを停止してバックアップを取るのが正しい方法です。しかし、24時間稼働のWebシステムでは、サービスを停止できません。
バックアップ用に使われることの多いmysqldumpコマンドには、データの整合性を保つオプションが用意されています。先ほど紹介したmysqldumpを使ったバッチファイルの例でも使っている「–single-transaction」がそのオプションなので、必ず使用しましょう。
大きなデータベースを扱う場合
以前、個人向けのデータベースソフトと言われてきたMySQLは、巨大なデータベースを扱うのが苦手です。そのためバックアップを取るためのmysqldumpコマンドも、巨大なデータベースのバックアップには使えません。
しかし、Oracle社がサポートしている有償のMySQL Enterprise Editionなら、そういったデータも扱えます。そして、MySQL Enterprise Editionに付属しているMySQL Enterprise Backupを使えば、サービスを止めずに巨大なデータベースのバックアップも可能です。もし、ビジネス用途でMySQLを利用する場合は、有償版の利用も検討してください。
ダンプしたファイルが文字化けした場合
初心者がMySQLで失敗するポイントの一つが、日本語の文字コードの設定漏れに伴う文字化けです。これを知らずにmysqldumpでデータベースのダンプファイルを作ってしまうと、文字化けのせいでデータが読めなくなってしまいます。
なお、こういった文字化けは、mysqldumpを実行時に、引数で文字コードを設定すれば回避できます。そして、mysqldumpで文字コードを設定するオプションは、「–default-character-set」です。
mysqldumpで文字コードを設定する例 # mysqldump –default-character-set=utf8 -uユーザ名 -pパスワード DB名 > /出力先ディレクトリ/ファイル名
また、mysqlコマンドでリストアする場合も、このオプションを使用できます。
文字コードを指定してリストアする例 #mysql --default-character-set=binary -uユーザ名 -pパスワード DB名 < /出力先ディレクトリ/ファイル名
データベースのダンプはMySQL管理の基本
MySQLに限らず、データベースを管理するために必要なことは、何かあった場合に、最短で復旧するための準備です。そのためには、確実にリストアできるバックアップが取れていなければなりません。そして、MySQLにおけるバックアップとは、データベースのダンプです。
MySQLのデータベースを管理する立場になったら、ダンプを取得するためのmysqldumpコマンドや、GUIな管理ツールによるダンプを取る方法をマスターしましょう。
phpMyAdminは、PHPの制限でにより扱えるファイルサイズが2GBまでに制限されていたり、タイムアウト値により転送途中でも接続が着られることから、エクスポートが途中で切れることがあります。