zoukankan      html  css  js  c++  java
  • Mysql主从复制原理及配置

    一、什么是主从复制

    至少两台数据库服务器,可以分别设置主服务器和从服务器,对主服务器的任何操作更新都会同步到从服务器上

    二、实现原理

    mysql中有一种日志,叫做bin日志(二进制日志),会记录下所有修改过数据库的sql语句。主从复制的原理实际是多台服务器都开启bin日志,然后主服务器会把执行过的sql语句记录到bin日志中,之后从服务器读取这个bin日志,把该日志的内容保存到自己中继日志里面,从服务器再把中继日志中记录的sql语句同样的执行一遍。这样从服务器上的数据就和主服务器相同了。参照图1和图2

    图(1)                            图(2) 

    实现的技术是:用户的授权,和log-bin日志的开启。

    问题:如何解决主从同步过程中的延迟问题?

    解答:可以在主从同步的过程中加一家缓存服务器,把刚更新的数据暂时保存在缓存服务器中。

    log-bin日志

    1、如何开启log-bin日志

    打开my.ini的配置文件

    Linuxmy.cnf配置文件中进行配置

    2、如何 查看log-bin日志里面的内容。

    使用一个命令,

    mysqlbinlog  --no-defaults 日志的文件名及路径

    3log-bin日志相关的一些命令操作

    前提:数据mysql相关的命令

    flush logs 产生一个新的log-bin日志

     reset master :清空以前的log-bin日志,并产生一个新的log-bin日志   show master status; 查看最新的一个log-bin日志,包括最新的pos位置。

    4、使用bin-log日志完成一个案例,恢复数据的一个案例

    步骤:

    1)新建一张表

    create table nihao(id int);

    2flush logs 产生一个新的log-bin日志文件

    insert into nihao values(1000);

    insert into nihao values(2000);

    insert into nihao values(3000);

    3flush logs产生一个新的log-bin日志文件。

    4delete from nihao

    5)要求恢复数据

    比如一个家公司,在上午9:00备份了一次数据。到9:30时,由于员工的误操作,则把所有的数据都给删除了。要求要恢复数据到9:30.

    思路:打开log-bin日志文件,进行分析。查找insert语句的pos位置。根据pos位置来恢复数据

      第一步,查看当前记录日志文件的信息

     

    第二步,查看操作的SQL语句的位置

    第三步,使用以下命令进行还原

     mysqlbinlog   --no-defaults 日志文件 --start-pos=”开始的pos” --stop-pos=’结束的pos’  |  mysql  -uroot  -proot  test

     

    、主从配置

    说明:在同步前,要同步的数据库在两个数据库服务器中都必须存在,两个数据库应该保持一致。开启主从同步后,主服务器的写操作都会同步到从服务器中。

    1、配置主服务器:

    1)主和从服务器都要开启log-bin日志,每台服务器设置一个唯一的server-id的值。并重启服务器。

    主服务器:IP 192.168.1.114

    2)要给从服务器授权一个用户,该用户授予复制权限。

    3)要查看主服务器里面log-bin日志的名字和pos位置。(停止对主服务器的操作暂时不往里面做更新操作)  

      show master status;

    2、配置从服务器

    从服务器:IP  192.168.1.252

    (1)执行stop slave停止从服务器: 

       stop slave;

    2)具体的配置:

    change master to master_host=主服务器的ip,master_user=授权的用户名,master_password=授权的密码,master_log_file=log-bin日志文件的名称,master_log_pos=pos位置;

    3)开启从服务器

      start slave;

    (4)查看从服务器的状态:

      show slave status;

    Slave_IO_Running:Yes

    此进程负责服务器从主服务器上读取binlog 日志,并写入从服务器上的中继日志。 

    Slave_SQL_Running:Yes

    此进程负责读取并且执行中继日志中的binlog日志, 

    注:以上两个都为yes则表明成功,只要其中一个进程的状态是no,则表示复制进程停止,错误原因可以从”last_error”字段的值中看到。

    演示效果:

      主服务器插入数据,可以在从服务器上同步

      主服务器

       从服务器

    3、如何撤销从服务器

    1stop slave

    2reset slave all

      从服务器

    主服务器

    五、读写分离实现

    在程序层次进行设计

    class  mysql{

      $dbm=主服务器 

      $dbs1=从服务器 

      $dbs2=从服务器 

      public function query(){

         query里面进行语句判断,分析连接不同的mysql服务器。 

       如果是查询则随机连接两台从服务器,如果是修改操作,则连接主服务器

       }

    }

    tp框架支持读写分离;

        'DB_DEPLOY_TYPE'=>1,//分布式数据库支持

        'DB_TYPE'               => 'mysql',     // 数据库类型

        'DB_HOST'               => 'localhost,192.168.3.250', // 服务器地址

        'DB_NAME'               => 'php,php',          // 数据库名

        'DB_USER'               => 'root,xiaogang',      // 用户名

        'DB_PWD'                => 'root,1234',          // 密码

        'DB_PORT'               => '3306',        // 端口

        'DB_PREFIX'             => '',

        'DB_RW_SEPARATE'=>true,//支持读写分离

    说明: 以上配置为读写分离操作,如果需要做到读写分离、主从复制,还必须手动配置开启主从复制模式

    参考文档:http://blog.csdn.net/goustzhu/article/details/9339621   主从、主主、半同步复制     http://database.51cto.com/art/201505/475376_all.htm  集群

  • 相关阅读:
    计算机网络面试小知识总结(转载)
    williamisnotme@gmail.com
    jdk1,8 HashMap
    Mybatis 为什么不要用二级缓存
    CPU,寄存器,一缓二缓.... RAM ROM 外部存储器等简介
    一级缓存,二级缓存
    mock单测
    java8函数式编程(转载)
    volatile解析
    JVM 技术分享(初级)
  • 原文地址:https://www.cnblogs.com/houzhanzhan/p/7341556.html
Copyright © 2011-2022 走看看