跳到主要内容

备份恢复

全量备份恢复

mysqldump备份

# 备份单库和单表
mysqldump -u username -p database_name 表名> backup.sql

# 备份单库和多表
mysqldump -u username -p database_name 表名1 表名2 ...> backup.sql

# 备份单库的所有表
mysqldump -u username -p database_name > backup.sql

# 例如
mysqldump -uroot -proot studb > d:/backup.sql
# -p如果写密码必须紧贴-p参数
# 以上命令在操作系统终端命令行中执行

恢复

# 还原数据
mysql -u username -p database_name < backup.sql
提示

注意: 需要提前准备数据库,导入已存在的库 在迁移过程中,确保源服务器和目标服务器的 MySQL 版本兼容。

binlog还原操作

1.准备数据和日志文件

--清空原有的日志文件
RESET MASTER;

--准备数据,插入数据 -> 000001日志文件
CREATE DATABASE test08_binlog;
USE test08_binlog;
CREATE TABLE table_01(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL
);
INSERT INTO table_01(NAME) VALUES('二狗子'),('驴蛋蛋');

--重启一个新的日志文件 -> 000002日志文件
FLUSH LOGS;

--将删除数据和插入数据植入第二个日志文件 -> 000002日志文件
DELETE FROM table_01 WHERE id = 2; #删除驴蛋蛋
INSERT INTO table_01(NAME) VALUES('狗剩子');
SELECT * FROM table_01;

2.查看日志文件和命令清单

查看日志文件

SHOW BINARY LOGS;

某个日志文件的命令清单

SHOW BINLOG EVENTS; --查看第一个日志的清单 000001
SHOW BINLOG EVENTS IN '清单文件名' FROM pos LIMIT OFFSET , NUMBER; --from从哪个位置开始查询
SHOW BINARY LOGS;

SHOW BINLOG EVENTS;

SHOW BINLOG EVENTS IN 'my_logbin.000002';

SHOW BINLOG EVENTS IN 'my_logbin.000002' FROM 391 LIMIT 1 , 2;

3.查看详细内容

在操作系统命令行中执行

mysqlbinlog -v binlog日志文件

4.跳过删除步骤找回数据

本质上是导出执行过的sql重新执行,所以对一些历史留存数据的误删除情况似乎没什么用

  • mysqlbinlog 常见的选项:
    • --start-datetime 从二进制日志中读取指定时间戳或者本地计算机时间之后的日志事件。
    • --stop-datetime 从二进制日志中读取指定时间戳或者本地计算机时间之前的日志事件。
    • --start-position从二进制日志中读取指定position 事件位置作为开始。
    • --stop-position 从二进制日志中读取指定position 事件位置作为事件截至。

导出执行记录,跳过删除的部分

mysqlbinlog my-logbin.000001> d:/my_binlog.000001.sql # 将其他的日志完整导出
mysqlbinlog --stop-POSITION=删除命令的开始的pos my-logbin.000002> d:/my_binlog.391.sql # 02日志删除之前
mysqlbinlog --start-POSITION=删除命令的下一个命令开始pos my-logbin.000002> d:/my_binlog.441.sql ​# 02日志删除之后

重新执行

# 利用脚本恢复数据,避免跑路
#1. mysql连接情况下执行,删除原有库
drop database test08_binlog;
# 2. 脚本恢复即可
mysql -uroot -proot < d:/my_binlog.000001.sql
mysql -uroot -proot < d:/my_binlog.391.sql
mysql -uroot -proot < d:/my_binlog.441.sql ​
# 不需要提前准备库表,因为日志生成的sql脚本带有建库和表语句