主从复制
将主数据库的DDL和DML操作通过二进制日志传到从数据库,从库根据日志重新执行,从而使主从数据保持同步
- 主库出现问题,可以快速切到从库进行服务
- 实现读写分离,降低主库的访问压力
- 备份在从库执行,避免对主库的服务造成影响
原理
- 主库在提交事务时,会把数据变更记录在二进制文件
Binglog中 - 从库读取主库二进制文件,写入到从库的中继日志
Relay Log - slave重做中继日志中的事件,将改变反映它自己的数据
部署
设置主库
修改配置文件:编辑主库的/etc/my.cnf,添加或修改:
server-id=1 # 集群中唯一ID,主库通常设为1
read-only=0 # 是否只读,1代表只读,0代表读写
完成后重启MySQL使配置生效,然后创建复制专用用户:连接到主库,创建一个专门用于复制的用户并授予最小权限
CREATE USER 'repl_user'@'%' IDENTIFIED BY '你的强密码';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;
获取同步起点坐标:执行以下命令,务必记录File和Position的值,配置从库时会用到
SHOW MASTER STATUS;
设置从库
修改配置文件:编辑从库的/etc/my.cnf,添加
server-id = 2 # 必须与主库不同,且集群唯一
read_only = 1 # 建议开启,防止从库被误写入
完成后重启MySQL使配置生效,然后配置连接信息:登录从库,使用之前记录的主库信息和二进制日志坐标,执行以下命令建立连接
-- 将 '主库IP', 'repl_user', '密码', 'mysql-bin.000001', '157' 替换为实际值
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='主库IP',
SOURCE_USER='repl_user',
SOURCE_PASSWORD='你的强密码',
SOURCE_LOG_FILE='mysql-bin.000001',
SOURCE_LOG_POS=157;
启动同步并验证
START REPLICA;
SHOW REPLICA STATUS\G;
分库分表
拆分策略
垂直拆分
水平拆分
