🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ### 复制概述 复制解决的基本问题是让一台服务器的数据与其他服务器保持同步。一台主库的数据可以同步到多台备库上,备库本身也可以被配置成另外一台服务器的主库。 **两种复制方式**: ``` 基于行的复制 version>=5.1 基于语句的复制(逻辑复制) version>=3.23 ``` ### 复制解决的问题 复制比较常见的用途: * 数据分布 * 负载均衡 11章详细讨论 * 备份 ``` why? 复制是一项很有意义的技术补充,但复制既不是备份也不能取代备份 ``` * 高可用性和故障切换 12章讨论故障切换 * MySQL升级测试 ### 复制如何工作 复制有三个步骤: 1. 在主库上把数据更改记录到二进制日志中(这些记录被称为二进制日志事件) 2. 备库将主库上的日志复制到自己的中继日志中。 3. 备库读取中继日志中的事件,将其重放到备库数据之上 ![lyOMSf.png](https://s2.ax1x.com/2020/01/07/lyOMSf.png) ### 配置复制 #### 在每台服务器上创建复制账号 创建账号语句: ```sql mysql> GRANT PEPLICATION SLAVE, PEPLICATION CLIENT ON *.* TO repl@'192.168.0.%' IDENTIFIED by 'p4ssword'; ``` 在主库和备库都创建该账号。 #### 配置主库和备库 主库上的配置server1: ``` 打开二进制日志 指定一个独一无二的服务器ID ``` 在 my.cnf中修改或增加如下内容: ``` log_bin= mysql-bin server_id = 10 ``` 备库在my.cnf配置,并重启服务器: ``` log_bin = mysql-bin server_id = 2 relay_log = /var/lib/mysql/mysql-relay-bin log_slave_updates = 1 read_only = 1 ``` 注意:不要在配置文件my.cnf中设置master_port 或master_host这些选项,这是老的配置方式。 #### 通知备库连接到主库并从主库复制数据 启动复制: ``` mysql > CHANGE MASTER TO MASTER_HOST='server1', MASTER_USER='rep1', MASTER_PASSWORD='p4ssword', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0; ```