共计 2265 个字符,预计需要花费 6 分钟才能阅读完成。
两台或以上数据库实例,通过二进制日志,实现数据的“同步 ” 关系。
主从复制
实例准备:两台以上 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
分布式架构
正文完