SHOW MASTER STATUS
命令检查主库是否开启了二进制日志。CHANGE MASTER TO
语句连接主库。SHOW SLAVE STATUS
命令检查复制正确执行。START SLAVE
命令开始复制。主 — 主复制包含两台服务器,每一个都被配置成对方的主库和备库。也就是一对主库。
MySQL 不支持多主库复制。
主动 - 主动模式下的主 — 主复制中,两台服务器都可以写入数据并复制到对方服务器。但是这种模式会遇到数据冲突、数据不一致等问题,一般只用做特殊目的。它的结构如下:
主动 - 被动模式下的主 - 主复制中,其中一台服务器是只读的被动服务器,不接受除复制以外的写入。
拥有备库的主 - 主结构是为每一个主库增加一个备库。这样做增加了冗余,对于不同地理位置的复制拓扑,能够消除单点失效的问题。
选择性复制
分离功能
数据归档
模拟多主库复制
创建日志服务器
SHOW MASTER STATUS
命令来查看当前主库的二进制日志位置和配置。使用SHOW MASTER LOGS
命令查看主库当前有哪些二进制日志是在磁盘上的,使用SHOW BINLOG EVENTS
命令来查看复制事件。SHOW SLAVE STATUS
命令输出的 Second_behind_master 列理论上显示了备库的延时,但是并不总是准确。INSERT ... SELECT
查询,这些查询对数据进行校验并将结果插入一个表中。这些语句通过复制传递到备库,并在备库执行一遍,然后可以比较主备上的结果是否一致。由于该方法是通过复制工作的,可以给出一致的结果而无须同时把主备的表都锁上。CHANGE MASTER TO
命令,并指定合适的值。整个过程中最难的是获取新主库上合适的二进制日志位置,这样备库才可以从和老主库相同的逻辑位置开始复制。FLUSH TABLES WITH READ LOCK
在主库上停止所有活跃地写入。或者在主库上设置 read_only 选项。从这一刻开始应该禁止向即将被替换的主库做任何写入。STOP SLAVE
。CHANGE MASTER TO MASTER_HOST=''
,然后再执行RESET SLAVE
,使其断开与主库的链接,并丢弃 master.info 里的信息。SHOW MASTER STATUS
记录新主库的二进制日志坐标。CHANGE MASTER TO
语句,使用第7步中获得的二进制日志坐标,来指向新的主库。SHOW SLAVE STATUS
命令输出。选择其中 Master_Log_File/Read_Master_Log_Pos 的值最新的那个。CHANGE MASTER TO
。SHOW MASTER STATUS
并记录二进制日志坐标。SELECT MASTER_POS_WAIT()
该语句将阻塞住,直到复制跟上主动服务器。MySQL的复制并不能很好地从服务器崩溃、掉电、磁盘损坏、内存或网络错误中恢复。遇到这些问题时几乎可以肯定都需要从某个点开始重启复制。
Change MASTER TO
命令丢弃并重新获取损坏的事件。只需将备库指向它当前正在复制的位置。INSERT ... SELECT
语句。CHANGE MASTER TO
语句来设置备库,但却无法启动复制。INSERT ... SELECT
语句会锁定源表上所有的行。MySQL需要加锁以确保该语句的执行结果在主库和备库上是一致的。实际上,加锁导致主库上的语句串行化,以确保和备库上的执行方式相符。AUTO_INCREMENT
自增主键冲突的问题:auto_increment_increment和auto_increment_offset。可以通过设置这两个变量来错开主库和备库生成的数字,这样可以避免自增列的冲突。