mysql主从复制

扩展:向上扩展、向外扩展。

  向上扩展是对服务器硬件的扩展,如从2颗cpu,8G内存扩展到8颗cpu,32G内存。

  向外扩展采用主从服务器的方式。主从服务器间的数据同步用主从复制。

  主从复制的实现:主服务器只负责数据的写入,从服务器负责数据的读出,这一步用读写分离器实现。当主服务器数据发生改变时会通知从服务器,从服务器的IO thread会向主服务器发起请求,主服务器会调用dump thread从二进制日志中读数据到从服务器的中继日志中,从服务器就会调用sql thread将数据同步到本地。

  除了主从服务器外还可以设置双主模型,即双方相互为主从服务器。但双主模型在A服务器以某字段修改另一字段,而B服务器又以另一字段修改某一字段时会发生两表不一致的情况。

  对数据库写性能的提升可采用数据库分片实现,将对表的写分散到多个服务器上。

主从服务器的配置:

  配置分主从服务器数据已经同步和不同步两种情况:

  已经同步:

    主服务器:修改配置文件(开启二进制日志、修改server-id)、授权从服务器的复制功能grant replication slave , replication client on *.* to ''@'' ;。

    从服务器:修改配置文件(开启中继日志、修改server-id、修改只读)、连接主服务器change master to master_host='' , master_user='' , master_password='' , master_log_files='' , master_log_pos='' ; 、开启线程start slave。

  未同步:首先需要将主服务器上的数据打包到从服务器,再按照已经同步的去操作。备份主服务器所有的数据到从服务器:mysqldump --all-databases --flush-logs --master-data=2 --lock-all-tables > all.sql ;

在读操作时怎样挑选服务器响应:

  1、round-robin(轮询)。

  2、取模:根据sql语句的hash值计算取哪台服务器,同一sql语句的hash值相同,就能保证服务器的缓存得到利用。

  3、用缓存服务器:请求到来时先去找缓存服务器,缓存服务器中有就直接返回,没有再去查询服务器,再均定是否缓存到缓存服务器上。memcached就是一个缓存服务器。缓存服务器只是起到缓存的作用,但是缓存什么由应用程序决定。

结构图:

怎样减轻主服务器的工作压力:

  采用中继服务器,master--relay(master-slave)--slave。中继服务器将存储引擎设为black-hole,使中继服务器只往中继日志和二进制日志中写数据。

读写分离:

  作用实现读写分离和读负载均衡。如果不加读写分离器,就需要在应用程序中实现读写分离。

半同步:

  就是在多台从服务器中找出一台和主服务数据写如保持同步。主服务等待从服务器数据写入后才返回。

  在主服务器和从服务器上分别需要安装插件。

  主服务器上:INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master';

  SHOW GLOBAL VARIABLES LIKE '%semi%';

  SET GLOBAL rpl_semi_sync_master_enabled=ON;

  SET GLOBAL rpl_semi_sync_master_timeout=1000;

  从服务器上:INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave;

  SET GLOBAL rpl_semi_sync_slave_enabled=ON;

  STOP SLAVE IO_THREAD;STAT SLAVE IO_THREAD;

复制过滤点的选择:主服务器 或者 从服务器。

  主服务器过滤:

    binlog_do_db白名单

    binlog_ignore_db黑名单

  从服务器过滤:

    replicate_do_db或者是replicate_do_table白名单

    replicate_ignore_db或者是replicate_ignore_table黑名单

    表过滤时还可以基于通配符:replicate_wild_do_table、replicate_wild_ignore_table。

上诉配置需写在mysqld的配置中。

基于行还是基于语句复制:

  基于语句:

    优点:数据量小,易于查看,适应性强;

    缺点:无法对触发器、储存过程/储存函数完成复制。

  基于行:语句的优点就是缺点,缺点就是优点。

从服务落后于主服务器:

  用show slave status查看second_behind_master的值,为0就表示没有落后。

   如果主从不一致可用如下办法解决:pt-table-sync工具。

 

  

 

posted @ 2015-08-19 09:49  codeZhu  阅读(271)  评论(0编辑  收藏  举报