我们知道 Mysql读和写在性能方面的开销差别是较大的,一般来说 server顶着20%写的压力,另外80%的压力来自读。当然这也得看实际业务情况。

这篇文章准备配置一主三从。事实上多少从没什么关系。一主多从事实上是一主一从的延伸,由于从库之间是没有不论什么通信的,详细使用哪种方式看带宽负载和详细流量。

Mysql的主从replication原理事实上就是Master不断地写二进制日志,Slave去读取日志,依照里面的SQL记录去运行!例如以下图:

Mysql 5.5.40实现一主多从 One-Master muil-slave_ide

Mysql主从配置是与生俱来的功能,仅仅需做简单配置就可以,好了,废话少说,開始吧!

我的环境是这样,四台机器都在Vmware上。都使用桥接,用dhcp直接获取动态IP


Master:192.168.83.61

Slave1:192.168.83.87

Slave2:192.168.83.88

Slave3:192.168.83.89

四台机器的Mysql版本号都是Mysql 5.5.40


第一,配置Master

vi /etc/my.cnf

server-id = 61
log-bin=mysql-bin
binlog-do-db=test //须要同步的数据库
binlog-ignore-db=mysql //被忽略的数据库
binlog-ignore-db=information-schema //被忽略的数据库


在master上为三台slave加入一个同步账号

mysql> grant replication slave1 on *.* to 'slave1'@'192.168.83.87' identified by 'slave1';

//在slave1上登陆成功

mysql> grant replication slave on *.* to 'slave2'@'192.168.83.88' identified by 'slave2';

//在slave2上登陆成功

<pre name="code" class="plain">mysql> grant replication slave on *.* to 'slave3'@'192.168.83.89' identified by 'slave3';

//在slave3上登陆成功


保存后重新启动Mysql服务

service mysqld restart


然后在mysql命令行模式下用

mysql> show master status\G;


*************************** 1. row ***************************
File: mysql-bin.000001
Position: 106
Binlog_Do_DB: test
Binlog_Ignore_DB: mysql,information-schema
1 row in set (0.00 sec)


第二,在三台Slave上加入配置:

vi /etc/my.cnf

replicate-do-db=test //同步的数据库

replicate-ignore-db=mysql //被忽略的数据库

replicate-ignore-db=information-schema //被忽略的数据库


server-id看默认有没有配置 通常是用的 假设没有加上 一般用IP后断命名

注意最重要的一点 配置主库信息,mysql 5.1開始废弃了再my.cnf的这样的写法

master-host=192.168.83.61

master-user= slave1

master-password=slave1

master-port=3306


所以5.1之后的版本号都应该这样写:

change master to master_host='192.168.83.61', master_user='slave1', master_password='slave1';


然后重新启动mysql服务

mysql命令行模式下:

mysql>start slave;
mysql>show slave status\G;

假设这两个变量是yes的话 说明主从是在正常执行的

Slave_IO_Running: Yes

Slave_SQL_Running: Yes


Slave_IO_Running:连接到主库,并读取主库的日志到本地,生成本地日志文件

Slave_SQL_Running:读取本地日志文件,并运行日志里的SQL命令。

向主库插入数据 发现三个从库都更新了,that's it!