# 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 を設定する ## 進捗チェック、ロックテーブル、排他解除