我的MySQL服务器上的每个MySQL数据库都有唯一的二进制日志吗? 我做了一些Googlesearch,似乎无法find任何解决scheme。 当然有一种方法!
实际上,有一种方法,但是如果你真的需要,还是需要一些工作。
我已经在6个月前发布了一些描述如何设置星型拓扑的东西 。
你可以使用相同的概念。 这是情况
对于这个例子,你有三个数据库:成员,dbblogs,报告。
如果未启用二进制日志logging,则可以启用它
[mysqld] log-bin=mysql-bin
将log-bin=mysql-bin到/etc/my.cnf后重新启动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
确保每个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
service mysql3307 start service mysql3308 start service mysql3309 start 不要包含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
在vi中,在文件/root/MySQLSchema.sql中运行这两个replace:
1,$s/ENGINE=MyISAM/ENGINE=BLACKHOLE/g 1,$s/ENGINE=InnoDB/ENGINE=BLACKHOLE/g GRANT SELECT,REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'replicant'@'127.0.0.1' IDENTIFIED BY 'replpass';
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;
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其指定的数据库的二进制日志条目
试一试 !!!
请记住,三个奴隶将只包含二进制日志,而不是数据。
不,但是你可以使用mysqlbinlog --database=...来过滤二进制日志mysqlbinlog --database=...
不log_bin=是一个全局的MySQLvariables。 您可以使用binlog-do-db=和binlog-ignore-db=选项打开或closures每个数据库的binlog-do-db=logging,但每个服务器的日志文件位置是全局的。