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.