MySQL Replication · 4 min read · Oct 08, 2025

O Cluster Web Perfeito com Balanceamento de Carga e Alta Disponibilidade com 2 Servidores Executando Xen no Ubuntu 8.04 Hardy Heron - Página 4

10. Replicação MySQL (web1, web2)

10.1 Instalando MySQL 5.0

apt-get install mysql-server-5.0 mysql-client-5.0

Para garantir que a replicação funcione, devemos fazer o MySQL escutar em todas as interfaces, portanto, comentamos a linha bind-address = 127.0.0.1 em /etc/mysql/my.cnf:

vi /etc/mysql/my.cnf

[...]
# Em vez de skip-networking, o padrão agora é escutar apenas em
# localhost, o que é mais compatível e não é menos seguro.
#bind-address           = 127.0.0.1
[...]

Reinicie o MySQL depois:

/etc/init.d/mysql restart

No web1

Agora configuramos um usuário de replicação slave2_user que pode ser usado pelo web2.example.com para acessar o banco de dados MySQL:

mysql -u root -p

No shell do MySQL, execute os seguintes comandos:

GRANT REPLICATION SLAVE ON . TO ‘slave2_user’@’%’ IDENTIFIED BY ‘slave2_password’;
FLUSH PRIVILEGES;
quit;

No web2

Agora fazemos os últimos dois passos novamente no web2.example.com:

mysql -u root -p

GRANT REPLICATION SLAVE ON . TO ‘slave1_user’@’%’ IDENTIFIED BY ‘slave1_password’;
FLUSH PRIVILEGES;
quit;

No web1 E web2

Agora criaremos um banco de dados que será usado mais tarde para o servidor de e-mail:

mysqladmin -u root -p create mail

Em seguida, vamos para o shell do MySQL:

mysql -u root -p

No shell do MySQL, criamos o usuário mail_admin com a senha mail_admin_password (substitua pela sua própria senha) que tem privilégios SELECT, INSERT, UPDATE, DELETE no banco de dados de e-mail. Este usuário será usado pelo Postfix e Courier para se conectar ao banco de dados de e-mail:

GRANT SELECT, INSERT, UPDATE, DELETE ON mail. TO ‘mail_admin’@’localhost’ IDENTIFIED BY ‘mail_admin_password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.
TO ‘mail_admin’@’localhost.localdomain’ IDENTIFIED BY ‘mail_admin_password’;
FLUSH PRIVILEGES;
quit;

10.2 Configurando a Replicação

Agora configuramos a replicação master-master em /etc/mysql/my.cnf. As opções de configuração cruciais para a replicação master-master são auto_increment_increment e auto_increment_offset:

  • auto_increment_increment controla o incremento entre valores AUTO_INCREMENT sucessivos.
  • auto_increment_offset determina o ponto de partida para os valores da coluna AUTO_INCREMENT.

Vamos supor que temos N nós MySQL (N=2 neste exemplo), então auto_increment_increment tem o valor N em todos os nós, e cada nó deve ter um valor diferente para auto_increment_offset (1, 2, …, N).

Agora vamos configurar nossos dois nós MySQL:

No web1

vi /etc/mysql/my.cnf

adicione as seguintes linhas logo abaixo de “[mysqld]”:

server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1
#use 192.168.1.105 if you didnt install a crossover cable on eth1
master-host = 192.168.0.105
master-user = slave1_user
master-password = slave1_password
master-connect-retry = 60
replicate-do-db = mail
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db = mail
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index

e modifique a linha “max_binlog_size”:

[...]
max_binlog_size         = 500M
[...]

/etc/init.d/mysql restart

No web2

vi /etc/mysql/my.cnf

server-id = 2
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 2
#use 192.168.1.104 if you didnt install a crossover cable on eth1
master-host = 192.168.0.104
master-user = slave2_user
master-password = slave2_password
master-connect-retry = 60
replicate-do-db = mail
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db = mail
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index

e modifique a linha “max_binlog_size”:

[...]
max_binlog_size         = 500M
[...]

/etc/init.d/mysql restart

No web1 E web2

Agora vamos iniciar a replicação:

mysql -u root -p

No shell do MySQL, execute os seguintes comandos:

reset master;
stop slave;
reset slave;

Agora execute o seguinte:

No web1

CHANGE MASTER TO MASTER_HOST=’192.168.0.105’, MASTER_USER=’slave1_user’, MASTER_PASSWORD=’slave1_password’, MASTER_LOG_FILE=’mysql-bin.000001’, MASTER_LOG_POS=98;

start slave;
quit;

No web2

CHANGE MASTER TO MASTER_HOST=’192.168.0.104’, MASTER_USER=’slave2_user’, MASTER_PASSWORD=’slave2_password’, MASTER_LOG_FILE=’mysql-bin.000001’, MASTER_LOG_POS=98;

start slave;
quit;

Agora a replicação deve funcionar.

10.3 Testando a replicação

No web1 E web2

mysql -u root -p

No shell do MySQL, execute os seguintes comandos:

show slave status \G;

Existem 3 linhas importantes na saída que devem parecer com isto:

[...]
Slave_IO_State: Waiting for master to send event
[...]
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: mail
[...]

Agora você pode sair do mysql:

quit;

No web1

Vamos inserir alguns dados em web1.example.com para teste e que servirão no próximo capítulo para e-mail:

mysql -u root -p

No shell do MySQL, execute os seguintes comandos:

use mail;

Vamos criar as seguintes tabelas:

CREATE TABLE domains (
domain varchar(50) NOT NULL,
transport varchar(128) NOT NULL default ‘smtp:[192.168.1.104]’,
PRIMARY KEY (domain) )
TYPE=MyISAM;

CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
TYPE=MyISAM;

CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT ‘10485760’,
PRIMARY KEY (email)
) TYPE=MyISAM;

CREATE TABLE transport (
domain varchar(128) NOT NULL default ‘’,
transport varchar(128) NOT NULL default ‘’,
UNIQUE KEY domain (domain)
) TYPE=MyISAM;

quit;

Essas tabelas recém-criadas devem aparecer no banco de dados de e-mail do web2 também, graças à replicação.

No web2

Agora vamos verificar que:

mysql -u root -p

No shell do MySQL, execute os seguintes comandos:

use mail;
show tables;

A saída deve ser:

+----------------+
| Tables_in_mail |
+----------------+
| domains         |
| forwardings    |
| transport        |
| users              |
+----------------+
4 rows in set (0.00 sec)

quit;

Se você ver que a replicação está funcionando.

10.4 Criando usuário para ldirectord

Agora vamos criar o usuário que se conectará ao banco de dados no arquivo ldirectord.php.

No web1 E web2

mysql -u root -p

No shell do MySQL, execute os seguintes comandos:

GRANT USAGE ON . TO ‘ldirectord’@’localhost’ IDENTIFIED BY ‘LDIRECTORD_PASSWORD’;
quit;

Agora, quando você acessar com seu navegador os endereços:

http://192.168.1.104/ldirectord.php

E

http://192.168.1.105/ldirectord.php

Você deve ver:

Conectado ao MySQL

exibido na tela.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.