Como configurar Replicação em MySQL

MySQL é bastante fácil de configurar e requer poco tempo e recursos. Neste tutorial vamos configurar uma simples replicaçao mysql de tipo Master -> Slave.

  • Assumimos que os dois servidores MySQL já estão instalados, se não segue este tutorial antes de continuar Instalação MySQL.
  • Neste exemplo, usaremos a seguinte servidores bih001(10.000.1.189)/Master e bih002(10.000.1.210)/Slave. Siga os passos necessários para configurar os ambientes de replicação MySQL.
  • Step 1: Editar os arquivos de configuração e iniciar os servidores MySQL.
  • Adicione as seguintes linhas para o servidor Master no nosso caso bih001
     [mysqld]
    
    server_id           = 2
    log_bin             = /var/lib/mysql/mysql-bin.log
    log_bin_index       = /var/lib/mysql/mysql-bin.log.index
    relay_log           = /var/lib/mysql/mysql-relay-bin
    relay_log_index     = /var/lib/mysql/mysql-relay-bin.index
    expire_logs_days    = 10
    max_binlog_size     = 100M
    log_slave_updates   = 1
    innodb_flush_log_at_trx_commit=1
    sync_binlog=1
    
    auto_increment_increment = 2
    bind-address = 0.0.0.0
    auto_increment_offset = 1
    Ao editar o arquivo de configuração /etc/mysql/my.cnf e não se esqueça de usar diferentes ids de servidor para os anfitriões.
  • Step 2: Adicione as seguintes linhas para o servidor Slave no nosso caso bih002.
  •  [mysqld]
    
    server_id           = 3
    log_bin             = /var/lib/mysql/mysql-bin.log
    log_bin_index       = /var/lib/mysql/mysql-bin.log.index
    relay_log           = /var/lib/mysql/mysql-relay-bin
    relay_log_index     = /var/lib/mysql/mysql-relay-bin.index
    expire_logs_days    = 10
    max_binlog_size     = 100M
    log_slave_updates   = 1
    innodb_flush_log_at_trx_commit=1
    sync_binlog=1
    
    auto_increment_increment = 2
    bind-address = 0.0.0.0
    auto_increment_offset = 1
    Certifique-se que os caminhos estão corretos.
  • Step 3: Inicie seus servidores MySQL com a nova configuração
  •  [root@bih002 ~]# /etc/init.d/mysqld start
    Starting mysqld:                                           [  OK  ]
  • Step 4: Criar usuário usado para replicação
  • Criar uma conta no servidor Master que o servidor Slave pode usar para se conectar. Essa conta deve receber o privilégio REPLICATION SLAVE.
     GRANT REPLICATION SLAVE ON *.* TO REPLICATION@'10.000.1.210' IDENTIFIED BY 'password';
     FLUSH PRIVILEGES;
  • Step 5 :Encontre o MASTER_LOG_FILE & MASTER_LOG_POS
  • Agora você precisa encontrar o MASTER_LOG_FILE & MASTER_LOG_POS que será usado para o comando de inicialização da replicação.
     mysql> SHOW MASTER STATUS;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000004 |      383 |              |                  |
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)
  • Step 6: Inicialização da Replicação
  • Conecte-se ao servidor Slave e inicia a replicação usando o seguinte script. Onde: MASTER_HOST: o host-name ou IP do servidor principal, neste exemplo, o azul ou 10.000.1.189 MASTER_USER: este é o usuário que concedeu o privilégio REPLICATION SLAVE no Passo 4 MASTER_PASSWORD: esta é a senha que atribuído ao usuário de replicação no Passo 4 MASTER_LOG_FILE: é mysql-bin.000004 (não seria vazia se não houvesse existente escreve para ser retirado a partir do master) MASTER_LOG_POS: é 383
     mysql>CHANGE MASTER TO master_host='10.000.1.189', master_port=3306, master_user='replication',
                  master_password='password', master_log_file='mysql-bin.000004', master_log_pos=383;
  • Step 7: Iniciar processo de replicação
  • Conecte-se ao servidor escravo e execute o seguinte comando:
      mysql>start slave;
    Para verificar o status da replicação você pode usar os comandos:
    mysql> show slave statusG
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 10.000.1.189
                      Master_User: replication
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000003
              Read_Master_Log_Pos: 383
                   Relay_Log_File: mysql-relay-bin.000008
                    Relay_Log_Pos: 251
            Relay_Master_Log_File: mysql-bin.000003
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB:
              Replicate_Ignore_DB:
               Replicate_Do_Table:
           Replicate_Ignore_Table:
          Replicate_Wild_Do_Table:
      Replicate_Wild_Ignore_Table:
                       Last_Errno: 0
                       Last_Error:
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 383
                  Relay_Log_Space: 551
                  Until_Condition: None
                   Until_Log_File:
                    Until_Log_Pos: 0
               Master_SSL_Allowed: No
               Master_SSL_CA_File:
               Master_SSL_CA_Path:
                  Master_SSL_Cert:
                Master_SSL_Cipher:
                   Master_SSL_Key:
            Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error:
                   Last_SQL_Errno: 0
                   Last_SQL_Error:
    1 row in set (0.00 sec)
    
    mysql>
    Também criar objetos no master e verificar se eles são criados no o servidor escravo.