Master Server: 192.168.22.56
Slave Server: 192.168.22.73
MySQL Data path: /var/lib/mysql
MySQL slave user named slave_user

[Master]

Configurar o servidor Master.

# vim /etc/my.cnf

# [mysqld] section
# Start Modification
# First line is probably already there
datadir = /var/lib/mysql
server-id = 1
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/var/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql/mysql-bin
# Stop Modification

Reiniciar o MySQL para carregar as alterações

# service mysqld restart

[Slave]

A mesma coisa para o servidor Slave

# vim /etc/my.cnf

# [mysqld] section
# Start Modification
# First line is probably already there
datadir = /var/lib/mysql
server-id = 2
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/var/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
# Stop Modification

Reiniciar o MySQL para carregar as alterações

# service mysqld restart

[Master]

Vamos criar o utilizador que vai ser usado na replicação e dar-lhe as permissões. Neste caso permitimos a replicação a partir de qualquer host mas poderia ser limitado.

# mysql -u root -p
mysql> STOP SLAVE;
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'slave_password';
mysql> FLUSH PRIVILEGES;

Agora vamos bloquear a escrita nas tabelas e obter a posição do log de onde o Slave vai começar a replicar.

mysql> USE mysql; # pode ser qualquer base de dados
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | POSITION | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      334 |              |                  |
+------------------+----------+--------------+------------------+
1 ROW IN SET (0.00 sec)

[Slave]

Vamos então configurar o Slave para ler o log do Master, a começar na posição que vimos em cima.

mysql> CHANGE MASTER TO MASTER_HOST='192.168.22.56', MASTER_USER='slave_user', MASTER_PASSWORD='slave_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=334;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G;

Basta confirmar que as variáveis de saída têm estes valores:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

 

Se não conseguirem que os servidores comuniquem (a variável Slave_IO_Running estará a No, a Slave_IO_State apresenta uma tentativa de ligação e o ERROR apresenta uma mensagem de ligação falhada) então provavelmente falta abrir a porta do MySQL na firewall.

# iptables -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT

 

Para quem usar hostnames em vez de IPs, no caso de mudar de hostname poderá ter que fazer FLUSH HOSTS em ambos os servidores. No caso de usarem o ficheiro /etc/hosts então é certo que têm que o fazer.