• mysql主从复制


    一、主从复制概述

    MySQL复制是指从一个MySQL主服务器(master)将数据复制到另一台或多台MySQL从服务器(slave)的过程。将主数据库的DDL和DML操作二进制日志传到复制服务器上,然后从服务器上对这些日志重新执行,从而使得主从服务器的数据保持同步。在MySQL中,复制操作是异步进行的,slave服务器不需要持续的保持连接接受master服务器的数据。如果一台主服务器同时向多台从服务器上进行复制操作。如果主服务器的访问量比较大。可以在服务器上进行查询操作,从而降低主服务器的访问压力,同时从服务器可以作为主服务器的备份。可以避免主服务器的数据丢失。

    MySQL复制操作大致可以分为以下三个步骤

    步骤1:主服务器的数据改变记录到二进制日志(binary log)中

    步骤2:从服务器将主服务器的binary log events 复制到它的中继日志(relay log)中。

    步骤3:从服务器重做中继日志中的事件,将数据的改变与从服务器保持同步

    slave上面的I/O进程连接上master,并发出日志请求,master接收到请求后。通过负责复制的I/O进程根据请求信息读取与指定位置之后的日志信息。返回给slave的I/O进程。返回信息除了包含日志所包含的信息,还包括本次返回的信息已经到master端的bin-log文件的名称以及bin-log的位置

    slave的I/O进程接受到信息后,将接收到的日志内容依次添加到slave端的relay-log文件的末端,并将读取到的Master端的bin-log的文件名和位置记录到master-info文件中。

    slave的SQL进程检测到relay-log中新增加的内容后,马上解析relay-log的内容,并在自身执行。

    MySQL的复制环境一般都是一个master带一个或多个slave的架构模式。如果主从的压力不是很大的话。异步复制的延时一般很少。

     二、开启主从复制的步骤

    步骤一:修改master服务器的配置文件my.cnf。在主节点上开启二进制日志,并设置server-id

    log-bin = /data/3306/binlog/mysqld-bin
    expire_logs_days = 7
    server-id   = 1

     步骤二、登陆Master主服务器,创建一个用于复制的账户。并赋予REPLICATIN SLAVE权限,这里创建一个用户rep

    grant replication slave on *.* to 'rep'@'%' identified by '111111';
    flush privileges;

    步骤三、在Masetr服务器上设置读锁,这个步骤的目的是确保在进行全量备份的过程中没有新的数据写入,主服务器只允许读操作

    flush tables with read lock;

    步骤四、另开一个窗口,对Master服务器进行全量备份。如果量大,可以对备份文件进行压缩。备份完成后,回到原来的窗口把锁打开,执行unlock tables。在备份的过程中使用 -x 参数,步骤三是可以省略的。

    mysqldump -u root -p -S /data/3306/mysql.sock -A -B --master-data=2 | gzip > /home/backup/rep.sql

    步骤五、将Master主服务器上的备份文件,在SLAVE服务器上进行数据恢复

    mysql -u root -p -S /data/3307/mysql.sock < /home/backup/rep.sql

    步骤六、对从服务器坐相应的设置,需要指定复制的用户,主数据的IP地址、端口号以及开始复制的日志文件和位置。如果备份的时候  --master-data 参数的值为1。这个步骤中就不需要指定复制的日志和位置了。设置的信息存放在master-info文件中,文件的存放位置默认在从服务器的data目录下。

    在从库里边执行
    CHANGE MASTER TO
    MASTER_HOST='192.168.222.145',
    MASTER_PORT=3306,
    MASTER_USER='rep',
    MASTER_PASSWORD='111111',
    MASTER_LOG_FILE='mysqld-bin.000004',
    MASTER_LOG_POS=1242;

    步骤七、开启复制开关,在从服务器中启动。

    start slave;
    show slave statusG # 查看从服务器的状态
    show processlist # 查看复制进度
  • 相关阅读:
    深入浅出JSONP--解决ajax跨域问题
    Apache与Tomcat的区别
    项目终于接近尾声了
    交互设计[小插曲]--网站UI配色
    使用 Jasmine 进行测试驱动的 JavaScript 开发
    javascript单元测试
    MySQL查询当前数据库中所有记录不为空的表
    cannot be resolved to a type的错误
    oracle 表空数据导出dmp ,空表导出失败
    Iterable<E> Iterator<E>
  • 原文地址:https://www.cnblogs.com/jkin/p/10156330.html
Copyright © 2020-2023  润新知