1,就算MYSQL拆成了多个,也必须分出主和从,所有的写操作都必须要在主MYSQL 上完成;
2,所有的从MYSQL的数据都来自于(同步于)主MYSQL;
3,既然涉及到同步,那一定有延迟;有延迟,就一定可能在读的时候产生脏数据;所以,能够在从MYSQL上进行的读操作,一定对实时性和脏数据有一定容忍度的数据;比如,登陆日志,后台报表,首页统计信息来源;文章;资讯;SNS消息;
4,在我们的P2P中,做主从,绝大部分的读操作,都必须在主MYSQL上执行;只有(登陆日志,报表,满标一审列表,满标二审列表,用户的流水信息,充值明细,投标明细查询类的业务可以定位到从MYSQL);
5,[一定注意]:在MYSQL主从时,如果一个业务(service中的一个方法)中,如果既有R操作,又有W操作,因为W操作一定要在主MYSQL上,所以在一个事务中所有的数据来源都只能来自于一个MYSQL
主从备份,高可用
1,要完成主从同步,就必须让在Master上执行的所有的DML和DDL能够正确的在Salve上再执行一遍;MYSQL选择使用文件来记录SQL;
![](/qrcode.jpg)
2,要完成主从同步,第一个事情就是把在主服务器上的bin-log(二进制文件)打开,bin-log文件就可以记录在MYSQL上执行的所有的DML+DDL+TCL;
3,MYSQL使用被动注册的方式来让从MYSQL请求同步主MYSQL的binlog;原因:被动请求的方式,主的MYSQL不需要知道有哪些从的MYSQL,我额外添加/去掉从MYSQL服务器,对主MYSQL服务器的正常运行没有任何影响;
4,第二步,从MYSQL后台一个线程发送一个请求,到主服务器请求更新数据;最重要的数据(我这次请求,请求你bin-log的哪一行数据之后的数据)
5,第三步,主MYSQL后台一个线程接收到从MYSQL发送的请求,然后读取bin-log文件中指定的内容,并放在从MYSQL的请求响应中;
6,第四步,从MYSQL的请求带回同步的数据,然后写在从MYSQL中的relay-log(重做日志)中;relay-log中记录的就是从主MYSQL中请求回来的哪些SQL数据;
7,第五步,从MYSQL后台一个线程专门用于从relay-log中读取同步回来的SQL,并写入到从MYSQL中,完成同步;
8,MYSQL的主从同步是经过高度优化的,性能非常高;
主从配置:
配置主从:
1,添加一个新的MYSQL实例
1,复制mysql安装目录;
2,修改新mysql的相关配置(端口,安装目录,数据目录)
3,为新的mysql创建数据目录(从mysql的安装目录中拷贝data文件夹);
4,为新的mysql创建windows系统服务mysqld install MySQL2 --defaults-file="E:\MySQL\mysql_base\ini\my.ini"
5,检查创建的系统服务,并启动测试;
2,配置主从:
1,因为主数据库之前的内容没有放在binlog中,所以要同步这些数据,只能通过主数据库备份来完成;
2,配置主数据库;
1,server-id://给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号,在一个集群中,这个id是不能重复的;
2,log-bin=master-bin://开启二进制文件;后面设置的这个master-bin就是二进制文件的名字前缀(名字);
3,log-bin-index=master-bin.index//开启二进制文件的索引;名字一般为log-bin.index
3,启动主数据库,执行show master status命令;
只要能够看到正常的查询结果,说明主服务器已经配置完成;
结果中,注意两个重点:
1,File:二进制文件的文件名;
2,Position:当前文件已经记录到的位置;
4,配置从服务器;
1,server-id;
2,relay-log=slave-relay-bin
3,relay-log-index=slave-relay-bin.index
5,启动从服务器;
6,回复主数据库的备份;
7,让从数据库指定Master库:
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的哪一行数据之后的内容;
8,启动从MYSQL;