我有一个从属数据库 (db1),在主数据库 (db2) 死机后,我将它移至主数据库位置。我从 db1 的一天前快照中启动了一个新的从属数据库 (db3),我的问题是试图找出 db3 应该从哪个日志文件和位置开始复制。我应该在哪里查找此信息?
答案1
你只有两个选择
选项1
步骤 1)确保 db1 上激活了二进制日志请记住:
MySQL 3.x/4.x/5.0 的逻辑位置 0 是 98
MySQL 5.1 的逻辑位置 0 是 106
MySQL 5.5 的逻辑位置 0 是 107
为了便于说明,我们假设你正在运行 MySQL 5.1
步骤2)尝试从一天前的 db1 快照的日期和时间到 db2 崩溃的时间检索 db2 上的二进制日志,并将数据加载到这些日志中。您可以通过以下方式之一找出开始的日期:
a)在将 db1 切换为主服务器之前,查看 db1 上最后一个中继日志的时间和日期戳。b
)在将 db1 切换为主服务器之前,查看 db1 上 master.info 的时间和日期戳。c
)运行此查询:SELECT MAX(update_time) FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','mysql');
步骤 3) 针对您在步骤 2 中找到的所有二进制日志运行 mysqlbinlog。第一个二进制日志应基于 db1 快照的时间。按顺序运行日志并将该输出加载到文本 SQL 文件中。
步骤 4)针对 db3 运行生成的 SQL 脚本
步骤5)在db3上,执行CHANGE MASTER TO MASTER_HOST='IP of db1',…,MASTER_POSITION=106;
选项 2) 这更容易,但需要一点停机时间。
步骤 1)只需 mysqldump db1 并将其加载到 db3 上
步骤 2)在 db1 上激活二进制日志
步骤 3)在 db3 上,执行 CHANGE MASTER TO MASTER_HOST='IP of db1',...,MASTER_POSITION=106;
试一试 !!!
PS 我建议在完成此恢复后在 db1 和 db3 之间进行循环复制。此外,每小时或每晚对 db3 进行 mysqldump 备份。
答案2
如果您在拍摄快照时没有保存日志文件和位置,我认为没有办法找出答案。但是,有些快照工具会保存这些数据。您是如何拍摄快照的?
例如,如果它是在刷新/锁定所有表后拍摄的文件系统快照,则正确的数据应该位于master.info
从属数据目录中。