原理主从同步( Replication ) : 基于二进制日志( Binary log 以事件方式记录主库的数据变更)实现主库( Master )数据变更操作在从库( Slave )的回放。
● 条件:
1 、开启二进制日志( log-bin=mysql-bin , relay-log = mysql-relay )
2 、主从库全局唯一 server-id ( 1 ~ 2^32–1 )
3 、同步账号( GRANT REPLICATION SLAVE ON *.* TO )
4 、基准数据及同步点
特点:
优点:● 读写分离● 数据备份● 数据融合● 单点冗余
困扰:● 同步延迟● 数据差异● 维护成本● 程序复杂
常见问题:
● 同步中断SLAVE IO THREAD ( net work , grants , server-id , net-slavetimeout... )SLAVE SQL THREAD ( 1062, drop user, killed event, diff errno... )
● 同步延迟(无时无刻, 双刃剑)
● 数据不一致:
主从库版本不一致
使用了触发器、存储过程、函数、临时表等主从库数据结构不一致
常用命令
● mysql> change master to -> master_host='master_host_name', -> master_user='replication_user_name', -> master_password='replication_password', -> master_log_file='recorded_log_file_name', -> master_log_pos=recorded_log_position
● show master status;
● show slave status\G
● show master logs;
● purge master logs to/before
● stop/start slave sql_thread/io_thread;
● start slave until
● set sql_log_bin=0;
● set global sql_slave_skip_counter=N
建议:
● 建议主从库版本一致
● 慎用触发器、存储过程、函数、临时表
● 停实例前 stop slave; show status like “%temp%”
● skip-slave-start
● 每次重启同步都 tail -f error-log
● 操作前注意检查版本master.info,relay.info 不同版本格式存在差异不同版本的二进制日志格式不同