如何从二进制日志中恢复数据

Ant*_*nto 13 mysql mysql-5.5

如何从二进制文件恢复我的文件和照片?

小智 9

你知道你需要从哪些binlog文件中恢复,有多少binlog文件吗?

使用mysqlbinlog实用程序,我们可以查看 binlog 文件内容。

如果它是单个文件,您可以使用以下方法恢复:

mysqlbinlog /var/lib/mysql-bin.000016 | mysql –uroot –pReset123
Run Code Online (Sandbox Code Playgroud)

如果是多个文件,那么只需将所有内容提取到一个 .sql 文件中并直接恢复它:

mysqlbinlog /var/lib/mysql-bin.000016 > /logs/allbinlog.sql
Run Code Online (Sandbox Code Playgroud)

要将第二个 binlog 内容附加到 allbinlof.sql 文件,请使用以下命令:

mysqlbinlog /var/lib/mysql-bin.000016 >> /logs/allbinlog.sql
Run Code Online (Sandbox Code Playgroud)

您还可以使用 mysqlbinlog 选项排除某些语句。试试下面的选项:

mysqlbinlog --help
Run Code Online (Sandbox Code Playgroud)


小智 7

使用以下步骤从二进制日志恢复数据或使用此链接了解恢复过程:MySQL 二进制日志恢复

首先,从最新的备份中恢复数据库

mysql -u username -ppassword database_name < dump.sql
Run Code Online (Sandbox Code Playgroud)

然后执行以下任一操作:

  • 从二进制日志恢复其余数据。

    如果您有多个二进制日志要在 MySQL 服务器上执行,安全的方法是使用与服务器的单个连接来处理它们。

    mysqlbinlog mysql_bin.000001 | mysql -u root -ppassword database_name
    mysqlbinlog mysql_bin.000002 | mysql -u root -ppassword database_name
    
    Run Code Online (Sandbox Code Playgroud)

    或者:

    mysqlbinlog mysql_bin.000001 mysql_bin.000002 | mysql -u root -ppassword database_name
    
    Run Code Online (Sandbox Code Playgroud)
  • 根据时间恢复数据

    mysqlbinlog --start-datetime="2005-04-20 10:01:00" \
                --stop-datetime="2005-04-20 9:59:59" mysql_bin.000001 \
                | mysql -u root -ppassword database_name
    
    Run Code Online (Sandbox Code Playgroud)
  • 根据位置恢复数据

    mysqlbinlog --start-position=368315 \
                --stop-position=368312 mysql_bin.000001 \
                | mysql -u root -ppassword database_name
    
    Run Code Online (Sandbox Code Playgroud)

  • 如文档中所述,第一个恢复多个二进制日志的示例特别不安全。 (2认同)

Iva*_*sev 7

首先需要注意的是,binlog文件包含数据库在一段时间内的变化,但并不包含所有数据,仅恢复binlog文件是没有意义的。通常,要恢复数据库,您需要完整备份以及完整备份后创建的所有二进制日志文件。要从binlog文件中恢复数据,需要正确进行全量备份。

mysqldump -u root -ppassword --flush-logs --delete-master-logs  --all-databases > full-backup.sql
Run Code Online (Sandbox Code Playgroud)

命令中有两个重要参数:

--flush-logs- 此参数开始写入新的二进制日志文件。

--delete-master-logs- 删除旧的二进制日志文件

因此,在具有二进制日志的文件夹中将仅存在完整备份后创建的二进制日志文件。

要恢复数据,首先要恢复完整备份

mysql -u root -ppassword  < full-backup.sql
Run Code Online (Sandbox Code Playgroud)

然后通过mysqlbinlog实用程序恢复所有binlog文件,指定binlog文件的路径(顺序很重要)。

mysqlbinlog  mysql_bin.000023 mysql_bin.000024 mysql_bin.000025 | mysql -u root -ppassword
Run Code Online (Sandbox Code Playgroud)

--

--delete-master-logs请注意,如果您使用主\从复制,那么在主服务器上执行完整备份时不应使用,因为这可能会破坏复制

但在这种情况下,您必须记住该参数创建了哪个特定的 binlog 文件--flush-log,并在恢复过程中使用它以及稍后创建的所有 binlog 文件。

有关如何备份和恢复增量备份的更多详细信息,请参阅本文