はじめに
上記ページの「Supported operating systems」の項目の通り、Percona XtraBackupは Windows をサポートしていません。Percona XtraBackupはMySQLがインストールされたサーバ上にインストールする必要があるため、Windows版のMySQLを利用している場合は、XtraBackupを利用できません。
そんな中、「Windows版のXtraBackupをリリースしてほしい!」という多くの声に応えてか、Percona Database Performance Blogで、Dockerを活用してWindows環境で Percona XtraBackup を利用する方法が紹介されていました。
Running Percona XtraBackup on Windows … in Docker
本記事では、この裏技について実際に検証を行ってみたいと思います。
検証環境
検証環境は、Dockerを用いて用意します。
What to know before you install
The current version of Docker for Windows runs on 64bit Windows 10 Pro, Enterprise and Education (1607 Anniversary Update, Build 14393 or later). In the future we will support more versions of Windows 10.
上記の通り Docker for Windows の利用には、Windows10 Pro 環境が必要です。幸い、手元のPCが同OSを使っているため、今回はこちらで検証を進めます。
※上記環境が手元にない場合は、VMwareに Windows Server 2016 の無料評価版を利用する方法もあります
また、MySQLは5.7系の最新版である MySQL 5.7.22 を使用します(2018/05/11時点)。
検証手順
1. MySQLのインストール
上記サイトの “Recommended Download” から「mysql-installer-community-5.7.22.1.msi」をダウンロードし、インストーラを実行します。
※ 右の「Looking for the latest GA version?」のリンクから5.7のページに飛べます
インストーラが起動したら、画面の指示に従ってMySQL Serverをインストールして下さい。インストール対象は MySQL Server のみで構いません。
2. Dcokerのインストール / ファイル共有の設定
手元の Windows 10 マシンに、Docker on Windows をインストールします。
また、XtraBackupで取得したバックアップデータを保存するため、Dockerの設定でC:ドライブの共有を有効にする必要があります。手順は以下の通りです。
1. タスクバーのDockerアイコンを右クリック
2. 「Setting」を選択し、「Shared Drives」のメニューに進む
3. C:ドライブにチェックを入れ、「Apply」を選択
4. 設定が終わったら Docker アイコンを右クリックし、「Restart」を実行
3. XtraBackup用のDockerイメージを取得
XtraBackup用のDockerイメージを取得します。イメージのパスは「perconalab/percona-xtrabackup」です。
1 2 3 4 5 6 7 |
cmd> docker pull perconalab/percona-xtrabackup ... Status: Downloaded newer image for perconalab/percona-xtrabackup:latest cmd> > docker images REPOSITORY TAG IMAGE ID CREATED SIZE perconalab/percona-xtrabackup latest cc530c47fc24 10 days ago 241MB |
4. Backup用ユーザの作成
MySQLにログインして、XtraBackupが使用するユーザを作成します。
1 2 |
cmd> cd C:/Program Files/MySQL/MySQL Server 5.7/bin cmd> mysql.exe -u root -p |
[mysql]
mysql> CREATE USER ‘xtrabackup’@’%’ IDENTIFIED by ‘xtrapassword’;
mysql> GRANT RELOAD,PROCESS,LOCK TABLES,REPLICATION CLIENT ON . TO ‘xtrabackup’@’%’;
[/mysql]
※ ユーザのホストは、MySQLが稼働しているPCのIPアドレスを直接指定しても問題ありません
ついでに、簡単なテストデータも作成します。
[mysql]
mysql> CREATE DATABASE d1;
mysql> CREATE TABLE d1.t1 (id int auto_increment primary key, col1 text, col2 text);
mysql> INSERT INTO d1.t1(col1, col2) VALUES (‘a’, ‘A’), (‘b’, ‘B’), (‘c’, ‘C’);
[/mysql]
5. XtraBackupの実行
XtraBackupのコンテナを以下のコマンドで起動することでバックアップが取得できます。–hostオプションで指定するIPアドレスはMySQLが稼働しているサーバ(PC)のIPアドレスです。
やっていることとしては、Windows上のフォルダとDockerコンテナ内のディレクトリを -v オプションで繋げることで、コンテナ上で起動するXtraBackupにデータを引き渡しているようです。
1 2 3 4 5 6 7 8 |
cmd> mkdir C/mysqlbackup cmd> docker run --rm -it -v //C/mysqldata:/var/lib/mysql -v //C/mysqlbackup:/xtrabackup_backupfiles perconalab/percona-xtrabackup --backup --host=172.16.56.103 --user=xtrabackup --password=xtrapassword --innodb-undo-directory=/var/lib/mysql ... 180514 05:05:05 [00] Writing /xtrabackup_backupfiles/xtrabackup_info 180514 05:05:05 [00] ...done xtrabackup: Transaction log of lsn (2596677) to (2596686) was copied. 180514 05:05:05 completed OK! |
※ –innodb-undo-directoryオプションを指定しないと”signal 6″エラーでバックアップが失敗しました
なお、MySQLをインストールした場合のデフォルトのデータディレクトリは「datadir = C:/ProgramData/MySQL/MySQL Server 5.7/Data」になりますが、このようにパスに半角スペースが入ってしまうと上記のdockerコマンドで「docker: invalid reference format: repository name must be lowercase.」が発生してしまいます。
そのため、データディレクトリは「C:/mysqldata/」のように半角スペースは入らないパス(フォルダ)を指定する必要があります。
■ データディレクトリの変更手順
1. my.ini を以下のように編集
1 2 3 |
datadir=C:/ProgramData/MySQL/MySQL Server 5.7/Data ↓ datadir=C:/mysqldata |
2. MySQLを停止(管理者コマンドプロンプトが必要です)
1 |
cmd> net stop mysql57 |
3. 新しいデータディレクトリを作成し、既存のフォルダからファイルを全てコピー
1 2 |
cmd> mkdir C:\mysqldata cmd> xcopy /s /e "C:/ProgramData/MySQL/MySQL Server 5.7/Data" "C:/mysqldata" |
4. MySQLを起動(管理者コマンドプロンプトが必要です)
1 |
cmd> net start mysql57 |
6. XtraBackupのリストア
バックアップのリストアもXtraBackupを使用することができます。
まず、MySQLを停止します。その後、既存のデータディレクトリを空にします。
1 2 |
cmd> net stop mysql57 cmd> del C:\mysqldata\* |
–copy-backオプションでバックアップをリストアします。
1 |
cmd> docker run --rm -it -v //C/mysqldata:/var/lib/mysql -v //C/mysqlbackup:/xtrabackup_backupfiles perconalab/percona-xtrabackup --copy-back |
コピーが完了したら、MySQLを起動して完了です。
1 |
cmd> net start mysql57 |
おまけ
余談となりますが、MariaDB社が「MariaDB Backup」というXtraBackupによく似たソフトウェアを提供しています。こちらはWindows向けのパッケージも提供されていますので、選択肢の一つとして考えても良いかもしれません。