精华内容
下载资源
问答
  • Hadoop-2.2.0版本,虚拟机下建的三个centos系统:masterslave1,slave2.里边的配置文件都已经配好,只需要简单改下id,即可使用。不需要在进行解析。
  • ActiveMQ 集群中JDBC Master Slave + Broker Cluster的整合
  • proxysql-basics-master-slave:为MasterSlave拓扑设置ProxySQL的基本教程
  • 本篇文章是对MySQL数据库复制Master-Slave架构进行了详细的分析介绍,需要的朋友参考下
  • C#的Modbus Master Slave

    热门讨论 2014-03-07 11:21:02
    C#写的Modbus协议主从站类库,包含源代码。实际使用过。适用于工业控制软件开发。
  • sql master slave

    千次阅读 2018-11-25 21:26:29
    1.master vi /etc/my.cnf [mysqld] log-bin=mysqlbin-log server-id=17 grant replication slave on *.* to 'slave'@'%' identyfied by '123456'; show master status; 2.slave vi /etc/my.cnf server-id=1....
    1.master
    
    vi /etc/my.cnf
    
    [mysqld]
    log-bin=mysqlbin-log
    server-id=17
    
    
    grant replication slave on *.* to 'slave'@'%' identyfied by '123456';
    show master status;
    
    
    
    2.slave
    vi /etc/my.cnf
    
    server-id=18
    
    
    change master to master_host='',master_user='slave',master_password='123456',master_log_file='',master_log_pos='';
    
    start slave;
    show slave status\G;

     

    展开全文
  • 服务器MasterslaveMaster为主服务器,slave为从服务器,初始状态时,Masterslave中的数据信息相同,当Master中的数据发生变化时,slave也跟着发生相应的变化,使得masterslave的数据信息同步,达到备份的...

    1 复制概述

          Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

    请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。

    1.1 mysql支持的复制类型:

      (1):基于语句的复制:  在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。  
                一旦发现没法精确复制时,   会自动选着基于行的复制。    
      (2):基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持
      (3):混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

     1.2 . 复制解决的问题

             MySQL复制技术有以下一些特点:
             (1)    数据分布 (Data distribution )
             (2)    负载平衡(load balancing)
             (3)    备份(Backups) 
             (4)    高可用性和容错行 High availability and failover 

      1.3 复制如何工作 

            整体上来说,复制有3个步骤:   

           (1)    master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
           (2)    slave将master的binary log events拷贝到它的中继日志(relay log);
            (3)    slave重做中继日志中的事件,将改变反映它自己的数据。

    下图描述了复制的过程:

                                      

              该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。
           下一步就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
           SQL slave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。
            此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。

     2 .复制配置

    有两台MySQL数据库服务器Master和slave,Master为主服务器,slave为从服务器,初始状态时,Master和slave中的数据信息相同,当Master中的数据发生变化时,slave也跟着发生相应的变化,使得master和slave的数据信息同步,达到备份的目的。

    要点:
    负责在主、从服务器传输各种修改动作的媒介是主服务器的二进制变更日志,这个日志记载着需要传输给从服务器的各种修改动作。因此,主服务器必须激活二进制日志功能。从服务器必须具备足以让它连接主服务器并请求主服务器把二进制变更日志传输给它的权限。
            
    环境:
    Master和slave的MySQL数据库版本同为5.0.18
    操作系统:unbuntu 11.10
    IP地址:10.100.0.100

    2.1、创建复制帐号

    1、在Master的数据库中建立一个备份帐户:每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE权限。用户名的密码都会存储在文本文件master.info中

    命令如下:
    mysql > GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* 
    TO backup@’10.100.0.200’ 
    IDENTIFIED BY ‘1234’;

    建立一个帐户backup,并且只能允许从10.100.0.200这个地址上来登陆,密码是1234。

    (如果因为mysql版本新旧密码算法不同,可以设置:set password for 'backup'@'10.100.0.200'=old_password('1234'))

    2.2、拷贝数据

    (假如是你完全新安装mysql主从服务器,这个一步就不需要。因为新安装的master和slave有相同的数据

    关停Master服务器,将Master中的数据拷贝到B服务器中,使得Master和slave中的数据同步,并且确保在全部设置操作结束前,禁止在Master和slave服务器中进行写操作,使得两数据库中的数据一定要相同!

    2.3、配置master

    接下来对master进行配置,包括打开二进制日志,指定唯一的servr ID。例如,在配置文件加入如下值:

    server-id=1
    log-bin=mysql-bin

    server-id:为主服务器A的ID值
    log-bin:二进制变更日值

    重启master,运行SHOW MASTER STATUS,输出如下:


    2.4、配置slave

    Slave的配置与master类似,你同样需要重启slave的MySQL。如下:
    log_bin           = mysql-bin
    server_id         = 2
    relay_log         = mysql-relay-bin
    log_slave_updates = 1
    read_only         = 1
    server_id是必须的,而且唯一。slave没有必要开启二进制日志,但是在一些情况下,必须设置,例如,如果slave为其它slave的master,必须设置bin_log。在这里,我们开启了二进制日志,而且显示的命名(默认名称为hostname,但是,如果hostname改变则会出现问题)。
    relay_log配置中继日志,log_slave_updates表示slave将复制事件写进自己的二进制日志(后面会看到它的用处)。
    有些人开启了slave的二进制日志,却没有设置log_slave_updates,然后查看slave的数据是否改变,这是一种错误的配置。所以,尽量使用read_only,它防止改变数据(除了特殊的线程)。但是,read_only并是很实用,特别是那些需要在slave上创建表的应用。

    2.5、启动slave

    接下来就是让slave连接master,并开始重做master二进制日志中的事件。你不应该用配置文件进行该操作,而应该使用CHANGE MASTER TO语句,该语句可以完全取代对配置文件的修改,而且它可以为slave指定不同的master,而不需要停止服务器。如下:

    mysql> CHANGE MASTER TO MASTER_HOST='server1',

        -> MASTER_USER='repl',

        -> MASTER_PASSWORD='p4ssword',

        -> MASTER_LOG_FILE='mysql-bin.000001',

        -> MASTER_LOG_POS=0;

    MASTER_LOG_POS的值为0,因为它是日志的开始位置。

    你可以用SHOW SLAVE STATUS语句查看slave的设置是否正确:

    mysql> SHOW SLAVE STATUS\G

    *************************** 1. row ***************************

                 Slave_IO_State:

                    Master_Host: server1

                    Master_User: repl

                    Master_Port: 3306

                  Connect_Retry: 60

                Master_Log_File: mysql-bin.000001

            Read_Master_Log_Pos: 4

                 Relay_Log_File: mysql-relay-bin.000001

                  Relay_Log_Pos: 4

          Relay_Master_Log_File: mysql-bin.000001

               Slave_IO_Running: No

              Slave_SQL_Running: No

                                 ...omitted...

          Seconds_Behind_Master: NULL


    Slave_IO_State, Slave_IO_Running, Slave_SQL_Running是No

    表明slave还没有开始复制过程。日志的位置为4而不是0,这是因为0只是日志文件的开始位置,并不是日志位置。实际上,MySQL知道的第一个事件的位置是4

    为了开始复制,你可以运行:

    mysql> START SLAVE;

    运行SHOW SLAVE STATUS查看输出结果:

    mysql> SHOW SLAVE STATUS\G

    *************************** 1. row ***************************

                 Slave_IO_State: Waiting for master to send event

                    Master_Host: server1

                    Master_User: repl

                    Master_Port: 3306

                  Connect_Retry: 60

                Master_Log_File: mysql-bin.000001

            Read_Master_Log_Pos: 164

                 Relay_Log_File: mysql-relay-bin.000001

                  Relay_Log_Pos: 164

          Relay_Master_Log_File: mysql-bin.000001

               Slave_IO_Running: Yes

              Slave_SQL_Running: Yes

                                 ...omitted...

          Seconds_Behind_Master: 0


    在这里主要是看:
                       Slave_IO_Running=Yes
                       Slave_SQL_Running=Yes

    slaveI/OSQL线程都已经开始运行,而且Seconds_Behind_Master不再是NULL。日志的位置增加了,意味着一些事件被获取并执行了。如果你在master上进行修改,你可以在slave上看到各种日志文件的位置的变化,同样,你也可以看到数据库中数据的变化。

    你可查看masterslave上线程的状态。在master上,你可以看到slaveI/O线程创建的连接:

    在master上输入show processlist\G;

    mysql> show processlist \G

    *************************** 1. row ***************************

         Id: 1

       User: root

       Host: localhost:2096

         db: test

    Command: Query

       Time: 0

     State: NULL

       Info: show processlist

    *************************** 2. row ***************************

         Id: 2

       User: repl

       Host: localhost:2144

         db: NULL

    Command: Binlog Dump

       Time: 1838

     State: Has sent all binlog to slave; waiting for binlog to be updated

       Info: NULL

    2 rows in set (0.00 sec)

    行2为处理slave的I/O线程的连接。

    在slave服务器上运行该语句:

    mysql> show processlist \G

    *************************** 1. row ***************************

         Id: 1

       User: system user

       Host:

         db: NULL

    Command: Connect

       Time: 2291

     State: Waiting for master to send event

       Info: NULL

    *************************** 2. row ***************************

         Id: 2

       User: system user

       Host:

         db: NULL

    Command: Connect

       Time: 1852

     State: Has read all relay log; waiting for the slave I/O thread to update it

       Info: NULL

    *************************** 3. row ***************************

         Id: 5

       User: root

       Host: localhost:2152

         db: test

    Command: Query

       Time: 0

     State: NULL

       Info: show processlist

    3 rows in set (0.00 sec)

    行1为I/O线程状态,行2为SQL线程状态。

    2.5、添加新slave服务器

    假如master已经运行很久了,想对新安装的slave进行数据同步,甚至它没有master的数据。
    此时,有几种方法可以使slave从另一个服务开始,例如,从master拷贝数据,从另一个slave克隆,从最近的备份开始一个slave。Slave与master同步时,需要三样东西:
    (1)master的某个时刻的数据快照;
    (2)master当前的日志文件、以及生成快照时的字节偏移。这两个值可以叫做日志文件坐标(log file coordinate),因为它们确定了一个二进制日志的位置,你可以用SHOW MASTER STATUS命令找到日志文件的坐标;
    (3)master的二进制日志文件。

    可以通过以下几中方法来克隆一个slave:
    (1)    冷拷贝(cold copy)
    停止master,将master的文件拷贝到slave;然后重启master。缺点很明显。
    (2)    热拷贝(warm copy)
    如果你仅使用MyISAM表,你可以使用mysqlhotcopy拷贝,即使服务器正在运行。
    (3)    使用mysqldump
    使用mysqldump来得到一个数据快照可分为以下几步:
    <1>锁表:如果你还没有锁表,你应该对表加锁,防止其它连接修改数据库,否则,你得到的数据可以是不一致的。如下:
    mysql> FLUSH TABLES WITH READ LOCK;
    <2>在另一个连接用mysqldump创建一个你想进行复制的数据库的转储:
    shell> mysqldump --all-databases --lock-all-tables >dbdump.db
    <3>对表释放锁。
    mysql> UNLOCK TABLES;

    3、深入了解复制

    已经讨论了关于复制的一些基本东西,下面深入讨论一下复制。

    3.1、基于语句的复制(Statement-Based Replication)

         MySQL 5.0及之前的版本仅支持基于语句的复制(也叫做逻辑复制,logical replication),这在数据库并不常见。master记录下改变数据的查询,然后,slave从中继日志中读取事件,并执行它,这些SQL语句与master执行的语句一样。
    这种方式的优点就是实现简单。此外,基于语句的复制的二进制日志可以很好的进行压缩,而且日志的数据量也较小,占用带宽少——例如,一个更新GB的数据的查询仅需要几十个字节的二进制日志。而mysqlbinlog对于基于语句的日志处理十分方便。
     
          但是,基于语句的复制并不是像它看起来那么简单,
    因为一些查询语句依赖于master的特定条件,例如,master与slave可能有不同的时间。所以, MySQL的二进制日志的格式不仅仅是查询语句,还包括一些元数据信息,例如,当前的时间戳。即使如此,还是有一些语句,比如,CURRENT USER函数,不能正确的进行复制。此外,存储过程和触发器也是一个问题。
         另外一个问题就是基于语句的复制必须是串行化的。这要求大量特殊的代码,配置,例如InnoDB的next-key锁等。并不是所有的存储引擎都支持基于语句的复制。

    3.2、基于记录的复制(Row-Based Replication)

          MySQL增加基于记录的复制,在二进制日志中记录下实际数据的改变,这与其它一些DBMS的实现方式类似。这种方式有优点,也有缺点。优点就是可以对任何语句都能正确工作,一些语句的效率更高。 主要的缺点就是二进制日志可能会很大,而且不直观,所以,你不能使用mysqlbinlog来查看二进制日志。
    对于一些语句,基于记录的复制能够更有效的工作,如:
    mysql> INSERT INTO summary_table(col1, col2, sum_col3)
        -> SELECT col1, col2, sum(col3)
        -> FROM enormous_table
        -> GROUP BY col1, col2;
         假设,只有三种唯一的col1和col2的组合,但是,该查询会扫描原表的许多行,却仅返回三条记录。此时,基于记录的复制效率更高。
        另一方面,下面的语句,基于语句的复制更有效:
     mysql> UPDATE enormous_table SET col1 = 0;
    此时使用基于记录的复制代价会非常高。由于两种方式不能对所有情况都能很好的处理,所以,MySQL 5.1支持在基于语句的复制和基于记录的复制之前动态交换。你可以通过设置session变量binlog_format来进行控制。

    3.3、复制相关的文件

    除了二进制日志和中继日志文件外,还有其它一些与复制相关的文件。如下:

    (1)mysql-bin.index

    服务器一旦开启二进制日志,会产生一个与二日志文件同名,但是以.index结尾的文件。它用于跟踪磁盘上存在哪些二进制日志文件。MySQL用它来定位二进制日志文件。它的内容如下(我的机器上):

     (2)mysql-relay-bin.index

    该文件的功能与mysql-bin.index类似,但是它是针对中继日志,而不是二进制日志。内容如下:
    .\mysql-02-relay-bin.000017
    .\mysql-02-relay-bin.000018

    (3)master.info

    保存master的相关信息。不要删除它,否则,slave重启后不能连接master。内容如下(我的机器上):

     I/O线程更新master.info文件,内容如下(我的机器上):

     

    .\mysql-02-relay-bin.000019

    254

    mysql-01-bin.000010

    286

    0

    52813

     (4)relay-log.info 

    包含slave中当前二进制日志和中继日志的信息。

    3.4、发送复制事件到其它slave

    当设置log_slave_updates时,你可以让slave扮演其它slave的master。此时,slave把SQL线程执行的事件写进行自己的二进制日志(binary log),然后,它的slave可以获取这些事件并执行它。如下:

     

    3.5、复制过滤(Replication Filters)

    复制过滤可以让你只复制服务器中的一部分数据,有两种复制过滤:在master上过滤二进制日志中的事件;在slave上过滤中继日志中的事件。如下:


    4、复制的常用拓扑结构

    复制的体系结构有以下一些基本原则:
    (1)    每个slave只能有一个master;
    (2)    每个slave只能有一个唯一的服务器ID;
    (3)    每个master可以有很多slave;
    (4)    如果你设置log_slave_updates,slave可以是其它slave的master,从而扩散master的更新。

    MySQL不支持多主服务器复制(Multimaster Replication)——即一个slave可以有多个master。但是,通过一些简单的组合,我们却可以建立灵活而强大的复制体系结构。

    4.1、单一master和多slave

    由一个master和一个slave组成复制系统是最简单的情况。Slave之间并不相互通信,只能与master进行通信。如下:

     如果写操作较少,而读操作很时,可以采取这种结构。你可以将读操作分布到其它的slave,从而减小master的压力。但是,当slave增加到一定数量时,slave对master的负载以及网络带宽都会成为一个严重的问题。
    这种结构虽然简单,但是,它却非常灵活,足够满足大多数应用需求。一些建议:
    (1)    不同的slave扮演不同的作用(例如使用不同的索引,或者不同的存储引擎);
    (2)    用一个slave作为备用master,只进行复制;
    (3)    用一个远程的slave,用于灾难恢复;


    4.2、主动模式的Master-Master(Master-Master in Active-Active Mode)

    Master-Master复制的两台服务器,既是master,又是另一台服务器的slave。如图:

    主动的Master-Master复制有一些特殊的用处。例如,地理上分布的两个部分都需要自己的可写的数据副本。这种结构最大的问题就是更新冲突。假设一个表只有一行(一列)的数据,其值为1,如果两个服务器分别同时执行如下语句:
    在第一个服务器上执行:
    mysql> UPDATE tbl SET col=col + 1;
    在第二个服务器上执行:
    mysql> UPDATE tbl SET col=col * 2;
    那么结果是多少呢?一台服务器是4,另一个服务器是3,但是,这并不会产生错误。
    实际上,MySQL并不支持其它一些DBMS支持的多主服务器复制(Multimaster Replication),这是MySQL的复制功能很大的一个限制(多主服务器的难点在于解决更新冲突),但是,如果你实在有这种需求,你可以采用MySQL Cluster,以及将Cluster和Replication结合起来,可以建立强大的高性能的数据库平台。但是,可以通过其它一些方式来模拟这种多主服务器的复制。

    4.3、主动-被动模式的Master-Master(Master-Master in Active-Passive Mode)

    这是master-master结构变化而来的,它避免了M-M的缺点,实际上,这是一种具有容错和高可用性的系统。它的不同点在于其中一个服务只能进行只读操作。如图:

     4.4、带从服务器的Master-Master结构(Master-Master with Slaves)

    这种结构的优点就是提供了冗余。在地理上分布的复制结构,它不存在单一节点故障问题,而且还可以将读密集型的请求放到slave上。


    展开全文
  • CentOS7x64配置MYSQL5.7 Master Slave主从复制

    @1首先修改mysql配置文件  /etc/my.cnf

    #ID 必须唯一
    server-id=1 
    #二进制文件名称前缀,生成的文件mysql-bin.000001,mysql-bin.000002
    log-bin=mysql-bin 
    #记录目前有哪些mysql-bin文件 SHOW MASTER STATUS;
    log-bin-index=master-bin.index 
    #有更新是否立即同步到日志,性能会低,但不会丢数据。
    innodb_flush_log_at_trx_commit=1 
    sync_binlog=1
    #二进制日志自动删除的天数。默认值为0,表示“没有自动删除”
    expire_logs_days=10
    #二进制文件大小,操作大小生成新文件存储(最小4096byte最大1073741824(1G)默认
    max_binlog_size=1073741824
    #同步哪些数据库
    binlog-do-db=template 
    #二进制复制方式
    binlog_format=ROW
    

    #控制当服务器无法写入二进制日志时发生的情况,这可能导致主服务器日志变得不一致,从服务器会失去同步。

    #IGNORE_ERROR忽略错误继续进行,ABORT_SERVER当发生错误不能写入二进制日志时,停止日志并关闭服务。

    binlog_error_action=ABORT_SERVER

    ##下面配置不是必须的
    #数据库编码
    character-set-server=utf8
    #忽略表明大小写
    lower_case_table_names=1
    #开启慢查询日志,超过10秒则记录到日志
    slow_query_log=1
    long_query_time=10.000000
    #默认值:128M 专用MySQL服务器设置的大小: 操作系统内存的70%-80%最佳。
    #并不是设置的越大越好。设置的过大,会导致system的swap空间被占用,导致操作系统变慢,从而减低sql查询的效率。
    innodb_buffer_pool_size=500M



    @2在master上创建用户,用于slave连接登录

    mysql> CREATE USER 'repl'@'192.168.80.%' IDENTIFIED BY 'MyPWD123!@#';
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.80.%';
    repl用户必须具有REPLICATION SLAVE权限,除此之外没有必要添加不必要的权限,密码为MyPWD123!@#。
    192.168.80.%,这个配置是指明repl用户所在服务器,这里%是通配符,表示192.168.80.0网段的Server都可以使用repl用户登陆主服务器,当然你也可以指定固定Ip。


    @3在master上备份当前数据

    mysqldump -u root -p --databases mytest --master-data > dbdump.db

    --master-data 这个参数比较重要
    1:首先在备份之前它会调用 FLUSH TABLES WITH READ LOCK 锁住数据库,数据库就不能进行写操作了。
    2:它会在备份文件最上面记录 CHANGE MASTER TO MASTER_LOG_FILE=' mysql-bin.000002', MASTER_LOG_POS= 154,红色的可能与你测试的不一样。
    它记录了master服务器二进制日志的文件名与位置,也就是当前数据截止的位置,这样当slave启动以后,就从这个点开始复制数据。
    3:然后备份数据到文件。
    4:最后释放锁 UNLOCK TABLES;

    mysql > FLUSH TABLES WITH READ LOCK;
    mysql > SHOW MASTER STATUS;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000003 | 73       | test         | manual,mysql     |
    +------------------+----------+--------------+------------------+
    mysql > UNLOCK TABLES;
    上诉命令可以查看master当前日志的名称与位置,在启动slave时需要用到。


    @4把数据备份拷贝到slave

    scp /var/lib/mysql/dbdump.db root@192.168.80.120:/home/mysqldata/

    ================MASTER配置完成===================


    @5配置slave  /etc/my.cnf

    #唯一ID
    server-id=2
    #中继日志
    relay-log=slave-relay-bin
    relay-log-index=slave-relay-bin.index
    #二进制日志自动删除的天数。默认值为0,表示“没有自动删除”
    expire_logs_days=10
    relay_log_recovery=ON
    relay_log_info_repository=TABLE
    


    @6在slave上恢复master当前的数据。

    mysql -u root -p mytest < /home/mysqldata/dbdump.db 

    然后执行命令:

    CHANGE MASTER TO
    MASTER_HOST='192.168.80.111',
    MASTER_USER='repl',
    MASTER_PASSWORD='Sql2008!@#',
    MASTER_LOG_FILE='mysql-bin.000002',
    MASTER_LOG_POS=154;

    MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=154  注意这里一定不能写错了,

    这个内容可以在dbdump.db的开头找到,记录着master备份时当前二进制文件的位置,slave在恢复数据后就从这个点开始复制数据。

    开启slave同步

    mysql> START SLAVE;


    参考 

    http://coolnull.com/154.html

    http://blog.51yip.com/mysql/1042.html

    http://blog.csdn.net/wyzxg/article/details/7412777

    http://blog.csdn.net/JesseYoung/article/details/40979129 MySQL运维

    http://www.ilanni.com/?p=7816 

    http://www.ilanni.com/?p=7911 MySQL-binlog备份数据

    展开全文
  • RocketMQ原理解析-broker 4.HA & master slave

    千次阅读 2014-09-09 00:44:04
    在broker启动的时候BrokerController如果是slave,配置了master地址更新,没有配置所有broker会想namesrv注册,从namesrv获取haServerAddr,然后更新到HAClient   当HAClient的MasterAddress不为空的时候(因为...

    在broker启动的时候BrokerController如果是slave,配置了master地址更新,没有配置所有broker会想namesrv注册,从namesrv获取haServerAddr,然后更新到HAClient

     

    当HAClient的MasterAddress不为空的时候(因为broker  master和slave都构建了HAClient)会主动连接master获取SocketChannel

     

    Master监听Slave请求的端口,默认为服务端口+1

    接收slave上传的offset long类型

    int pos = this.byteBufferRead.position() -(this.byteBufferRead.position() % 8)  //没有理解意图

    long readOffset =this.byteBufferRead.getLong(pos - 8);

    this.processPostion = pos;

     

    主从复制从哪里开始复制:如果请求时0 ,从最后一个文件开始复制

            

    Slave启动的时候brokerController开启定时任务定时拷贝master的配置信息

    SlaveSynchronize类代表slave从master同步信息(非消息)

             syncTopicConfig       同步topic的配置信息

             syncConsumerOffset       同步消费进度

             syncDelayOffset                同步定时进度

             syncSubcriptionGroupConfig  同步订阅组配7F6E

     

    HaService类实现了HA服务,负责同步双写,异步复制功能, 这个类master和slave的broker都会实例化,

    Master通过AcceptSocketService监听slave的连接,每个masterslave连接都会构建一个HAConnection对象搭建他们之间的桥梁,对于一个master多slave部署结构的会有多个HAConnection实例,

     

    Master构建HAConnection时会构建向slave写入数据服务线程对象WriteSocketService对象和读取Slave反馈服务线程对象ReadSocketService

     

    WriteSocketService

             向slave同步commitLog数据线程,

    slaveRequestOffset是每次slave同步完数据都会向master发送一个ack表示下次同步的数据的offset。

    如果slave是第一次启动的话slaveRequestOffset=0, master会从最近那个commitLog文件开始同步。(如果要把master上的所有commitLog文件同步到slave的话, 把masterOffset值赋为minOffset)


    向socket写入同步数据: 传输数据协议<Phy Offset> <Body Size> <Body Data>

     


    ReadSocketService:

    4.2 ReadSocketService

             读取slave通过HAClient向master返回同步commitLog的物理偏移量phyOffset值

             通知前端线程,如果是同步复制的话通知是否复制成功

     

    Slave 通过HAClient建立与master的连接, 

    来定时汇报slave最大物理offset,默认5秒汇报一次也代表了跟master之间的心跳检测

    读取master向slave写入commitlog的数据, master向slave写入数据的格式是


    Slave初始化DefaultMessageStore时候会构建ReputMessageService服务线程并在启动存储服务的start方法中被启动

    ReputMessageService的作用是slave从物理队列(由commitlog文件构成的MapedFileQueue)加载数据,并分发到各个逻辑队列

     

    HA同步复制, 当msg写入master的commitlog文件后,判断maser的角色如果是同步双写SYNC_MASTER, 等待master同步到slave在返回结果

           

        

    3 HA异步复制


     

    展开全文
  • modbus tcp masterslave 谨慎下载 you bug
  • amba ahb2 协议vip,包括masterslave
  • i2c_master_slave_core_latest

    2019-03-05 11:08:46
    opencores里的关于I2C控制器的masterslave接口控制器,带有相关的RTL代码,spec文档和验证代码
  • 解决单点故障:JDBC Master Slave

    千次阅读 2012-09-21 15:46:11
    解决单点故障:JDBC Master Slave 3.1 概述 1. 配置上,不存在MasterSlave,所有Broder的配置基本是一样的 2. 多个共享数据源的Broker构成JDBC Master Slave 3. 给每个Broker取个名字 4. 首先抢到资源...
  • mongodb master slave常用命令

    千次阅读 2012-12-10 11:15:03
    1. 在slave查看同步状态     db.printSlaveReplicationInfo()   2. 如果长时间没有同步上master   重启服务,   或 &gt; use admin &gt; db.runCommand({resync: 1})   ...
  • verilog实现axis接口读写I2C,代码中包含master/slave两部分 master: axis to I2C slave : I2C to axis
  • AXI4_master_slave源码对应分析 AXI4_master_slave源码对应分析 AXI4_master_slave源码对应分析
  • 蓝牙如何区分MasterSlave

    千次阅读 2019-01-14 17:49:53
    主动搜索一方处于Discover状态,以较快的速度进行跳频,是发起方,为Master,负责维护Hopping Pattern; 被搜索一方处于Discoverable状态,以较慢的速度跳频,是接收方,为Slave。 LE: 发送广播的一方:发送...
  • Windows下搭建MySQL Master Slave 一、背景 服务器上放了很多MySQL数据库,为了安全,现在需要做Master/Slave方案,因为操作系统是Window的,所以没有办法使用keepalived这个HA工具,但是我们可以接受人工进行切换...
  • mySQL master slave同步修复

    千次阅读 2009-08-26 23:13:00
    搭建好master slave模式之后,有时会出现一些问题,比如同步不过去,下面整理了一些修复方法,逐步补充…… 最常见的问题是同步无法进行,在我刚刚配好环境之后,由于对putty不熟,一不小心就无关的命令粘贴到mysql...
  • 一般而言,当eth0被bridge或者被bonding了之后,它就成了slave,对外就不可见了。但是这真的很合理吗?根本就不合理。 网卡就是一个转发设备,哪来的业务逻辑? Linux虽然实现了bridge,bonding,veth,vlan,mac...
  • ActiveMQ Master Slave配置以及示例

    千次阅读 2014-07-30 12:04:06
    ActiveMQ的MasterSlave集群有三种方式,如下:
  • slave,但只能一从一主,即一个 slave 只能对应一个 master slave 挂了之后不会影响其它 slave 读和 master 读写,重启启动 slave 之后会自动从 master 同步数据过来 master 挂了以后,不影响 slave 读,但 Redis ...
  • masterslave同步过程

    千次阅读 2020-10-26 08:56:33
    1、从节点主动向主节点发送同步请求 2、主节点接收到从的消息后发送自己的runid和offset发送给从节点 3、从节点保存主节点发送过来的runid和offset 4、主节点后台执行RDB持久化,并将新写入的数据写入到缓冲区中 ...
  • activemq5.8版本搭建master/slave架构所需要的nfsv4的指导文档
  • master-slave模式

    千次阅读 2017-07-27 16:02:08
    对于数据库应用而言基本上是读大于写,因此由 Master 服务器负责增、删、改操作,由 Slave 负责读操作(也就是 SELECT),Master 一般只有一台,而 Slave 可以有好多台。Slave 与 Master 之间会有心跳...
  • OSPF 笔记之Master / Slave

    2019-06-08 14:07:53
    OSPF 笔记之Master / Slave 分类: 2012-06-19 17:03:58 Q:为毛需要在邻居之间建立主从关系 由于OSPF直接用IP报文来封装自己的协议报文,所以在DD报文传输的过程中必须考虑到报文传输的可靠性。 为了做到这一点,...
  • spi_master_slave

    千次阅读 2019-03-08 16:01:19
    spi_master_slave 一 注意事项
  • MySQL 5.7搭建Master-Slave实践

    千次阅读 2017-07-21 09:28:49
    背景理解了MySQL的Master-Slave的基本原理后,就想在本地虚拟机上实践一下。开启虚拟机上的两个节点,主库Ip为192.168.x.164,从库Ip为192.168.x.170,分别安装相同版本的MySQL 。同时参考...
  • Master-Slave通用基础框架

    千次阅读 2017-05-23 11:37:01
    设计出一个通用的Master-Slave基础框架,然后可以基于这个框架来实现特定的业务需求,比如实现多节点并行计算等。 二、设计理念   基于经典的命令模式,MasterSlave之间通过相互发送命令(Command)实现交互...
  • Redis的复制(MasterSlave)

    千次阅读 2020-04-05 16:05:40
    Redis的复制(Master/Slave) 1.是什么 1.1官网 … 1.2行话 也就是我们所说的主从复制,主机数据更新后根据配置和策略自动同步到备机的master/slave机制,Master以写为主,Slave以读为主。 2.能干嘛 2.1读写分离 2.2...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 277,345
精华内容 110,938
关键字:

masterslave

友情链接: j_12278_jipin_OA.rar