我试图了解时间点恢复的确切工作流程,或者更一般地使用二进制日志进行备份/恢复(意思是:使用二进制日志文件)这很重要,不仅因为mysqlbinlog
PITR,而且使用二进制日志如果数据文件丢失,但不会丢失上次备份的二进制日志,这种情况下我可以从备份中恢复,然后“应用”未丢失的当前二进制日志文件中的剩余更改。
我确实理解从可用备份中离线恢复的主要概念,然后使用 mysqlbinlog 从二进制日志应用进一步的更改。
有两件事我不清楚:
当我到处看到
mysqlbinlog <files>.... | mysql -u ...
它时,它表明服务器必须运行并在线。我如何确保在我离线恢复某些状态后,服务器保持该状态并且我的管道 SQL 语句是服务器上唯一独占执行的语句?另一件我找不到答案的事情是,我如何从应该执行的 binlog 语句中确定和应用这个 lsn?我知道我可以从服务器查询当前的 lsn 例如
SHOW MASTER STATUS;
,假设我从上次备份中恢复了一些离线状态,然后以某种方式设法专门连接我的服务器(如何?),然后询问当前的 lsn。现在我如何参数化 mysqlbinlog 从那个位置开始?它的命令行开关似乎可以从日期或行号开始......
以下一项或多项
read_only=1 作为恢复期间的服务器配置。(确保应用程序/cron 进程没有使用
SUPER
/READ ONLY ADMIN
权限如果所有应用程序都是远程的并且您正在从实际计算机进行还原,则使用skip-networking启动服务器。
关闭应用程序
除了恢复所需的访问权限之外,从任何地方启用防火墙规则。
通常按位置或 gtid 而不是 LSN。完整备份快照应记录其快照位置,如
mariadb-dump
或--dump-slave
(--master-data
可能--gtid
)。这将--start-position
根据您使用的是 master 的 binlog 还是本地来记录用于恢复的信息。drop tables
结束位置可以是基于时间的,但您通常会在 中寻找明确的破坏性事件(例如:)mariadb-binlog
并运行重放直到那里(--stop-position
)。为了进一步恢复,您可以在损坏事件之后的起点运行其他可能可恢复的位。