共计 1891 个字符,预计需要花费 5 分钟才能阅读完成。
MySQL 复制介绍
MySQL 复制就是一台 MySQL 服务器(slave)从另一台 MySQL 服务器(master)进行日志的复制然后再解析日志并应用到自身,类似 Oracle 中的 Data Guard。
MySQL 复制有那些好处:
第一是解决宕机带来的数据不一致,因为 MySQL 复制可以实时备份数据;
第二点是减轻数据库服务器的压力,多台服务器的性能一般比单台要好。但是 MySQL 复制不适合大数据量,大数据量推荐使用集群。
MySQL 复制过程分成三步:
master 将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events;
slave 将 master 的 binary log events 拷贝到它的中继日志(relay log);
slave 重做中继日志中的事件,将改变应用到自己的数据库中。MySQL 复制是异步的且串行化的
MySQL 复制搭建
环境准备
master 192.168.1.5
slave 192.168.1.6
OS:Oracle Linux 6.1
MySQL:5.5.37
Master 配置
1)分配复制权限
主库和从库均需要执行
2)清空日志文件
主从库都是默认开启二进制日志文件
需要注意的是,如果不想清空日志文件的话,需要记录当前 master 的 log_file 和 log_pos,并在下面启用复制操作时指定这两个参数或者在 slave 的配置文件指定。
Slave 设置
1)修改从服务器 server-id
修改完以后需要重启数据库
2)清空日志文件,同 Master
3)启用复制
让 slave 连接 master 并开始重做 master 二进制日志中的事件
master_log_pos 的值为 0,因为它是日志的开始位置;master_log_file 是初始日志文件。如果 master 日志没有被清空,这里就是当前 master 的日志信息
需要注意的是,默认情况下,会同步该用户下所有的 DB,如果想限定哪些 DB,有 3 种思路
在 master 上的 /etc/my.inf 中通过参数 binlog-do-db、binlog-ignore-db 设置需要同步的数据库
在执行 grant 分配权限操作的时候,限定数据库
在 slave 上限定数据库使用 replicate-do-db=dbname
4)开启 slave
5)确认 Slave 是否和 Mater 成功通信。如果 Slave_IO_Running 和 Slave_SQL_Running 都是 yes,则证明配置成功
测试
Master 创建数据库
Slave 查看数据库已同步
Master 创建表插入数据
Slave 查看
通过以上验证,可以看到主服务器上的修改能够正常同步到从服务器。
补充说明
1)做了 MySQL 主从复制以后,使用 mysqldump 对数据备份时,一定要注意按照如下方式:
这样就可以保留 file 和 position 的信息,在新搭建一个 slave 的时候,还原完数据库,file 和 position 的信息也随之更新,接着再 start slave 就可以很迅速的完成增量同步。
其他复制方式
主主复制
master-slave 只能进行单向操作,像网络中的半双工。master-master 可以实现服务器之间互相同步,且主主复制可以避免出现单点故障后整个系统宕机。主主复制最大的问题就是数据插入或更新冲突。配置方法同主从复制,反过来让 slave 同步 master。注意 master_log_file 和 master_log_pos 参数要与 master 上对应。具体可以参考这里
单一 master 和多 slave
由一个 master 和多个 slave 组成的复制系统比较简单。slave 之间并不互相通信,只能与 master 通信。如果写操作较少,读操作很多,可以采用。可以将读操作分布到其他 slave,从而减轻 master 的压力。但 slave 增加到一定数量时,slave 对 master 的负载以及网络带宽都会成为问题。
主从多级复制
读操作很多可以采用单一 maste 和多 slave,但增大到一定 slave 后连到 master 的 slaveIO 线程太多会造成 master 压力增大,从而造成数据复制延时。多级复制就是为了解决这个问题。如果想实现主 - 从(主)- 从多级复制,需要设置 log-slave-updates 参数。同时二进制日志也必须启用。
当然,增加复制的级联层次,同一个变更传到最底层的 Slave 所需要经过的 MySQL 也会更多,同样可能造成延时较长的风险。如果条件允许,倾向于通过拆分成多个 Replication 集群来解决。
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-06/132425.htm