Назад | Перейти на главную страницу

Возможно ли с MySQL иметь настройку главного двоичного журнала для конкретной базы данных?

Могу ли я иметь уникальный двоичный журнал для каждой базы данных MySQL на моем сервере MySQL? Я немного погуглил и не могу найти никаких решений. Конечно есть способ !!

На самом деле способ есть, но он требует некоторой работы, если вам это действительно нужно.

Я уже опубликовал что-то около 6 месяцев назад, описывая, как настроить топологию звезды..

Вы можете использовать ту же концепцию. Вот сценарий

В этом примере у вас есть три базы данных: участники, dbblogs, отчеты.

Шаг 01) Настройте ведение двоичного журнала на главном устройстве

Если двоичный вход в систему не включен, вы можете включить его

[mysqld]
log-bin=mysql-bin

Перезагрузите mysql после добавления log-bin=mysql-bin в /etc/my.cnf

Шаг 02) Настройте каталог данных экземпляра MySQL для каждой конкретной базы данных

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

Шаг 03) Создайте службу MySQL для каждой базы данных

Убедитесь, что в каждом файле конфигурации есть следующее:

/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

Шаг 04) Запустите три службы

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

Шаг 05) Выполните mysqldump схемы базы данных только от Мастера, без данных

Не включайте схему 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

Шаг 06) Отредактируйте /root/MySQLSchema.sql, чтобы использовать только Механизм хранения BLACKHOLE

В vi запустите эти две замены в файле /root/MySQLSchema.sql:

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

Шаг 07) Создайте пользователя репликации на главном сервере

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

Шаг 08) Настройте 3 экземпляра MySQL в качестве подчиненных для главного, используя

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;

Шаг 09) Загрузите схему MySQL в три экземпляра 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

Двоичные журналы очищаются в трех экземплярах и запускается репликация.

Оттуда каждый экземпляр БД будет записывать только записи binlog своей назначенной базы данных.

Попробуйте !!!

ОБНОВЛЕНИЕ 2011-10-20 15:37 EDT

Имейте в виду, что три ведомых устройства будут содержать только бинлоги, а не данные.

Нет, но вы можете отфильтровать двоичный журнал позже, используя mysqlbinlog --database=...

Нет. log_bin= - глобальная переменная MySQL. Вы можете включить или выключить ведение журнала для каждой базы данных с помощью binlog-do-db= и binlog-ignore-db= параметры, но расположение файла журнала является глобальным для каждого сервера.