配置基于日志的复制

2018-08-26  本文已影响16人  空谷幽心

基本原理

  1. 一台mysql服务器作为master节点,其他服务器作为slave节点。每个节点需要配置全局唯一的server-id
  2. master将操作记录在binary log中,slave同步binary log,通过回放重做来获得master的变更,实现数据复制。

原理图如下:


优缺点

配置过程

  1. 配置master服务器。

    1. my.cnf文件的mysqld节点中新增以下配置并重启服务器。
     [mysqld] 
     server-id=1 //需全局唯一
     log_bin=/home/dalton/d_arch_exp/mysql_cluster/mysql1/mysql-bin.log
     binlog_do_db=test_repl  //可选,默认是所有数据库。可以配置多个数据库。
    
    1. 新建用于同步的用户。要将复制的权限和使用待复制的数据库的权限赋给新用户,没有权限会导致slave无法连接master。
    create user repl_01 identified by 'loveme123';
    grant replication slave on *.* to repl_01;
    grant all privileges on test_repl.* to 'repl_01'@'%';
    flush privileges;
    
  2. 配置slave服务器
    my.cnf文件的mysqld节点新增以下配置。

     [mysqld] 
     server-id=2
     relay-log=/home/dalton/d_arch_exp/mysql_cluster/mysql2/mysql-relay-bin.log
     log_bin=/home/dalton/d_arch_exp/mysql_cluster/mysql2/mysql-bin.log
     binlog_do_db=test_repl
    
  3. 同步基准数据。
    导出master节点待同步数据库的数据,然后导入到slave数据库中。这期间可以给数据库加read lock或者停止数据库,以防止发生其他变更。

    1. 导出数据:
    mysqldump -u root -p --opt test_repl > test_repl.sql
    
    1. 给数据库加锁。这个操作需要重新打开一个mysql终端连到master节点。
    use test_repl;
    FLUSH TABLES WITH READ LOCK;
    
    1. 记录当前使用的日志文件及位置
    SHOW MASTER STATUS;
    

    输出内容如下,使用的文件是mysql-bin.000002,偏移是1253

    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000002 |     1253 | test_repl    |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    1. 导入数据到slave服务器。
    mysql -u root -p test_repl < test_repl.sql
    
  4. 启动复制。

    1. 在slave节点执行change master操作。
    change master to master_host='127.0.0.1',master_port=3307,master_user='repl_01',master_password='loveme123',master_log_file='mysql-bin.000002',master_log_pos=1253;
    
    1. 启动slave。
    start slave;
    
    1. 查看slave状态。
    show slave status;
    

    如果是以下状态,Slave_IO_RunningSlave_SQL_Running都是Yes,则表明配置ok。

    1. slave都启动好了就可以去掉master上的锁。
    UNLOCK TABLES;
    QUIT;
    
  5. 可能碰到的几个错误

    1. 启动slave后,状态表中显示 Slave failed to initialize relay log info structure from the repository
      解决方法:重置slave。
      reset slave;
      
    2. 启动slave后,状态表中显示 error connecting to master 'repl_01@127.0.0.1:3307' - retry-time: 60 retries: 1
      解决方法:尝试用change master中的参数去连接master节点。一般都是参数或权限不对,导致的连接失败。理论上能正常连接的话slave不会报错。
上一篇 下一篇

猜你喜欢

热点阅读