詳解MySQL5.7 読書メモ
2. レプリケーション
調査
master thread確認
コードから?
mysqldumpの--master-data=2及び他のオプションについて
https://dev.mysql.com/doc/refman/5.6/ja/mysqldump.html#option_mysqldump_master-data
- default: 1
- 1:
change master to ...
ステートメントが追記され, インポートと同時にmasterへのchange master to が実行される - 2:
change master to ...
ステートメントがコメントとして追記される - このオプションは自動的に --lock-tables をオフにする
- さらに--single-transaction も指定されていない場合は、--lock-all-tables をオンにする(ダンプの最初のわずかな時間のみグローバル読み取りロックが取得される)
--single-transaction
- データのダンプ前に、トランザクション分離モードを REPEATABLE READ に設定し、START TRANSACTION SQL ステートメントをサーバーに送信
- アプリケーションをブロックすることなく、START TRANSACTION が発行された時点のデータベースの一貫した状態をダンプできる
show slave statusと同等のpeformance_schemaテーブル
replication_applier_configuration
show create table replication_applier_configuration\G 1. row Table: replication_applier_configuration Create Table: CREATE TABLE
replication_applier_configuration
(CHANNEL_NAME
char(64) NOT NULL,DESIRED_DELAY
int(11) NOT NULL ) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
replication_applier_status
show create table replication_applier_status\G 1. row Table: replication_applier_status Create Table: CREATE TABLE
replication_applier_status
(CHANNEL_NAME
char(64) NOT NULL,SERVICE_STATE
enum('ON','OFF') NOT NULL,REMAINING_DELAY
int(10) unsigned DEFAULT NULL,COUNT_TRANSACTIONS_RETRIES
bigint(20) unsigned NOT NULL ) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
replication_applier_status_by_coordinator
show create table replication_applier_status_by_coordinator\G 1. row Table: replication_applier_status_by_coordinator Create Table: CREATE TABLE
replication_applier_status_by_coordinator
(CHANNEL_NAME
char(64) NOT NULL,THREAD_ID
bigint(20) unsigned DEFAULT NULL,SERVICE_STATE
enum('ON','OFF') NOT NULL,LAST_ERROR_NUMBER
int(11) NOT NULL,LAST_ERROR_MESSAGE
varchar(1024) NOT NULL,LAST_ERROR_TIMESTAMP
timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
replication_applier_status_by_worker
show create table replication_applier_status_by_worker\G 1. row Table: replication_applier_status_by_worker Create Table: CREATE TABLE
replication_applier_status_by_worker
(CHANNEL_NAME
char(64) NOT NULL,WORKER_ID
bigint(20) unsigned NOT NULL,THREAD_ID
bigint(20) unsigned DEFAULT NULL,SERVICE_STATE
enum('ON','OFF') NOT NULL,LAST_SEEN_TRANSACTION
char(57) NOT NULL,LAST_ERROR_NUMBER
int(11) NOT NULL,LAST_ERROR_MESSAGE
varchar(1024) NOT NULL,LAST_ERROR_TIMESTAMP
timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
replication_connection_configuration
show create table replication_connection_configuration\G 1. row Table: replication_connection_configuration Create Table: CREATE TABLE
replication_connection_configuration
(CHANNEL_NAME
char(64) NOT NULL,HOST
char(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,PORT
int(11) NOT NULL,USER
char(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,NETWORK_INTERFACE
char(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,AUTO_POSITION
enum('1','0') NOT NULL,SSL_ALLOWED
enum('YES','NO','IGNORED') NOT NULL,SSL_CA_FILE
varchar(512) NOT NULL,SSL_CA_PATH
varchar(512) NOT NULL,SSL_CERTIFICATE
varchar(512) NOT NULL,SSL_CIPHER
varchar(512) NOT NULL,SSL_KEY
varchar(512) NOT NULL,SSL_VERIFY_SERVER_CERTIFICATE
enum('YES','NO') NOT NULL,SSL_CRL_FILE
varchar(255) NOT NULL,SSL_CRL_PATH
varchar(255) NOT NULL,CONNECTION_RETRY_INTERVAL
int(11) NOT NULL,CONNECTION_RETRY_COUNT
bigint(20) unsigned NOT NULL,HEARTBEAT_INTERVAL
double(10,3) unsigned NOT NULL COMMENT 'Number of seconds after which a heartbeat will be sent .',TLS_VERSION
varchar(255) NOT NULL ) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
replication_connection_status
show create table replication_connection_status\G 1. row Table: replication_connection_status Create Table: CREATE TABLE
replication_connection_status
(CHANNEL_NAME
char(64) NOT NULL,GROUP_NAME
char(36) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,SOURCE_UUID
char(36) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,THREAD_ID
bigint(20) unsigned DEFAULT NULL,SERVICE_STATE
enum('ON','OFF','CONNECTING') NOT NULL,COUNT_RECEIVED_HEARTBEATS
bigint(20) unsigned NOT NULL DEFAULT '0',LAST_HEARTBEAT_TIMESTAMP
timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Shows when the most recent heartbeat signal was received.',RECEIVED_TRANSACTION_SET
longtext NOT NULL,LAST_ERROR_NUMBER
int(11) NOT NULL,LAST_ERROR_MESSAGE
varchar(1024) NOT NULL,LAST_ERROR_TIMESTAMP
timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
replication_group_member_stats
show create table replication_group_member_stats\G 1. row Table: replication_group_member_stats Create Table: CREATE TABLE
replication_group_member_stats
(CHANNEL_NAME
char(64) NOT NULL,VIEW_ID
char(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,MEMBER_ID
char(36) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,COUNT_TRANSACTIONS_IN_QUEUE
bigint(20) unsigned NOT NULL,COUNT_TRANSACTIONS_CHECKED
bigint(20) unsigned NOT NULL,COUNT_CONFLICTS_DETECTED
bigint(20) unsigned NOT NULL,COUNT_TRANSACTIONS_ROWS_VALIDATING
bigint(20) unsigned NOT NULL,TRANSACTIONS_COMMITTED_ALL_MEMBERS
longtext NOT NULL,LAST_CONFLICT_FREE_TRANSACTION
text NOT NULL ) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
replication_group_members
show create table replication_group_members\G 1. row Table: replication_group_members Create Table: CREATE TABLE
replication_group_members
(CHANNEL_NAME
char(64) NOT NULL,MEMBER_ID
char(36) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,MEMBER_HOST
char(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,MEMBER_PORT
int(11) DEFAULT NULL,MEMBER_STATE
char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL ) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
GTID
- GTIDのformat
- GTIDの範囲指定
p27, 下から10行目くらい,
準動機レプリケーションを利用していれば、最も進んだスレーブはマスターがクラッシュした時点のデータと全く同じデータを持っているはずである。
<- ロスレスレプリケーションでも若干失う部分はあるのでは?GTIDで使えなくなるSQL文?
gtid_executedとgtid_purgedシステム変数の意味と使われ方
- binlog_gtid_simple_recoveryがtrue,falseでそれぞれどういうふうにbinlogの中身を精査しているのか?
メモ
- 5.7以降ではchange masterでuser, passwordを指定しない。
- スレーブ上のmaster.infoファイルかmysql.slave_master_infoテーブルに平分で書かれてしまう
- start slave user = '<user>' password = '<passwd>'
で指定
- GTIDのonline有効化,無効化手順(p28~32)
- GTIDが有効でbinlogが有効でないものはmysql.gtid_executed テーブルに書かれる
コマンド
- show binary logs
- show binlog events
- show relaylog events
config
- enforce_gtid_consistency
- gtid_mode
- ON: GTIDモードのbinlogを生成、受け取り
- OFF_PERMISSIVE: GTIDモードのものでもそうでないものでも受け取れる
- session_track_gtids
TODO
- GTID部分の疑問を調べる
- ロスレスレプリケーションでMaster復旧後に出るであろうslaveとの差分を実験で確認してみる
- peformance_schemaのreplication関連テーブルでshow slave status以上に何が見られるのか確認
.