侧边栏壁纸
博主头像
DOKI SEKAI博主等级

行动起来,活在当下

  • 累计撰写 114 篇文章
  • 累计创建 38 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

MySQL 数据库恢复流程文档

君
2024-06-04 / 0 评论 / 3 点赞 / 40 阅读 / 6933 字

MySQL 数据库恢复流程文档(删库,删表,错误更新)

本文档详细描述了如何在 macOS 和 Linux 系统上,通过 Homebrew 或其他方式安装的 MySQL 服务,使用二进制日志文件(binlog)恢复到指定时间点之前的数据库状态。包括配置调整、MySQL 凭证管理和执行恢复脚本的步骤。

重要!!!

一定先备份binlog再执行!!!
备份这台服务器!!!!(防止恢复中错误操作其他库)
若恢复的库没有删除新建(只创建过一次),成功概率非常高
若多次创建过也没关系,记得从第一个binlog文件恢复,一直到最后一个
恢复过程极慢,若服务器配置不足建议提取binlog在性能高的主机恢复!!!!

前提条件

  • macOS 或 Linux 系统
  • 通过 Homebrew 或其他方式安装的 MySQL
  • 启用了二进制日志
  • 备份的二进制日志文件

步骤概述

  1. 调整 MySQL 配置以允许更大的包传输。
  2. 使用 mysql_config_editor 配置 MySQL 凭证。
  3. 备份现有的二进制日志文件。
  4. 编写并运行恢复脚本。

详细步骤

1. 调整 MySQL 配置

编辑 MySQL 配置文件

在 macOS 上,使用 Homebrew 安装的 MySQL 配置文件通常位于 /usr/local/etc/my.cnf。如果文件不存在,可以创建它。在 Linux 上,配置文件通常位于 /etc/my.cnf/etc/mysql/my.cnf

# macOS
sudo nano /usr/local/etc/my.cnf

# Linux
sudo nano /etc/my.cnf

增加 max_allowed_packet 设置

[mysqld] 部分中增加或修改 max_allowed_packet 设置,例如:

[mysqld]
max_allowed_packet=256M

重启 MySQL 服务器

保存配置文件并重启 MySQL 服务器,使更改生效:

# macOS
brew services restart mysql

# Linux (Debian/Ubuntu)
sudo systemctl restart mysql

# Linux (CentOS/RedHat)
sudo systemctl restart mysqld

2. 使用 mysql_config_editor 配置 MySQL 凭证

使用 mysql_config_editor 工具安全地存储 MySQL 凭证,避免在命令行中明文传递密码:

mysql_config_editor set --login-path=local --host=localhost --user=root --password

系统会提示输入密码,这样密码将被安全地存储。

3. 备份现有的二进制日志文件

在进行任何操作之前,建议备份现有的二进制日志文件:

mkdir -p /path/to/backup
cp /path/to/binlogs/binlog.* /path/to/backup/

4. 编写并运行恢复脚本

编写恢复脚本

以下是用于恢复数据库的脚本:

#!/bin/bash

# MySQL 登录路径
MYSQL_LOGIN_PATH="local"

# 数据库名
DATABASE="ant"

# 二进制日志文件目录
BINLOG_DIR="/path/to/binlogs"

# 恢复到的时间点
STOP_DATETIME="2024-06-04 15:24:00"

# 切换到二进制日志文件所在目录
cd $BINLOG_DIR

# 找到所有二进制日志文件并按顺序合并到一个命令中
BINLOG_FILES=$(ls binlog.* | grep -v "binlog.index" | sort | tr '\n' ' ')

# 应用所有二进制日志文件直到指定时间点,只针对特定数据库
echo "应用二进制日志文件..."
mysqlbinlog --database="$DATABASE" --stop-datetime="$STOP_DATETIME" $BINLOG_FILES | mysql --login-path=$MYSQL_LOGIN_PATH --force

# 检查应用过程是否成功
if [ $? -ne 0 ]; then
    echo "应用二进制日志文件时出错,但继续执行..."
else
    echo "二进制日志已应用至 $STOP_DATETIME。"
fi

exit 0

保存并运行脚本

  1. 保存脚本:将上述脚本保存为 apply_binlogs.sh
  2. 修改权限:运行以下命令使脚本具有可执行权限:
    chmod +x apply_binlogs.sh
    
  3. 运行脚本:执行脚本:
    ./apply_binlogs.sh
    

验证恢复过程

通过运行上述脚本,MySQL 将应用所有与 ant 数据库相关的二进制日志文件,并恢复到指定的时间点。如果配置和脚本正确,数据库将恢复到预期的状态。

停止 MySQL 服务

在进行恢复操作之前,建议先停止 MySQL 服务:

# macOS
brew services stop mysql

# Linux (Debian/Ubuntu)
sudo systemctl stop mysql

# Linux (CentOS/RedHat)
sudo systemctl stop mysqld

重要提示

  • 避免多次创建或删除数据库:确保二进制日志文件中没有多次创建或删除数据库的操作,否则可能导致恢复过程出现异常。

参考资料

通过上述步骤,你可以确保正确应用所有二进制日志文件,并恢复到指定的时间点。

3

评论区