MySQL Replication(Master与Slave基本原理及配置)

MySQL Replication(Master与Slave基本原理及配置)

PS:MySQL主从复制!

  1. Master与Slave基本原理


    Mysql的复制(replication)是一个异步的复制,从一个Mysql instace(称之为Master)复制到另一个Mysql instance(称之Slave)。实现整个复制操作主要由三个进程完成的,其中两个进程在Slave(Sql进程和IO进程),另外一个进程在 Master(IO进程)上。
    要实施复制,首先必须打开Master端的binary log(bin-log)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。
    复制的基本过程如下:

    1. Master将用户对数据库更新的操作以二进制格式保存到 Binary Log日志文件中;
    2. Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
    3. Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置;
    4. Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”;
    5. Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。
  2. 主从复制配置

    Master A:192.168.1.34
    Slave B:192.168.1.38

  3. 配置master主服务器

    1. 修改my.cnf配置文件

                      #指定唯一的servr ID,master和slave主机的server-id不能一样
                      server-id	= 1
      
                      #设置此参数表示启用binlog功能,并制定二进制日志的存储目录,
                      log-bin=/home/mysql/binlog/mysql-bin
      
                      #mysql-bin.*日志文件最大字节(单位:字节)
                      #设置最大100MB
                      max_binlog_size=104857600
      
                      #设置了只保留7天BINLOG(单位:天)
                      expire_logs_days = 7
      
                      #binlog日志只记录指定库的更新
                      #binlog-do-db=db_name
      
                      #binlog日志不记录指定库的更新
                      #binlog-ignore-db=db_name
                      
    2. 创建Slave复制帐号

      每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE 权限。

                      mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slave@'192.168.1.%' IDENTIFIED BY '123456';
                      
    3. 重启master,运行SHOW MASTER STATUS

                      mysql> SHOW MASTER STATUS;
                      +------------------+--------+------------+----------------+
                      | File             |Position|Binlog_Do_DB|Binlog_Ignore_DB|
                      +------------------+--------+------------+----------------+
                      | mysql-bin.000003 |    763 |            |                |
                      +------------------+--------+------------+----------------+
                      1 row in set
                      
  4. 配置slave从服务器

    1. 修改my.cnf配置文件

                      #指定唯一的servr ID,master和slave主机的server-id不能一样
                      server-id	= 2
      
                      #设置此参数表示启用binlog功能,并制定二进制日志的存储目录,
                      log-bin=/home/mysql/binlog/mysql-bin
      
                      #mysql-bin.*日志文件最大字节(单位:字节)
                      #设置最大100MB
                      max_binlog_size=104857600
      
                      #设置了只保留7天BINLOG(单位:天)
                      expire_logs_days = 7
      
                      #binlog日志只记录指定库的更新
                      #binlog-do-db=db_name
      
                      #binlog日志不记录指定库的更新
                      #binlog-ignore-db=db_name
      
                      #设置要进行或不要进行主从复制的数据库名
                      #replicate-do-db=db_name
                      replicate-ignore-db=mysql,information_schema
      
                      #中继日志信息
                      relay_log=/home/mysql/relaylog/relay-bin
                      relay_log_index=/home/mysql/relaylog/relay-bin.index
                      relay_log_info_file=/home/mysql/relaylog/relay-log.info
                      
    2. slave上指定master同步信息

      每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE 权限。

                      mysql>change master to master_host='192.168.1.34',master_user='slave',master_password='123456', master_log_file='mysql-bin.000001',master_log_pos=0;
                      

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

    3. 重启slave,运行SHOW SLAVE STATUS

                      #开启slave服务
                      mysql> start slave;
                      #查看slave状态
                      mysql> SHOW SLAVE STATUS\G;
                      

      如果出现:
      Slave_IO_Running: Yes
      Slave_SQL_Running: Yes
      以上两项都为Yes,那说明没问题了。

相关文章
  1. 理解MySQL——索引与优化(转载)
  2. MySQL数据库命名规范及约定
  3. MySQL索引背后的数据结构及算法原理
  4. MySQL数据备份和binlog数据恢复案例分析
  5. mysql binlog详解
  6. MySql常用命令总结
本站版权
1、本站所有主题由该文章作者发表,该文章作者与尘埃享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和尘埃的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:
二维码
Posted in mysql, 数据库技术
Comments are closed.