一、主从服务器使用场景
为什么要使用主从服务器?当我们在一个系统中,访问量很小的时候,感觉不到性能的问题,但是当我们系统的访问量大大增加后,系统性能会明显下降,对于这样一个系统,我们当然要去优化服务器,这时就提到了负载均衡,读写分离,我们可以配置多个服务器,降低单个服务器的负载。当MYSQL拆成了多个,必须分出主和从,所有的写操作都必须要在主MYSQL 上完成,所有的从MYSQL的数据都来自于(同步于)主MYSQL。在这里涉及到同步,那一定有延迟,有延迟,就一定可能在读的时候产生脏数据;所以,能够在从MYSQL上进行的读操作,一定对实时性和脏数据有一定容忍度的数据;比如,登陆日志,后台报表,首页统计信息来源,文章,资讯,SNS消息;
特别需要注意的是,在MYSQL主从时,如果一个业务(service中的一个方法)中,如果既有R操作,又有W操作,因为W操作一定要在主MYSQL上,所以在一个事务中所有的数据来源都只能来自于一个MYSQL。
二、主从配置原理
,要完成主从同步,就必须让在Master上执行的所有的DML和DDL能够正确的在Salve上再执行一遍;MYSQL选择使用文件来记录SQL;
要完成主从同步,第一个事情就是把在主服务器上的bin-log(二进制文件)打开,bin-log文件就可以记录在MYSQL上执行的所有的DML+DDL+TCL;
,MYSQL使用被动注册(即通过从的服务器配置主服务器来连接主服务器)的方式来让从MYSQL请求同步主MYSQL的binlog;原因:被动请求的方式,主的MYSQL不需要知道有哪些从的MYSQL,额外添加/去掉从MYSQL服务器,对主MYSQL服务器的正常运行没有任何影响;
主从服务器工作流程
从MYSQL后台一个线程发送一个请求,到主服务器请求更新数据;最重要的数据(我这次请求,请求你bin-log的哪一行数据之后的数据,因为每次服务器的同步数据时候必须记录当前同不去的位置)。
主MYSQL后台一个线程接收到从MYSQL发送的请求,然后读取bin-log文件中指定的内容,并放在从MYSQL的请求响应中;
从MYSQL的请求带回同步的数据,然后写在从MYSQL中的relay-log(重做日志)中;relay-log中记录的就是从主MYSQL中请求回来的哪些SQL数据;
从MYSQL后台一个线程专门用于从relay-log中读取同步回来的SQL,并写入到从MYSQL中,完成同步;
结合上图,我们可以看出主从服务器总共启动了4个线程来完成工作,有人会问,这样会不会影响性能,其实MYSQL的主从同步是经过高度优化的,性能非常高,在一般的系统中不用考虑这个。
三、配置主从服务器
1.到mysql的安装目录下,分别拷贝一份,在mysql的数据文件中,只拷贝最原始的data就可以了。
2.进入mysql文件的bin目录下启动命令行,为新的mysql创建windows系统服务mysqld install MySQL2 –defaults-file=”C:\Program Files (x86)\MySQL\MySQL Server 5.5_1\my.ini”(读者可改为自己的安装路径),当我们配置安装了从服务器后,连接从mysql,可以将主服务器上的一个数据库备份。当配置号主从后,还原备份数据,测试主从服务器是否配置好。
3,因为主数据库之前的内容没有放在binlog中,所以要同步这些数据,只能通过主数据库备份来完成;
配置主数据库,在主服务器的my.ini文件中加入下面属性
1,server-id=1://给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号,在一个集群中,这个id是不能重复的;
2,log-bin=master-bin://开启二进制文件;后面设置的这个master-bin就是二进制文件的名字前缀(名字);
3,log-bin-index=master-bin.index//开启二进制文件的索引;名字一般为log-bin.index
4.启动主数据库,执行show master status命令,当执行这个命令有数据时说明master已经配置好;
File:二进制文件的文件名;
Position:当前文件已经记录到的位置;
5,配置从服务器;
1),server-id=2;
2),relay-log=slave-relay-bin
3),relay-log-index=slave-relay-bin.index
6.启动从服务器;
7,恢复主数据库的备份,
在命令行执行下面语句:
change master to master_host='127.0.0.1', #Master 服务器Ip
master_port=3306,#Master服务器的端口
master_user='root',#Master服务器的账户(其实应该是一个专门用于数据同步的账户)
master_password='admin',#Master服务器的同步账户密码
master_log_file='master-bin.000001',#Master服务器产生的日志
master_log_pos=0;#指定请求同步Master的bin-log的哪一行数据之后的内容;
启动从MYSQL,这样,我们就配置好了服务器,下面测试一下;
9.这时当我们修改主服务器上的一条记录后,到从服务器上观察,对应的数据也会被修改,至此,我们已经完成了主从服务器的配置;
(责任编辑:IT) |