标签:mysql
MySQL复制:
Mysql的扩展
复制:每个节点都要相同的数据集;
向外扩展;
二进制日志;
单向;
复制的功用:
数据分布;
负载均衡(读);
备份
高可用和故障切换;
MySQL升级测试
主从复制:
从节点:
I/O 线程:从master请求二进制日志事件,并保存在中继日志中
SQL 线程:从中继日志读取日志事件,在本地完成重发
主节点:
dump 线程:为每个Slave的I/O线程启动一个dump线程,用于向其发送binary log event.
特点:
异步复制:
主从数据不一致比较常见
复制架构:M/S,M/M
二进制日志事件记录格式:
STATEMEN(语句)
ROW
MIXED
主从配置过程:
主节点:
1、启动二进制日志;
log-bin=master-bin
2、为当前节点设置一个全局唯一的ID号;
server-id=1
3、创建有复制权限的用户账号;
grant replication slave,replication client on *.* to ‘repluser‘@‘10.10.%.%‘ identified by ‘replpass‘;
从节点:
1、启动中继日志;
relay-log=relay-log
relay-log.index=relay-log.index
2、为当前节点设置一个全局唯一的ID号 ;
server-id=3
3、使用有复制权限的用户账号连接至主服务器,启动复制线程;
change master to master_host=‘10.10.x.x‘,master_user=‘repluser‘,master_password=‘replpass‘,master_log_file=‘master-bin.000001‘,master_log_pos=495;
sql>start slave;
如果主节点已经运行一段时间,且有大量数据,如何配置并启动slave节点?
通过备份恢复数据至从服务器;
复制起始位置为备份时,二进制日志文件及其pos.
复制架构中应该注意的问题:
1、限制从服务器为只读;
在从服务器设置为read_only=ON;此限制对拥有SUPER权限的用户均无效;
阻止所以用户:
sql>flush tables with read lock;
2、如何保证主从复制事务安全?
在master节点启用参数:
sync_binlog=ON
如果用到为InnoDB存储引擎:
innodb_flush_log_at_trx_commit=ON
innodb_support_xa=ON
在slave节点:
skip_slave_start=ON
master节点:
sync_master_info 1
slave节点:
sync_relay_log
sync_relay_log_info
主主复制
互为主从:
1、数据不一致;因此,慎用;
2、自动增长ID:
配置一个节点使用奇数id
auto_increment_offset=1
auto_increnent_increment=2
另一个节点为偶数id
auto_increment_offset=2
auto_increnent_increment=2
半同步复制
master:
sql>install plugin rpl_semi_sync_master soname ‘semisync_master.so‘;
sql>set global rpl_semi_sync_master_enabled=1;
sql>show global status like ‘%semi%‘;
sql>show global variables like ‘%semi%‘
slave:
sql>install plugin rpl_semi_sync_slave soname ‘semisync_slave.so‘;
sql>set global rpl_semi_sync_slave_enabled=1;
sql>show global variables like ‘%semi%‘;
复制过滤器:
让从节点仅复制指定的数据库,或指定的数据库的指定表;
有两种实现方式:
1)主服务器仅向二进制日志中记录与特定数据库(特定表)相关的事件;
时间还原无法实现;不建议使用;
2)从服务器在replay中继日志中的事件中,仅读取与特定数据库(特定表)相关的事件应用本地;
问题:会造成网络及磁盘IO浪费
replicate_do_db 设置白名单(数据库)
replicate_ignore_db 设置黑名单
replicate_ignore_table 设置白名单(表)
sql>set global replicate_do_db=‘xx‘
复制的监控和维护
1、清理日志:
sql> purge binary logs to ‘bin.xxxxxx‘;
2、监控日志:
sql>show master status;show processlist;
3、从服务器是否落后主服务器:
Seconds_Behind_Master:0
4、数据库不一致如何修复?
重新复制;
本文出自 “12532133” 博客,请务必保留此出处http://12542133.blog.51cto.com/12532133/1959408
标签:mysql
原文地址:http://12542133.blog.51cto.com/12532133/1959408