1、理论部分

1.1、One Master-Muti Slave

wKiom1YAyYCQQ0rTAABasKYdIsY078.jpg

工作原理:

一台到多台Slave

缺陷:

I/O压力集中在Master上

1.2、M-S-S

wKioL1YAy9TxQ_1vAABeaXaEcfo680.jpg

工作原理:

1)使用一台Slave作为中继,分担Master的压力。

2)中继SLave上需要开启二级制日志,并配置log-slave-updates。

1.3、M-M

wKioL1YAzKrSLqiJAAAjc0cwfX8374.jpg

工作原理:

相互负载均衡

缺点:

破坏了事物的隔离性何数据一致性(不建议使用)

1.4、M-M-M

wKioL1YAzfvRWCllAABmNDeK2_0193.jpg

工作原理:

通过Monitor监控其他三台机器运行

DML发送到其中一台机器,其他三台循环同步

缺点:

1)传递多级别延迟问题。

2)monitor维护增加复杂度。

1.5、One Slave-Muti Master

wKiom1YAz6jgg5W1AABH9vqi5P0911.jpg

工作原理:


优点:

1)数据自动化整合

2)节省成本

缺点:

1)对库和表修改比较多

2)对运行过M-S来说风险比较高

2、实验部分

2.1、实验环境

mysql主服务器(master):

ipaddress=10.168.0.103

hostname=sql-m

mysql中继从服务器(relay-slave):

ipaddress=10.168.0.104

hostname=sql-s

mysql从服务器(slave):

ipaddress=10.168.0.105

hostname=sql-s-s

2.2、实验步骤

以下实验以“mysql replication(主从复制)(一)MS模式”为基础,如果你做如下测试,请先参阅如下链接:

http://cmdschool.blog.51cto.com/2420395/1696474

以上slave机器初始化设置同理请参考“mysql replication(主从复制)(一)MS模式”,以下不在详述。

2.2.1、step1

In Relay-Slave

配置server-id,标识服务器。

vim编辑/etc/my.cnf

实验一基础上增加如下参数:

log-bin
log-slave-updates
binlog-format=row

最后必须包含以下参数:

[mysqld]
server-id=2
log-bin
log-slave-updates
binlog-format=row

配置效果:

wKioL1YBcyPTIDNlAAE2m3eGj1o569.jpg


配置完成后重启服务:

/etc/init.d/mysqld restart

wKioL1YBczbAHoaIAAB3BOIj0Rs222.jpg

2.2.2、step2

In Slave

配置server-id,标识服务器。

vim编辑/etc/my.cnf

增加如下参数:

server-id=3

wKioL1YBc-7QegzlAAEF2GI7F_4379.jpg

配置完成后重启服务:

/etc/init.d/mysqld restart

wKioL1YBdAGhq6k9AADqNvFcpbM773.jpg

2.2.3、step3

本步骤目的是将Relay-Slave的数据导到Slave中

In Relay-Slave

mysqldump --all-databases -uroot -p > /var/lib/backup/backup.sql
scp /var/lib/backup/backup.sql 10.168.0.105:~/

wKioL1YBdJfiL1hnAAF1t8zQhMs308.jpg

In Slave

导入备份并登陆数据库:

mysql -uroot -p < ~/backup.sql
mysql -uroot -p

wKiom1YBde2imDn7AAEb4lYWI1U972.jpg

数据库检查:

show databases;

wKiom1YBdVviE55BAAG7bkQchHg024.jpg

In Relay-Slave

授权本机作为master允许被slave访问:

grant replication slave on *.* to 'repl'@'10.168.0.105' identified by 'repl';

wKioL1YBfmeRGcNOAAHE5ZakaUg041.jpg

查看master状态:

show master status\G

wKiom1YBd1bDhY5rAACL5e1QWC0263.jpg

记录下“File”与“Position”的值,下一步要使用。

2.2.4、step4

In Slave

设置连接到master的参数:

mysql> change master to
    -> master_host='10.168.0.104',
    -> master_user='repl',
    -> master_password='repl',
    -> master_log_file='mysqld-bin.000002',
    -> master_log_pos=106;

wKiom1YBeDHC3BCwAACWn1NfIWU818.jpg

启动作为slave身份的相关进程:

mysql> start slave;

wKioL1YBeF6Q0WVHAABHAdz3lNI006.jpg

查看状态:

mysql> show slave status\G;

wKiom1YBeK-C2oi_AALcvcylX8I146.jpg

2.2.5、step5

本步骤完成测试

In Master&Relay-Slave&Slave

wKioL1YBe9rjNrt0AAQNefEP5GE217.jpg

wKioL1YBfKSB4Q7VAAO74Yu5d2s266.jpg

wKiom1YBfKXCsUpNAAM3hxRjWm0215.jpg