notebook

都内でWEB系エンジニアやってます。

mysqlの運用の対応とかのメモ

メモが残っていたので取りあえず上げておきます

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