应用场景
Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。
我们在实际运用中,则可以在整个数据系统中部署一台主(master)服务器,多台slave(从)服务器,主服务器只用来进行数据的写操作(增删改/DDL),而一到多个从服务器则负责查询操作,这样就可将读写负载分开来,而多个从服务器又可实现读操作的负载均衡,这样,将会为整个应用系统带来数据库系统上的提升。
需要注意的是,所有需要进行主从数据复制的表的写操作都只能在master服务器上进行,以避免对从服务器上的表所进行的写操作与主服务器中的表数据产生冲突,破坏主从数据一致性。
主要应用场景有:
- 数据分布 (Data distribution )
当在地理上有多个数据库节点分布时,而不同地理位置的数据库为了保持数据的一致性时- 负载平衡(load balancing)
多个数据库节点为了均衡负载,分摊压力时- 备份(Backups)
当其中某个数据库节点出现障碍需要读取备份时- 高可用性和容错行 High availability and failover
当需要单个数据节点的障碍不影响整个数据节点的运行时
搭建master(主)服务器
首先需要准备两台安装有mysql的服务器,本文将以安装在unbuntu16.04中的两台mysql5.7.17为例,一台为master(IP:192.168.1.209),另一台则为slave(IP:192.168.1.105).
在主服务器的mysql配置文件(/etc/mysql/my.cnf
)中配置[mysqld]分区,然后加入如下配置项:
[mysqld]
# mysql的二进制日志文件名称前缀,主服务器
# 必须配置才会开启二进制日志,
# 可以带上绝对/相对路径,例如设置
# 为:/usr/local/mysql/mysql-bin,则最终会
# 在/usr/local/mysql/目录下生成类似
# mysql-bin.000001的日志文件,这里不设置路径则在
# mysql的data目录(一般是`/var/lib/mysql`)
# 生成mysql-bin.0000*文件.
log-bin=mysql-bin
# 服务器唯一标识id,不可与其它加入的mysql
# 服务器id重