Recovery Manager for MySQLを使う
Recovery Manager for MySQLの使い方をメモしておきます。
今回の環境は以下の通りです。
インストールする
まずはRPMファイルをダウンロードします。
# wget http://www.zmanda.com/downloads/community/ZRM-MySQL/3.0/RPM/MySQL-zrm-3.0-1.noarch.rpm # wget http://www.zmanda.com/downloads/community/ZRM-MySQL/3.0/RPM/MySQL-zrm-client-3.0-1.noarch.rpm
その後、RPMパッケージをインストールします。
# yum install MySQL-zrm-3.0-1.noarch.rpm # yum install MySQL-zrm-client-3.0-1.noarch.rpm
また、バックアップ処理用のユーザを予め作成しておきます。
mysql> GRANT SELECT, INSERT, UPDATE, CREATE, DROP, RELOAD, SHUTDOWN, ALTER, SUPER, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backup'@'localhost' IDENTIFIED BY 'YOUR PASS';
設定ファイルを用意します。以下のようにしました。
「/etc/mysql-zrm/mybackup/mysq-zrm.conf」として保存します。
ロジカルバックアップで全てのデータベースを取得する設定です。
# vi /etc/mysql-zrm/mybackup/mysql-zrm.conf backup-mode=logical destination=/var/lib/mysql-zrm retention-policy=2W all-databases=1 user="backup" password="YOUR PASS" port=3306 socket=/var/lib/mysql/mysql.sock mysql-binlog-path="/var/lib/mysql" tmpdir=/tmp verbose=1
コンフィグをチェックします。
# mysql-zrm-check --backup-set mybackup check:INFO: ZRM for MySQL - version built from source mybackup:check:INFO: The quick backup-type is supported only for snapshot backups. Setting backup-type to 'regular' mybackup:check:INFO: ZRM Temporary configuration file = /etc/mysql-zrm/mybackup/tmpqV6cJ.conf mybackup:check:INFO: { mybackup:check:INFO: verbose=1 mybackup:check:INFO: retention-policy=2W mybackup:check:INFO: backup-level=0 mybackup:check:INFO: tmpdir=/tmp mybackup:check:INFO: all-databases=1 mybackup:check:INFO: destination=/var/lib/mysql-zrm mybackup:check:INFO: port=3306 mybackup:check:INFO: socket=/var/lib/mysql/mysql.sock mybackup:check:INFO: mail-policy=always mybackup:check:INFO: backup-mode=logical mybackup:check:INFO: password=****** mybackup:check:INFO: backup-type=regular mybackup:check:INFO: user=backup mybackup:check:INFO: mysql-binlog-path=/var/lib/mysql mybackup:check:INFO: } mybackup:check:INFO: Getting mysql variables mybackup:check:INFO: mysqladmin --user="backup" --password="*****" --port="3306" --socket="/var/lib/mysql/mysql.sock" variables mybackup:check:INFO: datadir is /var/lib/mysql/ mybackup:check:INFO: mysql_version is 5.1.71-log mybackup:check:INFO: InnoDB data file are /var/lib/mysql/ibdata1 mybackup:check:INFO: InnoDB log dir is /var/lib/mysql/. mybackup:check:INFO: Configuration check successful
問題ないようです。
バックアップしてみる
テスト用に、データベースとテーブルを作ります。
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mybackup | | mysql | | test | +--------------------+ 4 rows in set (0.00 sec) mysql> SELECT id, name FROM sample; +------+--------+ | id | name | +------+--------+ | 1 | test | | 2 | sample | +------+--------+ 2 rows in set (0.01 sec)
手動でフルバックアップを取得してみます。
# mysql-zrm-scheduler --now --backup-level 0 --backup-set mybackup schedule:INFO: ZRM for MySQL - version built from source Logging to /var/log/mysql-zrm/mysql-zrm-scheduler.log backup:INFO: ZRM for MySQL - version built from source mybackup:backup:INFO: START OF BACKUP mybackup:backup:INFO: PHASE START: Initialization mybackup:backup:INFO: The quick backup-type is supported only for snapshot backups. Setting backup-type to 'regular' mybackup:backup:INFO: ZRM Temporary configuration file = /etc/mysql-zrm/mybackup/tmpyuZ3W.conf mybackup:backup:INFO: { mybackup:backup:INFO: quiet=0 mybackup:backup:INFO: verbose=1 mybackup:backup:INFO: retention-policy=2W mybackup:backup:INFO: backup-level=0 mybackup:backup:INFO: tmpdir=/tmp mybackup:backup:INFO: extra-mysqldump-options=--skip-events --ignore-table=mysql.event mybackup:backup:INFO: all-databases=1 mybackup:backup:INFO: destination=/var/lib/mysql-zrm mybackup:backup:INFO: port=3306 mybackup:backup:INFO: socket=/var/lib/mysql/mysql.sock mybackup:backup:INFO: logical-parallel=0 mybackup:backup:INFO: mail-policy=always mybackup:backup:INFO: backup-mode=logical mybackup:backup:INFO: password=****** mybackup:backup:INFO: backup-type=regular mybackup:backup:INFO: user=backup mybackup:backup:INFO: mysql-binlog-path=/var/lib/mysql mybackup:backup:INFO: } mybackup:backup:INFO: Getting mysql variables mybackup:backup:INFO: mysqladmin --user="backup" --password="*****" --port="3306" --socket="/var/lib/mysql/mysql.sock" variables mybackup:backup:INFO: datadir is /var/lib/mysql/ mybackup:backup:INFO: mysql_version is 5.1.71-log mybackup:backup:INFO: InnoDB data file are /var/lib/mysql/ibdata1 mybackup:backup:INFO: InnoDB log dir is /var/lib/mysql/. mybackup:backup:INFO: backup set being used is mybackup mybackup:backup:INFO: backup-set=mybackup mybackup:backup:INFO: backup-date=20140113210514 mybackup:backup:INFO: mysql-server-os=Linux/Unix mybackup:backup:INFO: backup-type=regular mybackup:backup:INFO: host=localhost mybackup:backup:INFO: backup-date-epoch=1389614714 mybackup:backup:INFO: retention-policy=2W mybackup:backup:INFO: mysql-zrm-version=ZRM for MySQL - version built from source mybackup:backup:INFO: mysql-version=5.1.71-log mybackup:backup:INFO: backup-directory=/var/lib/mysql-zrm/mybackup/20140113210514 mybackup:backup:INFO: backup-level=0 mybackup:backup:INFO: backup-mode=logical mybackup:backup:INFO: PHASE END: Initialization mybackup:backup:INFO: PHASE START: Running pre backup plugin mybackup:backup:INFO: Executing pre-backup-plugin mybackup:backup:INFO: PHASE END: Running pre backup plugin mybackup:backup:INFO: PHASE START: Flushing logs mybackup:backup:INFO: Flushing the logs mybackup:backup:INFO: mysqladmin --user="backup" --password="*****" --port="3306" --socket="/var/lib/mysql/mysql.sock" flush-logs mybackup:backup:INFO: Getting master logname using command mysql --user="backup" --password="*****" --port="3306" --socket="/var/lib/mysql/mysql.sock" -e "show master status" mybackup:backup:INFO: PHASE END: Flushing logs mybackup:backup:INFO: PHASE START: Creating logical backup mybackup:backup:INFO: Getting list of Databases mybackup:backup:INFO: mysql --user="backup" --password="*****" --port="3306" --socket="/var/lib/mysql/mysql.sock" -e "show databases;" mybackup:backup:INFO: backup of the following databases will be done mybackup mysql test mybackup:backup:INFO: Command used for logical backup is mysqldump --opt --extended-insert --create-options --default-character-set=utf8 --single-transaction --skip-events --ignore-table=mysql.event --user="backup" --password="*****" --port="3306" --socket="/var/lib/mysql/mysql.sock"bash -c 'mysqldump --opt --extended-insert --create-options --default-character-set=utf8 --single-transaction --skip-events --ignore-table=mysql.event --user="backup" --password="eco_bk_11" --port="3306" --socket="/var/lib/mysql/mysql.sock" --all-databases > "/var/lib/mysql-zrm/mybackup/20140113210514/backup.sql" 2>>/tmp/xU4GoBSyLL;echo ${PIPESTATUS[@]} > /tmp/tnxz9xM3eO 2>>/tmp/xU4GoBSyLL' mybackup:backup:INFO: Output of command: 'mysqldump output for command : bash -c 'mysqldump --opt --extended-insert --create-options --default-character-set=utf8 --single-transaction --skip-events --ignore-table=mysql.event --user="backup" --password="*****" --port="3306" --socket="/var/lib/mysql/mysql.sock" --all-databases > "/var/lib/mysql-zrm/mybackup/20140113210514/backup.sql" 2>>/tmp/xU4GoBSyLL;echo ${PIPESTATUS[@]} > /tmp/tnxz9xM3eO 2>>/tmp/xU4GoBSyLL'' is { 0 } mybackup:backup:INFO: Logical backup done for the following database(s) mybackup mysql test mybackup:backup:INFO: logical-databases=mybackup mysql test logical-parallel=0 mybackup:backup:INFO: PHASE END: Creating logical backup mybackup:backup:INFO: PHASE START: Calculating backup size & checksums mybackup:backup:INFO: next-binlog=mysql-bin.000009 mybackup:backup:INFO: backup-size=0.50 MB mybackup:backup:INFO: PHASE END: Calculating backup size & checksums mybackup:backup:INFO: read-locks-time=00:00:00 mybackup:backup:INFO: flush-logs-time=00:00:00 mybackup:backup:INFO: backup-time=00:00:00 mybackup:backup:INFO: backup-status=Backup succeeded mybackup:backup:INFO: Backup succeeded mybackup:backup:INFO: PHASE START: Running post backup plugin mybackup:backup:INFO: Executing post-backup-plugin mybackup:backup:INFO: PHASE END: Running post backup plugin mybackup:backup:INFO: PHASE START: Cleanup mybackup:backup:INFO: PHASE END: Cleanup mybackup:backup:INFO: END OF BACKUP /usr/bin/mysql-zrm started successfully
バックアップ取得に成功したようです。
# LANG=C mysql-zrm-reporter --show backup-status-info --where backup-set=mybackup reporter:INFO: Reporter configuration file not found, assigning default values REPORT TYPE : backup-status-info backup_set backup_date backup_level backup_status backup_type comment --------------------------------------------------------------------------------------------- mybackup Mon Jan 13 0 Backup regular ---- 21:21:49 2014 succeeded
バックアップデータの検証も大丈夫なようです。
# mysql-zrm-verify-backup --backup-set mybackup --source-directory /var/lib/mysql-zrm/mybackup/20140113210 847/ verify-backup:INFO: ZRM for MySQL - version built from source mybackup:verify-backup:INFO: Verification successful
リストアしてみる
まずは先ほど作成したデータベースを消します。
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mybackup | | mysql | | test | +--------------------+ 4 rows in set (0.00 sec) mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mybackup | | mysql | | test | +--------------------+ 4 rows in set (0.00 sec) mysql> DROP DATABASE mybackup; Query OK, 1 row affected (0.02 sec) mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | +--------------------+ 3 rows in set (0.00 sec)
リストア対象とするバックアップデータを確認します。
# LANG=C mysql-zrm-reporter --show restore-info --where backup-set=mybackup reporter:INFO: Reporter configuration file not found, assigning default values REPORT TYPE : restore-info backup_set backup_date backup_level backup_directory backup_status comment ------------------------------------------------------------------------------------------------------ mybackup Mon Jan 13 0 /var/lib/mysql-zrm/myback Backup ---- 21:21:49 2014 up/20140113212149 succeeded
リストアします。
# mysql-zrm-restore --backup-set mybacukp --source-directory /var/lib/mysql-zrm/mybackup/20140113212149/ restore:INFO: ZRM for MySQL - version built from source mybacukp:restore:INFO: The quick backup-type is supported only for snapshot backups. Setting backup-type to 'regular' mybacukp:restore:INFO: ZRM Temporary configuration file = /etc/mysql-zrm/mybacukp/tmpjTCuK.conf mybacukp:restore:INFO: { mybacukp:restore:INFO: verbose=1 mybacukp:restore:INFO: retention-policy=2W mybacukp:restore:INFO: backup-level=0 mybacukp:restore:INFO: tmpdir=/tmp mybacukp:restore:INFO: extra-mysqldump-options=--skip-events --ignore-table=mysql.event mybacukp:restore:INFO: all-databases=1 mybacukp:restore:INFO: destination=/var/lib/mysql-zrm mybacukp:restore:INFO: source-directory=/var/lib/mysql-zrm/mybackup/20140113212149/ mybacukp:restore:INFO: port=3306 mybacukp:restore:INFO: socket=/var/lib/mysql/mysql.sock mybacukp:restore:INFO: mail-policy=always mybacukp:restore:INFO: backup-mode=logical mybacukp:restore:INFO: password=****** mybacukp:restore:INFO: backup-type=regular mybacukp:restore:INFO: user=backup mybacukp:restore:INFO: mysql-binlog-path=/var/lib/mysql mybacukp:restore:INFO: } mybacukp:restore:INFO: Getting mysql variables mybacukp:restore:INFO: mysqladmin --user="backup" --password="*****" --port="3306" --socket="/var/lib/mysql/mysql.sock" variables mybacukp:restore:INFO: datadir is /var/lib/mysql/ mybacukp:restore:INFO: mysql_version is 5.1.71-log mybacukp:restore:INFO: InnoDB data file are /var/lib/mysql/ibdata1 mybacukp:restore:INFO: InnoDB log dir is /var/lib/mysql/. mybacukp:restore:INFO: Executing pre-restore-plugin mybacukp:restore:INFO: restoring using command mysql --user="backup" --password="*****" --port="3306" --socket="/var/lib/mysql/mysql.sock" -e "set character_set_client=utf8;set character_set_connection=utf8;set character_set_database=utf8;set character_set_results=utf8;set character_set_server=utf8;source /tmp/QvI6VPPj5y;" mybacukp:restore:INFO: Restored database(s) from logical backup: mybackup mysql test mybacukp:restore:INFO: Executing post-restore-plugin mybacukp:restore:INFO: Restore done in 1 seconds.
リストアできたようです。
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mybackup | | mysql | | test | +--------------------+ 4 rows in set (0.00 sec) mysql> use mybackup; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> SELECT id, name FROM sample; +------+--------+ | id | name | +------+--------+ | 1 | test | | 2 | sample | +------+--------+ 2 rows in set (0.00 sec)
おまけ
デフォルトでは「--single-transaction」オプションが付与されますので、ストレージエンジンにMyISAMを含む場合は、
以下のオプションをコンフィグに指定しておくとよさそうです。
single-transaction=never
今日はこんなところで。