mysql复制工作方式
- 主服务器将变更写入二进制日志
- 从服务器读取主服务器的二进制日志变更写入到relay_log中
- 在从服务器上重放relay_log中的日志
- 基于SQL段(statement)的日志是在从服务器上重新执行记录的SQL
- 基于行的日志(row)则是在从库上直接应用对数据库行的修改
基于日志点的复制
基于日志点的复制步骤:
- 在主DB服务器上建立复制账号
CREATE USER 'repl'@'ip段' IDENTIFIED by 'youpassword';
GRANT replication SLAVE ON *.* TO 'repl'@'ip段';
2 . 配置主数据库服务器
log_bin = mysql_bin
max_binlog_size = 1000M
binlog_formart = row
expire_logs_day = 7
sync_binlog = 1
server_id = 100 #动态参数,集群中唯一
3 . 配置从数据库服务器
log_bin = mysql_bin
relay_log = mysqld-relay-bin
server_id = 101
relay_id = mysql-relay-bin
log_slave_update = on #可选
read_only = on #可选
4.初始化从服务器数据
mysqldump --master-data=2 -single-transaction #innodb
xtrabackup --slave-info #推荐的热备份工具
5 . 启动复制链路
CHANGE MASTER TO MASTER_HOST = 'master_host_ip',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'youpassword',
MASTER_LOG_FILE = 'mysql_log_file_name',
MASTER_LOG_POS = 4;
start slave
优点:
- 是Mysql最早支持的复制技术,bug相对较少
- 对SQL查询没有任何限制
- 故障处理比较容易
缺点:
- 故障转移时重新获取新主的日志点信息比较困难