MySQL数据库主从复制

1.为什么配置数据库主从复制

主从复制最主要的原因是提高数据库的访问性能,将读和写分开,降低单台宿主机的高消耗和资源竞争激烈程度;同时,多台从数据库能够提高读QPS性能。

2. 数据复制原理

Master将改变记录到二进制日志(binary log)中,Slave将Master的二进制日志文件拷贝到它的中继日志(relay log),Slave重做中继日志(relay log)中的事件。那么,Master的变化,Slave也会变化,这样就是所谓的MYSQL的复制,即MYSQL replication。

值得注意的是,通过上面的机制,可以保证Master和Slave的数据库数据一致,但是时间上肯定有延迟,即Slave的数据是滞后的。

3. 主从复制方式

1、同步复制

同步复制,即master的变化,必须等待slave-1,slave-2,…,slave-n完成后才能返回。这样,显然不可取,也不是MYSQL复制的默认设置。比如,在WEB前端页面上,用户增加了条记录,需要等待很长时间。

2、异步复制

异步复制,master只需要完成自己的数据库操作即可。至于slaves是否收到二进制日志,是否完成操作,不用关心。MYSQL的默认设置。

3、半同步复制

半同步复制,master只保证slaves中的一个操作成功,就返回,其他slave不管。这个功能,是由google为MYSQL引入的。

4. 主从复制分析

  1. 问题1:master的写操作,slave被动的进行一样的操作,保持数据一致性,那么slave是否可以主动的进行写操作?
    答:假设slave可以主动的进行写操作,slave又无法通知master,这样就导致了master和slave数据不一致了。因此slave不应该进行写操作,至少是slave上涉及到复制的数据库不可以写。实际上,这里已经揭示了读写分离的概念。

  2. 问题2:主从复制中,可以有N个slave,slave的作用?
    答:一方面,进行数据备份,防止单点故障,保证高可用性。另一方面,分担负载,提高查询性能。

  3. 问题3:主从复制中有master,slave1,slave2,…等等这么多MYSQL数据库,那比如一个JAVA WEB应用到底应该连接哪个数据库?
    答:一般,insert/delete/update这些更新数据库的操作,用master进行操作,select用slave进行操作。或者,找一个组件用它来完成MYSQL的代理,实现SQL语句的路由。这就是所谓的MYSQL READ WRITE SPLITE,MYSQL的读写分离。

  4. 问题4:当master的二进制日志每产生一个事件,都需要发往slave,如果我们有N个slave,那是发N次,还是只发一次?
    答:如果只发一次,发给了slave-1,那slave-2,slave-3,…它们怎么办?显然,应该发N次。实际上,在MYSQL master内部,维护N个线程,每一个线程负责将二进制日志文件发往对应的slave。master既要负责写操作,还的维护N个线程,负担会很重。可以这样,slave-1是master的从,slave-1又是slave-2,slave-3,…的主,同时slave-1不再负责select。 slave-1将master的复制线程的负担,转移到自己的身上。这就是所谓的多级复制的概念。

5. mysql主从复制配置

1、安装mysql

需要注意修改my.cnf的文件权限就Ok,命令:chmod 644 my.cnf。

2、配置master主服务器

  在Master MySQL上创建一个用户‘repl’,并允许其他Slave服务器可以通过远程访问Master,通过该用户 读取二进制日志,实现数据同步。

  1. //创建新用户  
  2. mysql>create user repl;   
  3. //repl用户必须具有REPLICATION SLAVE权限.说明一下192.168.0.%,是指明repl用户所在服务器,当然你也可以指定固定Ip。  
  4. mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%' IDENTIFIED BY 'mysql';  

      找到MySQL安装文件夹修改my.Ini文件,在[mysqld]下面增加下面几行代码

  1. server-id=1   //给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号  
  2. log-bin=master-bin  
  3. log-bin-index=master-bin.index  

  重启mysql服务;

3、配置slave服务器

  找到MySQL安装文件夹修改my.ini文件,在[mysqld]下面增加下面几行代码,重启MySQL服务。

  1. [mysqld]  
  2. server-id=2  
  3. relay-log-index=slave-relay-bin.index  
  4. relay-log=slave-relay-bin   

链接master服务器

  1. change master to master_host='192.168.0.104', //Master 服务器Ip  
  2. master_port=3306,  
  3. master_user='repl',  
  4. master_password='mysql',   
  5. master_log_file='master-bin.000001',//Master服务器产生的日志  
  6. master_log_pos=0;  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值