我是否可以在我的 MySQL 服务器上为每个 MySQL 数据库设置一个唯一的二进制日志?我在 Google 上搜索了一下,似乎找不到任何解决方案。肯定有办法的!!
答案1
实际上,是有办法的,但是如果你真的需要它,就需要做一些工作。
大约 6 个月前,我发布了一些文章,描述了如何设置星型拓扑。
您可以使用相同的概念。以下是场景
对于此示例,您有三个数据库:members、dbblogs、reports。
步骤 01)在主服务器上设置二进制日志
如果未启用二进制日志记录,您可以启用它
[mysqld]
log-bin=mysql-bin
log-bin=mysql-bin
添加/etc/my.cnf后重启mysql
步骤 02)为每个特定数据库设置 MySQL 实例 datadir
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 Schema 加载到三个 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
请记住,三个从属服务器只包含 binlog,而不包含数据。
答案2
否,但你可以随后使用以下方法过滤二进制日志mysqlbinlog --database=...
答案3
否。是全局 MySQL 变量。您可以使用和选项log_bin=
为每个数据库打开或关闭日志记录,但日志文件位置是每个服务器的全局位置。binlog-do-db=
binlog-ignore-db=