É possível com o MySQL ter uma configuração do Registro Binário Mestre específica do banco de dados?

1

É possível que eu tenha um log binário exclusivo por banco de dados MySQL no meu servidor MySQL? Eu fiz alguns googling e parece que não consigo encontrar nenhuma solução. Certamente há um caminho!

    
por Webnet 19.10.2011 / 23:04

3 respostas

3

Acutamente, existe um jeito, mas é necessário algum trabalho se você realmente precisar.

Eu já postei algo há cerca de 6 meses descrevendo como configurar uma topologia em estrela .

Você pode usar o mesmo conceito. Aqui está o cenário

Para este exemplo, você tem três bancos de dados: membros, dbblogs, relatórios.

Passo 01) Configurar o Registro Binário no Mestre

Se o registro em log binário não estiver ativado, você poderá ativá-lo

[mysqld]
log-bin=mysql-bin

Reinicie o mysql depois de adicionar log-bin=mysql-bin ao /etc/my.cnf

Passo 02) Configurar o datadir da instância do MySQL para cada banco de dados Specfic

mkdir /database_binlogs
mkdir /database_binlogs/members
mkdir /database_binlogs/dbblogs
mkdir /database_binlogs/reports
mkdir /database_binlogs/members/mysql
mkdir /database_binlogs/dbblogs/mysql
mkdir /database_binlogs/reports/mysql
cp /var/lib/mysql/mysql/* /database_binlogs/members/mysql
cp /var/lib/mysql/mysql/* /database_binlogs/dbblogs/mysql
cp /var/lib/mysql/mysql/* /database_binlogs/reports/mysql
chown -R mysql:mysql /database_binlogs

Passo 03) Crie um serviço MySQL para cada Banco de Dados

Certifique-se de que cada arquivo de configuração tenha o seguinte:

/etc/my3307.cnf

[mysqld]
server-id=9993307
datadir=/database_binlogs/members
replicate-do-db=members
log-bin=mysql-bin
log-slave-updates

/etc/my3308.cnf

[mysqld]
server-id=9993308
datadir=/database_binlogs/dbblogs
replicate-do-db=dbblogs
log-bin=mysql-bin
log-slave-updates

/etc/my3309.cnf

[mysqld]
server-id=9993309
datadir=/database_binlogs/reports
replicate-do-db=reports
log-bin=mysql-bin
log-slave-updates

Etapa 04) Inicie os três serviços

  • service mysql3307 start
  • service mysql3308 start
  • service mysql3309 start

Passo 05) Execute o mysqldump do esquema do banco de dados somente a partir do Mestre, sem dados

Não inclua o esquema mysql !!!

mysqldump -uroot -p --master-data=1 --routines --triggers --no-data --databases members dbblogs reports > /root/MySQLSchema.sql
echo "RESET MASTER; START SLAVE;" >> /root/MySQLSchema.sql

Passo 06) Edite o /root/MySQLSchema.sql para usar somente o < em> mecanismo de armazenamento BLACKHOLE

No vi, execute estas duas substituições no arquivo /root/MySQLSchema.sql:

  • 1,$s/ENGINE=MyISAM/ENGINE=BLACKHOLE/g
  • 1,$s/ENGINE=InnoDB/ENGINE=BLACKHOLE/g

Passo 07) Crie um usuário de replicação no mestre

GRANT SELECT,REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'replicant'@'127.0.0.1' IDENTIFIED BY 'replpass';

Passo 08) Configure as 3 Instâncias do MySQL como Escravas para o Mestre usando

CHANGE MASTER TO
MASTER_HOST='127.0.0.1',
MASTER_PORT=3306,
MASTER_USER='replicant',
MASTER_PASSWORD='replpass',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1;

Passo 09) Carregue o MySQL Schema nas três instâncias do MySQL

mysql -uroot -p -h127.0.0.1 -P3307 < /root/MySQLSchema.sql
mysql -uroot -p -h127.0.0.1 -P3308 < /root/MySQLSchema.sql
mysql -uroot -p -h127.0.0.1 -P3309 < /root/MySQLSchema.sql

Os logs binários são limpos nas três instâncias e a replicação é iniciada

A partir daí, cada instância do banco de dados registrará apenas as entradas do log binário do banco de dados designado

Experimente!

ATUALIZAÇÃO 2011-10-20 15:37 EDT

Por favor, tenha em mente que os três escravos conterão apenas binlogs e não dados.

    
por 20.10.2011 / 20:32
1

Não, mas você pode filtrar o log binário usando mysqlbinlog --database=...

    
por 20.10.2011 / 02:46
0

Não. O log_bin= é uma variável global do MySQL. Você pode ativar ou desativar o log por banco de dados com as opções binlog-do-db= e binlog-ignore-db= , mas a localização do arquivo de log é global por servidor.

    
por 19.10.2011 / 23:38