2014/05/09

MySQL GTID replication 理解深め

★gtid_mode must be ON on all servers or OFF on all servers
★GSo once GTIDs are enabled on all servers, you can have some slaves using file-based positioning and some other slaves using GTID-based positioning.


★GTID関係するパラメータ
mysql> show variables like '%gtid%';
+--------------------------+-----------+
| Variable_name            | Value     |
+--------------------------+-----------+
| enforce_gtid_consistency | ON        |
| gtid_executed            |           |
| gtid_mode                | ON        |
| gtid_next                | AUTOMATIC |
| gtid_owned               |           |
| gtid_purged              |           |
+--------------------------+-----------+


★START SLAVE SQL_THREAD UNTIL SQL_BEFORE_GTIDS = 3E11FA47-71CA-11E1-9E33-C80AA9429562:11-56
START SLAVE SQL_THREAD UNTIL SQL_AFTER_GTIDS = 3E11FA47-71CA-11E1-9E33-C80AA9429562:11-56


★START SLAVE UNTIL SQL_AFTER_MTS_GAPS
==>his statement causes a multi-threaded slave's SQL threads to run until no more gaps are found in the relay log, and then to stop
START SLAVE UNTIL SQL_AFTER_MTS_GAPS should be used before switching the slave from multi-threaded mode to single-threaded mode (that is, when resetting slave_parallel_workers back to 0 from a positive, nonzero value) after slave has failed with errors in multi-threaded mode.

ーーーーーーーーーーー
START SLAVE UNTIL SQL_AFTER_MTS_GAPS;
SET @@GLOBAL.slave_parallel_workers = 0;
START SLAVE SQL_THREAD;
ーーーーーーーーーーー


★MySQL Utilities Launchpad page. ==>python?


★enable GTID replication for an easier rollback in the event of a problem?
どうやる???

★show global variables like 'gtid_executed';
+---------------+--------------------------------------------+
| Variable_name | Value                                      |
+---------------+--------------------------------------------+
| gtid_executed | d3acef65-d68e-11e3-b9f4-08002760d1b6:1-981 |




+---------------+--------------------------------------------+



★オペレーション
当一个slave接到master, 个新的协议将确保GTIDs的范slave经执行的和已提交但失的事. master然后送除此以外的其它事, 也就是那些slave没有行的.==>依慢的状况为准 !自动比较!
有了一个可靠的slave, 确保任何的事slave上都会被行并且不会因master的事件失而

The only part were we should pay attention is the server we choose for promotion: if it is not up-to-date, data may be lost or replication may be broken.

SLAVE出错了,不知道什么原因。。GRID模式下,大部分都是自动的,变量也是只读的。。。
由于运行在GTID模式,所以不支持sql_slave_skip_counter语法
set global gtid_executed=''; set global gtid_purged=''
ERROR 1238 (HY000): Variable 'gtid_executed' is a read only variable
SLAVE上!
Reset master
Stop slave
Reset slave
还记才的gtid_purged那个点,只需重新置下一个点即可
è????!!
set global gtid_purged='cf716fda-74e2-11e2-b7b7-000c290a6b8f:1-141';

auto_position=0 ,很简单根据指定的 binlog 文件和偏移量, Master binlog 中的各个数据更事务发给备库就好了。备库接收到对应的事,判断是否本机起的 ( 数据更事务记录 server_id 来判断 ) ,如果不是本机起的,就直接行。
auto_position=1 备库将自己的 gtid_executed 的事集合传给 Master Master 找到第一个包含有非备库 gtid_executed 集中数据更的 binlog ,将 binlog 中的各个 event 给备库这样备库首先判断是否本机起的,然后判断来的各个数据更事是否在本机。没有的事都需要在本地行一遍。
Retrieved_Gtid_Set 记录的是 IO thread 从主拿到的事

★回想一下,我之前做的操作:手工除了 binlog 日志和 binlog index 文件,然后启 MySQL 个操作在没有启 GTID MySQL 上,我也做过类似的事情,备库并没有复制失的问题。我手工除了 binlog 以后,数据生成 binlog 。但是在 Master 中,它重新从 9300dd57-51da-11e3-989d-3cd92bee36a8:1 第一个事开始数。从另外一个面来,已经执行完的 GTID 集合, MySQL 并没有独保存,而是通 Binlog 得的。
备库经执行完了 9300dd57-51da-11e3-989d-3cd92bee36a8 :1 - 28123 些事。所以当 SQL thread 拿到从主复制来的更事务时发现这些事都是它已经执的事,那么它就不会再重复行,从而对应些事都会被失掉。如果在某种情况下,我需要在手工除,并启数据,建 auto.cnf 清理掉。这样会生成新的 UUID 备库发现是新的事就会更了
LOAD DATA FROM MASTER;
LOAD TABLE TBLNAME FROM MASTER;