zoukankan      html  css  js  c++  java
  • MySQL主从复制配置

    复制原理:

    Mysql中有一种日志叫做bin日志(二进制日志)。这个日志会记录下所有修改了数据库的SQL语句(INSERT,UPDATE,DELETE,ALTER TABLE,GRANT等等)。

    主从复制的原理其实就是

    主服务器将改变记录到二进制日志(binlog)中,从服务器将主服务器的binlog拷贝到它的中继日志(relaylog),然后重做中继日志中的事件,在本服务器上执行一遍,这样从服务器上的数据就和主服务器上的数据相同了。

    环境说明:

    两台服务器,192.168.1.1(当做master),192.168.1.2(当做slave)

    一、配置二进制日志文件:

    在master服务器上:

    1:编辑主节点配置文件

    vim /etc/my.cnf

    2.启用二进制日志文件,添加以下配置

    server-id = 1
    log-bin = mysql-bin
    binlog-format = mixed

    server-id = 1  //给服务器起一个独特的ID

    log-bin = mysql-bin  //声明 二进制日志文件为 mysql-bin.XXXX

    binlog-format = mixed  //设置二进制复制模式,可选值有(mixed/statement/row)

    在slave服务器上:

    1:编辑主节点配置文件

    vim /etc/my.cnf

    2.启用二进制日志文件,添加以下配置

    server-id = 2
    log-bin = mysql-bin
    binlog-format = mixed
    relay-log = relay-log

    server-id = 2  //给服务器起一个独特的ID

    log-bin = mysql-bin  //声明 二进制日志文件为 mysql-bin.XXXX

    binlog-format = mixed  //设置二进制复制模式,可选值有(mixed/statement/row)

    relay-log = relay-log  //声明 relay-log日志文件为 relay-log.XXXX

    3重启mysql:

    service mysqld start

    二、建立主从连接

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

    GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.*  TO backup@'192.168.1.2' IDENTIFIED BY '1234';

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

    主服务器配置完成.

    注意:确保主服务器的iptables没有阻断3306的访问端口。

    2.在slave服务器上执行以下命令,连接master服务器:

    CHANGE MASTER TO MASTER_HOST='192.168.1.1',
    MASTER_USER='backup',MASTER_PASSWORD='1234',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=4;

    说明:MASTER_LOG_FILE是指定读取主服务器的哪个binlog日志文件,MASTER_LOG_POS是指定从该日志的哪个位置开始读,这两个选项要从master服务器上运行命令:SHOW MASTER STATUS; 查看

    查看slave的设置是否正确:

    SHOW SLAVE STATUS
    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还没有开始复制过程。

    在slave上启动复制线程 :

    START SLAVE;

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

    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才表明状态正常。

    至此,mysql的主从复制配置完成。

    3.实际测试

    登录192.168.1.1主MySQL,添加一张数据表,并添加数据,然后登陆192.168.1.2从MySQL,发现刚才新建的表和数据都出现了,主从复制的配置就是如此的简单。

  • 相关阅读:
    设计模式-外观模式
    发生死锁怎么办
    设计模式-工厂模式
    设计模式-模板方法
    设计模式-命令模式(Command)
    设计模式-单例模式
    设计模式-装饰器模式
    CQRS之旅——旅程8(后记:经验教训)
    CQRS之旅——旅程7(增加弹性和优化性能)
    CQRS之旅——旅程6(我们系统的版本管理)
  • 原文地址:https://www.cnblogs.com/chenglc/p/10049574.html
Copyright © 2011-2022 走看看