是否有可能与MySQL有一个特定于数据库的主二进制日志设置?

我的MySQL服务器上的每个MySQL数据库都有唯一的二进制日志吗? 我做了一些Googlesearch,似乎无法find任何解决scheme。 当然有一种方法!

实际上,有一种方法,但是如果你真的需要,还是需要一些工作。

我已经在6个月前发布了一些描述如何设置星型拓扑的东西 。

你可以使用相同的概念。 这是情况

对于这个例子,你有三个数据库:成员,dbblogs,报告。

步骤01)在主设备上安装二进制日志logging

如果未启用二进制日志logging,则可以启用它

[mysqld] log-bin=mysql-bin 

log-bin=mysql-bin到/etc/my.cnf后重新启动mysql

步骤02)为每个Specfic数据库设置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) 为每个数据库创build一个MySQL服务

确保每个configuration文件具有以下内容:

/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中运行这两个replace:

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

步骤07)在主服务器上创build一个复制用户

 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 

在三个实例中清除二进制日志,并启动复制

从那里,每个数据库实例将只logging其指定的数据库的二进制日志条目

试一试 !!!

更新2011-10-20 15:37 EDT

请记住,三个奴隶将只包含二进制日志,而不是数据。

不,但是你可以使用mysqlbinlog --database=...来过滤二进制日志mysqlbinlog --database=...

log_bin=是一个全局的MySQLvariables。 您可以使用binlog-do-db=binlog-ignore-db=选项打开或closures每个数据库的binlog-do-db=logging,但每个服务器的日志文件位置是全局的。