binlog 复制原理
- MySQL 对于二进制日志 (binlog)的复制类型
- 基于语句的复制:在Master 上执行的SQL 语句,在Slave 上执行同样的语句。MySQL 默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制。
- 基于行的复制:把改变的内容复制到Slave,而不是把命令在Slave 上执行一遍。从MySQL5.0 开始支持。
- 混合类型的复制:默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制
replication 集群原理
配置步骤
主节点
开启 binlog (important) 、开启 GTID (可选)
# 集群中 server_id 要求不一致
server_id = 100
# 开启 binlog 日志,并且设置 binlog 日志名称
log_bin = mysql_bin
##主从复制的 格式 mixed,statement,row ,默认格式是 statement
binlog_format=row
gtid_mdoe=on
## gtid_mode 的前置条件
enforce_gtid_consistency
log_slave_updates=on #表示 slave 将复制事件写进自己的 binlog
master_info_repository=TABLE
relay_log_info_repository=TABLE
建立同步所用的 db 账号
CREATE USER 'backup'@'%' IDENTIFIED BY "Root666.";
GRANT super,reload,replication slave ON *.* TO 'backup'@'%';
flush privileges;
使用
mysqldump
时候加上--master_data=2
参数备份数据库--master-data
在建立slave数据库的时候会经常用到- 默认值为1,会包含
change master to
语句 - 设置会2,会注释掉该语句,用于提示复制file和offset
--
-- Position to start replication or point-in-time recovery from
--
-- 如果 --master-data=2,则会注释该语句
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000090', MASTER_LOG_POS=107;
- 默认值为1,会包含
从节点
- 开启 binlog (important) 、开启 GTID (可选)
- 和主节点类型,只不过
server_id
需要更改,并且配置 relay_log
- 和主节点类型,只不过
- 恢复主节点的备份数据库
- 使用
change master to
配置链路- 如果没有恢复主节点的备份数据库,直接指定 master_host 等从头开始复制即可
- 如果恢复了,就要查看之前 dump 出来的 sql ,另外配置
MASTER_LOG_FILE
和MASTER_LOG_POS
属性
start slave
启动复制