我们知道 Mysql读和写在性能方面的开销区别是较大的,一般来说 服务器顶着20%写的压力,另外80%的压力来自读,当然这也得看实际业务情况。
这篇文章准备配置一主三从,其实多少从没什么关系,一主多从其实是一主一从的延伸,因为从库之间是没有任何通信的,具体使用哪种方式看带宽负载和具体流量。
Mysql的主从replication原理其实就是Master不断地写二进制日志,Slave去读取日志,按照里面的SQL记录去执行!如下图:
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!