两台或以上数据库实例,通过二进制日志,实现数据的“同步"关系。
主从复制
实例准备:两台以上MySQL实例,server_id不同。
主库
- 主库开启二进制日志
- 主库建立复制用户:grant replication slave on . to repl@'10.0.0.%' identified by '123';
- 主库备份:mysqldump -A --master-data=2 --single-transaction -R -E --triggers >/tmp/full.sql
- 告知从库复制信息,找到复制开始起点:
grep "\-- CHANGE MASTER TO" /tmp/full.sql
从库
- 恢复到从库:mysql </tmp/full.sql
- 从帮助中获取change master to语句进行修改:mysql> help change master to
- 执行CHANGE MASTER TO命令
- 从库开启专用复制线程:start slave;
- 验证主从状态:show slave status \G
主从复制原理
文件
主库:binlog文件
从库:
- relay-log文件:存储接收的binlog,默认存储在从库数据目录下,手工定义:relay_log_basename=/data/3307/data/relay-bin
- master.info:连接主库信息,已经接收binlog位置点信息。默认存储在从库数据目录下,也可将配置信息写入到表中:master_info_repository = TABLE
- relay-log.info:记录⽂件复制进度,下⼀个事件从什么位置开始。默认存储在从库数据目录下,也可以手工定义:relay_log_info_repository = TABLE
线程
主库:Binlog_dump_Thread,作用是用来接收从库请求,并将binlog投递给从库。显示正在运行线程:show processlist;
从库:
- IO线程:请求binlog,接收binlog
- SQL线程:回放relay日志
原理
- S:change master to信息写入到master.info,执行start slave;启动IO线程和SQL线程
- S:IO线程读取master.info信息,获取主库信息连接主库
- M:分配DUMP线程,专门和IO线程通信
- S:IO线程根据master.info记录的binlog文件名和position号,请求主库新日志
- M:DUMP线程接收请求,截取日志,返回给IO线程
- S:IO线程将收到日志存储到TCP/IP缓存,立即返回ACK给主库,主库工作完成
- S:IO线程将缓存数据,存储到relay-log日志文件,并更新master.info,IO线程工作结束
- S:SQL线程读取relay-log.info,获取上次执行到的位置点
- S:SQL线程向后执行新的relay-log,再次更新relay-log.info
小细节:
S:参数relay_log_purge=ON,会定期删除用用过的relay-log
M:DUMP线程会实时监控主库binlog变化,如果有新变化,发信号给从库,IO线程再请求
主从监控
主库方面:
- show processlist;
- show slave hosts;
从库方面:
- show slave status \G
MHA
全称:Master High Availability,是Perl语言写的MySQL故障切换方案,故障切换时间10-30s。
MHA由node和manager组成;
- node:所有数据库机器都要部署,master是一个node,slave也是一个node
- manager:相当于server,会对node进行管理,配置检查,binlog和relay-log获取,执行切换任务等。可以单独部署在server上(tj),单独部署可以管理多套主从架构。也可以部署在某个slave上,如果部署在slave上,那么该slave就无法被升级为主库
部署MHA高可用框架
配置关键程序软连接:
ln -s /app/database/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
ln -s /app/database/mysql/bin/mysql /usr/bin/mysql
配置各节点互信:
rm -rf /root/.ssh
ssh-keygen
cd /root/.ssh
mv id_rsa.pub authorized_keys
scp -r /root/.ssh 10.0.0.52:/root
scp -r /root/.ssh 10.0.0.53:/root
各节点安装Node:
yum install perl-DBD-MySQL -y
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
安装Manager:
yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
创建MHA专用监控管理用户:grant all privileges on . to mha@'10.0.0.%' identified by 'mha';
Atlas
Atlas中间件是由奇虎360基于MySQL官方中间件mysql-proxy二次开发实现,能够对数据库进行读写分离、分库分表配置,配合MHA架构进行高可用环境搭建有较好效果。
MyCAT
分布式架构