Mysql主从复制原理及配置详解

技术探讨  2016-10-17 17:58   3258 MYSQL 主从复制

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

环境:

操作系统: centos6.7

mysql版本: mysql5.5

IP:192.168.1.160(主master)  192.168.1.180(从slave)

配置步骤:

1、创建复制账号

    mysql> grant replication client,replication slave on *.* to 'repl'@'192.168.1.%' identified by '123456';

2、拷贝数据

  保持主从服务器上当前数据一致

3、配置主(master)服务器

    打开主服务器 mysql 配置文件  一般linux系统下再 /etc/my.cnf (根据mysql配置文件位置调整)

    [root@localhost /]# vim /etc/my.cnf

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

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

        binlog-format=mixed


     blob.png


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

        binlog-format:二进制日志记录变化形式 参数  1 、statement 二进制记录执行语句  2、row 进制记录磁盘变化   3、mixed 混合 由系统根据语句自动判断

       重启master

       [root@localhost /]# service mysqld restart

      运行SHOW MASTER STATUS,

       mysql> show master status;

       输出如下:

      blob.png

    
4、配置从(slave)服务器

    打开从服务器 mysql 配置文件 

    [root@localhost /]# vim /etc/my.cnf

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

        server-id=2
        log-bin=mysql-bin           [ *注意*: 
如果从服务器作为其他服务器的主服务器需开启,否则可以忽略]

        binlog-format=mixed

        relay-log=mysql-relay-bin 

        log-slave-updates=0         [*根据主服务器设置 一般为0]

     blob.png


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

        binlog-format:二进制日志记录变化形式 参数  1 、statement 二进制记录执行语句  2、row 二进制记录磁盘变化   3、mixed 混合 由系统根据语句自动判断

        relay-log:配置中继日志,

       log_slave_updates表示slave将复制事件写进自己的二进制日志(后面会看到它的用处)。

       重启slave

       [root@localhost /]# service mysqld restart


 5、启动slave

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

        mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.160',

            -> MASTER_USER='repl',

            -> MASTER_PASSWORD='123456',

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

            -> MASTER_LOG_POS=0;

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

     blob.png

     启动slave

        mysql> START SLAVE;

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

        blob.png

        主要看这两项:
                   Slave_IO_Running=Yes
                   Slave_SQL_Running=Yes

        

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

    在master上输入show processlist\G;  查看状态

       blob.png

        在slave上输入show processlist\G;  查看状态  

     blob.png

         在 master 插入一条数据,测试一下,你会发现 slave 服务器会有一条相同的数据。

        * stop slave 停止slave   start slave  开启slave

     


注:转载请注明出处为http://www.sandbean.com/article/21.html。

沙豆网 站长

自己选择的远方,爬着也要走完...

138
文章
5524
点赞

更多文章