# www.iz-gnote.com → dbjt01.iz-gnote.com DB移行
## 本番環境から20190625のバックアップを取得する
作業日時:2019年7月9日 21:00 〜 24:00
予定作業時間:3時間
実績作業時間:
## 事前準備
- [x] 本番環境のバックアップスクリプト修正
- [x] ダンプファイルにバイナリログ、チェックポイントが記録されていることを確認
- [x] 復元後DBの確からしさの確認方法について
- [x] 検証用DB作成
### 移行DBを照合する準備
- [ ] 確認
「www.iz-gnote.com」 と 「dbjt01.iz-gnote.com」で確認用DBを作成する。
```sql
CREATE DATABASE intra_newshaken_121886_check_result DEFAULT CHARACTER SET utf8;
CREATE TABLE check_result (
`id` int(10) unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
`db_name` varchar(64) NOT NULL,
`table_name` varchar(64) NOT NULL,
`count` int(10) unsigned NOT NULL
);
```
## DBに不足テーブルを追加
:::danger
dbjt01で作業
```
ssh ytakahashi@dbjt01.iz-gnote.com -p 1022
```
:::
### インターゾーンDB 速太郎DB に不足テーブルを追加
【テーブル作成 nskn_dic_receive_data】
```
#作業ディレクトリ
$cd /home/ytakahashi/ignoretable_create
```
```
$cat nskn_dic_receive_data.sql
```
```sql
CREATE TABLE IF NOT EXISTS `nskn_dic_receive_data` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`received_data` mediumtext COLLATE utf8_unicode_ci NOT NULL,
`created` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='DIC連携受信データ・ロギング用テーブル' AUTO_INCREMENT=441 ;
```
```
#SQL流し込み
## iz
$mysql -u root -pfindstar intra_newshaken_121886 < nskn_dic_receive_data.sql
##速太郎
$mysql -u root -pfindstar intra_newshaken_121886_hayanote < nskn_dic_receive_data.sql
```
【テーブル作成 nskn_sss_receive_log】
```
$cat nskn_sss_receive_log.sql
```
```sql
CREATE TABLE IF NOT EXISTS `nskn_sss_receive_log` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`received_data` mediumtext COLLATE utf8_unicode_ci NOT NULL,
`received_log` mediumtext COLLATE utf8_unicode_ci NOT NULL,
`created` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='SSS連携受信データ・ロギング用テーブル2' AUTO_INCREMENT=13719 ;
```
```
#SQL流し込み
## iz
$mysql -u root -pfindstar intra_newshaken_121886 < nskn_sss_receive_log.sql
##速太郎
$mysql -u root -pfindstar intra_newshaken_121886_hayanote < nskn_sss_receive_log.sql
```
【テーブル作成 nskn_sss_receive_data】
```
#sqlファイル作成
$cat nskn_sss_receive_data.sql
```
```sql
CREATE TABLE IF NOT EXISTS `nskn_sfns_receive_data` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`received_data` mediumtext COLLATE utf8_unicode_ci NOT NULL,
`created` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='NS連携受信データ・ロギング用テーブル' AUTO_INCREMENT=4098 ;
```
```
# SQL 流し込み
##iz
$mysql -u root -pfindstar intra_newshaken_121886 < nskn_sss_receive_data.sql
## 速太郎
$mysql -u root -pfindstar intra_newshaken_121886_hayanote < nskn_sss_receive_data.sql
```
## DB移行作業
:::danger
本番環境で作業
:::
ホスト www.iz-gnote.com
アカウント ytakahashi
【DB全件取得と復元用のバックアップ作成】
```
# ssh接続
$ssh ytakahashi@www.iz-gnote.com -P 1022
# ディレクトリの移動
$cd /home/ytakahashi
# apcheをメンテナンスページにする
※ 作業開始時刻から20分程度はメンテナンスページを表示させる
※ バックログの課題に、メンテナンスページ表示手順を記載(けんいちさん)
あとで手順をバックログから転記
# apache停止
$apachectl graceful-stop
```
## 本番環境のDBバックアップを取得する
```
オールデータベースを追加する
※月曜日に、バイナリログからの取込にかかる時間をみて、実施の判断をする
# バイナリログの切り替え
$mysql -u root -p
mysql> flash logs;
mysql> exit
#全データベース取得コマンド
$mysqldump -u root -pfindstar --flush-logs --master-data=2 --all-databases --events \
--ignore-table=intra_newshaken_121886.nskn_dic_receive_data \
--ignore-table=intra_newshaken_121886.nskn_sss_receive_log \
--ignore-table=intra_newshaken_121886.nskn_sfns_receive_data \
--ignore-table=intra_newshaken_121886_hayanote.nskn_dic_receive_data \
--ignore-table=intra_newshaken_121886_hayanote.nskn_sss_receive_log \
--ignore-table=intra_newshaken_121886_hayanote.nskn_sfns_receive_data \
--ignore-table=intra_newshaken_121886_bk.nskn_dic_receive_data_bk2019-04-12 \
--ignore-table=intra_newshaken_121886_bk.nskn_sss_receive_log_bk2018-04-01 \
--ignore-table=intra_newshaken_121886_bk.nskn_sss_receive_log_bk2018-06-14 \
--ignore-table=intra_newshaken_121886_bk.nskn_sss_receive_log_bk2018-10-28 \
--ignore-table=intra_newshaken_121886_bk.nskn_sss_receive_log_bk2019-01-27 > /home/ytakahashi/mysqldump-alldatabase-$(date +%Y%m%d) &
```
【www.iz-gnote.com のバックアップをdbjt01にコピー】
```
# 作業ディレクトリ
$cd /home/www.iz-gnote.com/backup/
```
```
# 全DBのダンプを本番環境にコピーする
※コピー対象の最終更新日を確認
scp ./www.iz-gnote.com-alldatabase.sql.tar.gz ytakahashi@dbjt01.iz-gnote.com:/home/ytakahashi/
```
### 復元ポイントの確認
```
#ダンプデータから復元ポイントの位置を知る
#バックアップ保存ディレクトリ
$sudo su -
$cd /home/www.iz-gnote.com/backup
$cp www.iz-gnote.com-alldatabase.sql.tar.gz /home/ytakahashi/
$cd /home/ytakahashi/
$tar -zxvf www.iz-gnote.com-alldatabase.sql.tar.gz
$less www.iz-gnote.com-alldatabase.sql
# less コマンドで「CHANGE MASTER TO MASTER_LOG_FILE」の位置を確認する
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.xxxxxx', MASTER_LOG_POS=xxxxx;
```
### MySQLバイナリログ確認
```
#取込データの選択
$cd /var/lib/mysql/
$ls ./mysql-bin* -alhr --full-time
#手順「復元ポイントの確認」で特定した、バイナリログをコピーする
$ mkdir -p /home/ytakahashi/gnote_binaly_log
$ cp ./mysql-bin.xxxxxx /home/ytakahashi/gnote_binaly_log/
```
### バイナリログをDBサーバーに転送する
```
#MySQLにログインし、バイナリファイルを確認する
mysql -u root -pfindstar
#バイナリログの一覧を取得
mysql> SHOW BINARY LOGS;
#現在ログ出力しているバイナリログを確認
##出力先のバイナリログファイル名をメモ =
mysql> SHOW MASTER STATUS;
※バイナリログが、dumpに記載されているファイルより、大きい番号であった場合、ファイルが分割されていることになるので、結合する必要がある。
#作業開始時のチェックポイント作成
mysql> flush logs;
# 検証データ取得スクリプト実行
$./check_gnote_data_2019-07-06.sh
※ t_dtime_fromは移行当日の日付に直す
#バイナリログが切り替わっていることを確認する
mysql> SHOW MASTER STATUS;
#本番環境に存在するバイナリログをdbjt01に転送する
$ scp -p 1022 -r /home/ytakahashi/gnote_binaly_log ytakahashi@133.242.226.157:/home/ytakahashi/
```
## ダンプ、バイナリログからの復旧手順
:::danger
### dbjt01.iz-gnote.comでの作業
```
$ssh ytakahashi@dbjt01.iz-gnote.com -p 1022
```
:::
【バイナリログを確認する】
```
$sudo su -
$cd /home/ytakahashi/gnote_binaly_log
#バイナリログの確認
$ mysqlbinlog ./mysql-bin.xxxxxx
mysqlbinlog: unknown variable 'default-character-set=utf8' < 文字コード未指定のエラー
エラーが発生した場合はこちら
$ mysqlbinlog --no-defaults ./mysql-bin.xxxxxx
```
※「--no-defaults」 my.cnf で指定されている文字コードの指定を解除する
【バイナリからSQLを生成する】
```
# 最新のバイナリログを確認する
$cd /home/ytakahashi/gnote_binaly_log
$ls ./mysql-bin* -alhr --full-time
#更新日が最新のバイナリファイルをSQL化する
$mysqlbinlog --no-defaults ./mysql-bin.xxxxx > /home/ytakahashi/$(date +%Y%m%d)-binary-convert.sql
#バイナリログが複数ある場合は、それぞれを結合する
## 1つ目
$mysqlbinlog --no-defaults ./①mysql-bin.xxxxx > /home/ytakahashi/$(date +%Y%m%d)-binary-convert.sql
## 2つ目
mysqlbinlog --no-defaults ./②mysql-bin.xxxxx >> /home/ytakahashi/$(date +%Y%m%d)-binary-convert.sql
```
【データの流し込み】
:::danger
バックグラウンド実行する
:::
```
# gNOTEバックアップデータを取り込む
$cd /home/ytakahashi/
$tar -zxvf www.iz-gnote.com-dbbackup_20190625.sql.tar.gz
$mysql -u root -pfindstar -e "source home/ytakahashi/www.iz-gnote.com-dbbackup_20190625.sql" &
# 速太郎バックアップデータを取り込む
$tar -zxvf intra_newshaken_121886_hayanote.sql.tar.gz
$mysql -u root -pfindstar -e "source /home/ytakahashi/www.iz-gnote.com-hayanote-dbbackup_20190625.sql"
# バイナリログを取り込む
$cd /home/ytakahashi/gnote_binaly_log
$mysql -u root -pfindstar -e "source 20190625--binary-convert.sql"
```
## アプリケーションからDB接続設定
:::danger
www.iz-gnote.com に存在するver1_boot のDBホストの値を変更する
:::
【dbhostの更新】
```sql
$ mysql -u root -pfindstar
-- mysqls作業 --
-- dbの確認
mysql SHOW databases;
-- boot db を選択する
USE ver1_boot;
-- クエリの確認
SELECT * FROM ver1_boot;
-- DBホストを更新する
UPDATE `clients`
SET dbhost = '133.242.226.157'
```
## 本番環境の接続確認
再起動
```
#apacheの起動
$apachectl -k start
#起動確認
$service httpd status
```
:::info
phpMyAdminでレコード数を確認する
gNOTEが利用できることを確認する
:::
## 動作確認
- 参照系
- [x] 顧客検索ができること
- 登録
- [x] 顧客登録が可能
- 更新系
- [x] 登録した顧客情報を更新することができる
バイナリログを確認してい、ログが記載されていることを確認する
## DBサーバーバックアップ取得 cron を設定する
## 進捗チェック、ロックテーブル、排他解除