启用二进制日志文件
VIM /etc/my.cnf 配置文件位置及文件名根据实际情况确定
sql_log_bin=ON|OFF: 是否记录二进制日志, 默认为 ON // 在需要的时候设置为 OFF
log_bin=/PATH/BIN_LOG_FILE: 指定二进制日志文件位置; 通常单独存放到与数据库不同的机器中
清理二进制日志文件
show master logs; 查看二进制日志文件列表
flush logs; 切换二进制日志文件 (MySQL 命令), 创建新的二进制日志
mysqladmin flush-logs 切换二进制日志文件 (bash 命令)
purge binary logs to 'mysqlbin.000005'; 删除除 mysqlbin.000005 日志之前的所有日志, 保留 mysqlbin.000005 及以后的日志
reset master logs; 重新 001 开始记数二进制日志 (老版本). 从 MariaDB10.1.6 开始支持 TO #, 指定从 #开始记数
完全备份, 并还原到最新状态 (mysqldump)
前提条件: 启用二进制日志, 并单独存放. 在 MySQL 数据丢失时, 可以还原最新备份到丢失时刻的数据
1 完全备份
mysqldump -A --single-transaction --master-data=1> /data/backup/all_mysql.sql
完全备份数据库文件, 并存放多份到安全的地方
2 修改数据库 (在数据表中添加多条记录. 模拟数据增加, 但还没有备份时数据丢失的情况. 可以通过二进制日志还到最新的数据)
MySQL> insert TABLENAME(col_name,...)value(value,...)
3 数据库文件丢失
- rm -rf /data/MySQL/* 测试效果, 清空 MySQL 数据目录, 数据全部丢失, 但开启了二进制日志, 并单独存放在其他的硬盘中
- 4 停止 MySQL 服务
- service mysqld stop
- 5 查看完全备份时二进制日志备份的最后位置, 实验时备份的最后位置为: CHANGE MASTER TO MASTER_LOG_FILE='mariadb.000001', MASTER_LOG_POS=8944;
- 通过 Less 命令查看最新的备份文件 all_mysql.sql 获取此信息
- -- MySQL dump 10.16 Distrib 10.2.23-MariaDB, for Linux (x86_64)
- --
- -- Host: localhost Database:
- -- ------------------------------------------------------
- -- Server version 10.2.23-MariaDB-log
- /*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
- /*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
- /*!40101 SET @[email protected]@COLLATION_CONNECTION */;
- /*!40101 SET NAMES utf8 */;
- /*!40103 SET @[email protected]@TIME_ZONE */;
- /*!40103 SET TIME_ZONE='+00:00' */;
- /*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
- /*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
- /*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
- /*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */;
- --
- -- Position to start replication or point-in-time recovery from
- --
- -- CHANGE MASTER TO MASTER_LOG_FILE='mariadb.000001', MASTER_LOG_POS=8944;
- --
- -- GTID to start replication from
- --
- /data/backup/all_2019-05-06.sql
- .
- .
重启 MySQL 服务:
service mysqld restart
登录 MySQL :
MySQL -uroot -p
临时关闭二进制日志, 还原完全备份:
- MySQL> set sql_log_bin=off;
- MySQL> soruce /data/backup/all_mysql.sql
6 还原没有备份的新数据
新开一个终端: 用 mysqlbinlog 工具导出存放在二进制日志中没有备份的新记录, 开始位置为第 4 步中查询到的位置 (实验时为 8944)
mysqlbinlog --start-postion=8944 /data/bin/mariadb.000001> /data/backup/inc.sql
在原终端中继续还原
MySQL> soruce /data/backup/inc.sql
到此已经还原全部数据
来源: http://www.bubuko.com/infodetail-3048456.html