MySQL性能优化专题篇---4/4(主从复制)

 

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;

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;

猜你喜欢

转载自blog.csdn.net/LB_Captain/article/details/114172022
今日推荐