メモが残っていたので取りあえず上げておきます
slaveの昇格とextrabackupを用いたリストア作業
よく見たら実運用だともっと厳密にやらなきゃいけない作業は結構ありますね
slaveのmaster昇格
想定
現在の構成(master:1,slave:1)で、masterサーバで何らかのトラブルでmysqlが停止している場合が前提
対応
slaveサーバをmasterへ昇格させる
手順
- masterでの更新が全てslaveへ反映されているか確認
> show processlist;
'Slave has read all relay log; waiting for the slave I/O thread to update it' 上記があればOK
- slaveの停止
stop slave;
- lead_onlyのチェック 昇格させるslaveが読み込み専用になっていないか確認
> select @@read_only;
* 0:無効(更新可)
* 1:有効(更新不可)
変更する場合
> set global read_only = 0;
- リクエスト先の変更
アプリケーションサーバの設定を変更する
master: 001 slave: 002 ↓ master: 002 slave: 002
- slaveのリセット
stop slave; reset slave all; reset master;
* reset slave all;
レプリケーション周りの設定を削除する
master.info,relay-log.infoファイルが削除される
リレーログファイルの初期化
* reset master
バイナリログインデックスをゼロにリセットし、新たにバイナリログを作成する
スレーブがいる場合は打つと事故る
- 旧slaveが更新されている事を確認
> show processlist;
バックアップファイルからのリストア
perconaのextrabackupを用いてバックアップを取る
想定
バックアップファイルを用いて新masterサーバの構築を行う
手順
MySQLのインストール
依存モジュールのインストール yum -y install perl-DBD-MySQL yum -y install perl-Time-HiRes
innobackupexのインストール
wget http://www.percona.com/redir/downloads/XtraBackup/XtraBackup-2.1.7/RPM/rhel6/x86_64/percona-xtrabackup-2.1.7-721.rhel6.x86_64.rpm rpm -ivh percona-xtrabackup-2.1.7-721.rhel6.x86_64.rpm
- 鍵の登録
$ su - # su - mysql $ ssh-keygen -b 2048
backupサーバ(192.168.1.14)
$ su - # su - mysql $ nc -l 10129 >> .ssh/authorized_keys
innobackup動かすサーバ(192.168.1.13)
$ su - # su - mysql $ cat .ssh/id_rsa.pub | nc 192.168.1.14 10129
- バックアップスクリプト
#!/bin/bash REMOTEHOST=192.168.1.14 SCPOPT="-p -q -c arcfour" BACKUP_FILE_NAME=`date "+%Y%m%d"` run_innobackupex () { /usr/bin/innobackupex \ --user=root \ --defaults-file=/var/lib/mysql/my.cnf \ --slave-info \ --tmpdir=/data/tmp \ --stream=tar \ /data/tmp/backup | ssh $REMOTEHOST \ "cat - > /data/backup/${BACKUP_FILE_NAME}.tar" } echo ==================== $(date +"%Y-%m-%dT%T") ==================== run_innobackupex echo ==================== $(date +"%Y-%m-%dT%T") ====================
- リストア
cd $BACKUPDIR #展開 tar ixvf 20140131.tar #トランザクションログを適用 /usr/bin/innobackupex --apply-log $BACKUPDIR #mysql停止 /etc/init.d/mysql stop #旧データファイルを移動 mv /var/lib/mysql /var/lib/mysql.bak #my.cnfを移動 mv /var//lib/mysql.bak/my.cnf /etc/my.cnf cd .. mkdir /var/lib/mysql cd /var/lib/mysql #データをdatadirに移す /usr/bin/innobackupex --copy-back /data/backup/ #権限を変更 chown -R mysql:mysql /var/lib/mysql #起動 /etc/init.d/mysql start