DB/MySQL/レプリケーション
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
-MySQLのレプリケーションについて。試験的にVPSから自宅への...
#contents
*用語まとめ [#y6814bd8]
|GTID|Global Transaction IDの略。サーバーIDと合わせて世界...
|MHA|マスター自動昇格のためのツール。GTID導入以前はこのツ...
|I/Oスレッド|バイナリろぐの転送|
|SQLスレッド|SQLの差分実行。こちらがボトルネックになるこ...
|トポロジ|masterに対してslaveが複数や、slaveが他のslaveの...
|準同期レプリケーション|非同期が基本だが、IOスレッドまで...
|マルチソースレプリケーション|複数のmasterからのレプリケ...
|グループコミット|sync_binlog=1にしたときに複数のトランザ...
|MaxScale|Proxyとなって複数台のMySQLを更新はmasterへ、リ...
*GTIDを利用したレプリケーション [#pe936c16]
**注意点 [#ra5b84b5]
-create table ... selectなどが使えない。enforce_gtid_scon...
-master/slaveともbinlogの設定が必要。
-MySQL 5.6から実行可能で再起動必要。5.7からはオンラインで...
*設定 [#o64fbf93]
参考ページ
https://www.server-world.info/query?os=CentOS_7&p=mariadb...
http://qiita.com/suzutsuki0220/items/e5be03ea8f44ad2f6533
**遅延対策 [#gea39cca]
救われた面もあるのでなんともだが、遅延が酷いと1時間近く...
slave stop & start すると復帰するが、原因は突き止めたい。
***slaveの状態を確認 [#acb193a4]
-Seconds_Behind_Masterの値が0であればよい。
SHOW SLAVE STATUS¥G
中略
Seconds_Behind_Master: 1
***Seconds_Behind_Masterが0なのに、遅延が発生している場合...
-master側のbinログのポジションを確認
SHOW MASTER STATUS¥G
|master|slave|
|File: mysql-bin.000024|Master_Log_File: mysql-bin.000023|
|Position: 198937070|Read_Master_Log_Pos: 198837070|
ファイルに差分があれば、ネットワーク転送でボトルネックが...
**AWSのRDSの場合(専用のプロシージャーを利用する) [#g1fe5e...
http://takeshiyako.blogspot.jp/2014/12/mysqlamazon-rds.html
mysql> CALL mysql.rds_set_external_master('100.100.100.1...
mysql> CALL mysql.rds_start_replication;
すべてのデータベースをdumpするとmysqlデータベースインポー...
**マスターの設定 [#ke095c1f]
***ユーザーの追加(IPをスレーブのものに限定) [#bf336d22]
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.2/25...
上記の操作でユーザーの追加と権限付与が一度に行える!
***マスターのmy.cnf変更して再起動 [#l47d04ec]
[mysqld]
log-bin=mysql-bin
server-id=1
expire_logs_days=7
mysql-binでバイナリログを有効にして、server-idはかぶらな...
**スレーブの設定 [#kc2387a4]
[mysqld]
log-bin=mysql-bin
server-id=102
read_only=1
# 自身のホスト名を定義(show slave hostsのときに出てくる)
report-host=slavehost
**ダンプとリカバリー [#pfca2f5f]
mysqldumpにスレーブスタート情報が載っている。。
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000018', MAS...
あとはユーザーとホスト情報を追加
master_user='newrepl', master_password='hogehoge',master...
***マスター [#q4a95ea7]
MariaDB [(none)]> flush tables with read lock;
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> show master status;
+------------------+----------+--------------+----------...
| File | Position | Binlog_Do_DB | Binlog_Ig...
+------------------+----------+--------------+----------...
| mysql-bin.000001 | 22826177 | | ...
+------------------+----------+--------------+----------...
1 row in set (0.00 sec)
この番号は更新がなければ変わらないようだ。
-別ターミナルでdump
$ mysqldump -u root -p --all-databases --lock-all-tables...
-終わったらunlock
unlock tables;
-状態の確認
***スレーブ [#w8dfc974]
$ mysql -u root -p < /var/tmp/mysql_dump.sql
MariaDB [(none)]> change master to master_host='MASTER_I...
-レプリケーションスタート
MariaDB [(none)]> start slave;
-状態の確認
show slave status\G
-dumpファイルに記載がある状態からもスタート可能。自分の環...
--
-- Position to start replication or point-in-time recove...
--
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000015', ...
change master to master_host='HOST', master_user='repl',...
*トラブルシューティング [#yb6d68d2]
**レプリケーションが止まる [#c02e0b92]
-仮想マシンでやっていた時に発生した模様。エラーは出てなく...
**レプリケーションユーザーでつながらない [#mc6b978e]
ユーザー登録時にパスワードが設定されてないユーザーで接続...
SHOW GRANTS FOR 'repl'@'%';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'
**Got fatal error 1236 from master when reading data from...
ダンプからレプリケーションをスタートさせてしばらくは順調...
*slaveのmaster昇格 [#d48f6e84]
**ポイント [#m3ab39fb]
手動の確認手順が多いため、VPS同士であればバックアップから...
-master側でpositionの確認
-slave側でpositionの一致確認
-切り替え
***masterのposition確認 [#u288d954]
# プロセス(クエリ)が流れてないことを確認(なかなか消えな...
mysql> SHOW PROCESSLIST;
# 書き込みロックを実行する(ロックが外れるのでmysqlから...
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
# positonの確認
MariaDB [(none)]> SHOW MASTER STATUS\G
*************************** 1. row *********************...
File: mysql-bin.000037
Position: 3524806
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
***slaveのposition確認 [#vfcb6c69]
# レプリケーション(IO_THREAD)を停止する
mysql> STOP SLAVE IO_THREAD;
# Has read all relay logが出るまで待機
mysql> SHOW PROCESSLIST;
# Master_Log_FileとRead_Master_Log_Posをメモ
mysql> SHOW SLAVE STATUS\G
***master/slaveで設定クリア [#bb81fcb6]
-両方で行う。
# レプリケーション系の設定を初期化
mysql> RESET SLAVE ALL;
mysql> RESET MASTER;
***mysqlのreadonlyの設定変更 [#p2a407cf]
***アプリの向き先変更 [#aa447b9b]
ansibleタスク利用。
旧マスターは新マスターのIPへ
新マスターはlocalhostへ
#counter
終了行:
-MySQLのレプリケーションについて。試験的にVPSから自宅への...
#contents
*用語まとめ [#y6814bd8]
|GTID|Global Transaction IDの略。サーバーIDと合わせて世界...
|MHA|マスター自動昇格のためのツール。GTID導入以前はこのツ...
|I/Oスレッド|バイナリろぐの転送|
|SQLスレッド|SQLの差分実行。こちらがボトルネックになるこ...
|トポロジ|masterに対してslaveが複数や、slaveが他のslaveの...
|準同期レプリケーション|非同期が基本だが、IOスレッドまで...
|マルチソースレプリケーション|複数のmasterからのレプリケ...
|グループコミット|sync_binlog=1にしたときに複数のトランザ...
|MaxScale|Proxyとなって複数台のMySQLを更新はmasterへ、リ...
*GTIDを利用したレプリケーション [#pe936c16]
**注意点 [#ra5b84b5]
-create table ... selectなどが使えない。enforce_gtid_scon...
-master/slaveともbinlogの設定が必要。
-MySQL 5.6から実行可能で再起動必要。5.7からはオンラインで...
*設定 [#o64fbf93]
参考ページ
https://www.server-world.info/query?os=CentOS_7&p=mariadb...
http://qiita.com/suzutsuki0220/items/e5be03ea8f44ad2f6533
**遅延対策 [#gea39cca]
救われた面もあるのでなんともだが、遅延が酷いと1時間近く...
slave stop & start すると復帰するが、原因は突き止めたい。
***slaveの状態を確認 [#acb193a4]
-Seconds_Behind_Masterの値が0であればよい。
SHOW SLAVE STATUS¥G
中略
Seconds_Behind_Master: 1
***Seconds_Behind_Masterが0なのに、遅延が発生している場合...
-master側のbinログのポジションを確認
SHOW MASTER STATUS¥G
|master|slave|
|File: mysql-bin.000024|Master_Log_File: mysql-bin.000023|
|Position: 198937070|Read_Master_Log_Pos: 198837070|
ファイルに差分があれば、ネットワーク転送でボトルネックが...
**AWSのRDSの場合(専用のプロシージャーを利用する) [#g1fe5e...
http://takeshiyako.blogspot.jp/2014/12/mysqlamazon-rds.html
mysql> CALL mysql.rds_set_external_master('100.100.100.1...
mysql> CALL mysql.rds_start_replication;
すべてのデータベースをdumpするとmysqlデータベースインポー...
**マスターの設定 [#ke095c1f]
***ユーザーの追加(IPをスレーブのものに限定) [#bf336d22]
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.2/25...
上記の操作でユーザーの追加と権限付与が一度に行える!
***マスターのmy.cnf変更して再起動 [#l47d04ec]
[mysqld]
log-bin=mysql-bin
server-id=1
expire_logs_days=7
mysql-binでバイナリログを有効にして、server-idはかぶらな...
**スレーブの設定 [#kc2387a4]
[mysqld]
log-bin=mysql-bin
server-id=102
read_only=1
# 自身のホスト名を定義(show slave hostsのときに出てくる)
report-host=slavehost
**ダンプとリカバリー [#pfca2f5f]
mysqldumpにスレーブスタート情報が載っている。。
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000018', MAS...
あとはユーザーとホスト情報を追加
master_user='newrepl', master_password='hogehoge',master...
***マスター [#q4a95ea7]
MariaDB [(none)]> flush tables with read lock;
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> show master status;
+------------------+----------+--------------+----------...
| File | Position | Binlog_Do_DB | Binlog_Ig...
+------------------+----------+--------------+----------...
| mysql-bin.000001 | 22826177 | | ...
+------------------+----------+--------------+----------...
1 row in set (0.00 sec)
この番号は更新がなければ変わらないようだ。
-別ターミナルでdump
$ mysqldump -u root -p --all-databases --lock-all-tables...
-終わったらunlock
unlock tables;
-状態の確認
***スレーブ [#w8dfc974]
$ mysql -u root -p < /var/tmp/mysql_dump.sql
MariaDB [(none)]> change master to master_host='MASTER_I...
-レプリケーションスタート
MariaDB [(none)]> start slave;
-状態の確認
show slave status\G
-dumpファイルに記載がある状態からもスタート可能。自分の環...
--
-- Position to start replication or point-in-time recove...
--
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000015', ...
change master to master_host='HOST', master_user='repl',...
*トラブルシューティング [#yb6d68d2]
**レプリケーションが止まる [#c02e0b92]
-仮想マシンでやっていた時に発生した模様。エラーは出てなく...
**レプリケーションユーザーでつながらない [#mc6b978e]
ユーザー登録時にパスワードが設定されてないユーザーで接続...
SHOW GRANTS FOR 'repl'@'%';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'
**Got fatal error 1236 from master when reading data from...
ダンプからレプリケーションをスタートさせてしばらくは順調...
*slaveのmaster昇格 [#d48f6e84]
**ポイント [#m3ab39fb]
手動の確認手順が多いため、VPS同士であればバックアップから...
-master側でpositionの確認
-slave側でpositionの一致確認
-切り替え
***masterのposition確認 [#u288d954]
# プロセス(クエリ)が流れてないことを確認(なかなか消えな...
mysql> SHOW PROCESSLIST;
# 書き込みロックを実行する(ロックが外れるのでmysqlから...
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
# positonの確認
MariaDB [(none)]> SHOW MASTER STATUS\G
*************************** 1. row *********************...
File: mysql-bin.000037
Position: 3524806
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
***slaveのposition確認 [#vfcb6c69]
# レプリケーション(IO_THREAD)を停止する
mysql> STOP SLAVE IO_THREAD;
# Has read all relay logが出るまで待機
mysql> SHOW PROCESSLIST;
# Master_Log_FileとRead_Master_Log_Posをメモ
mysql> SHOW SLAVE STATUS\G
***master/slaveで設定クリア [#bb81fcb6]
-両方で行う。
# レプリケーション系の設定を初期化
mysql> RESET SLAVE ALL;
mysql> RESET MASTER;
***mysqlのreadonlyの設定変更 [#p2a407cf]
***アプリの向き先変更 [#aa447b9b]
ansibleタスク利用。
旧マスターは新マスターのIPへ
新マスターはlocalhostへ
#counter
ページ名: