MYSQL数据库备份还原,并还原到最新状态(mysqldump)
启用二进制日志文件
vim /etc/my.cnf 配置文件位置及文件名根据实际情况确定<br>sql_log_bin=on|off:是否记录二进制日志,默认为on 在需要的时候设置为off="" <br>log_bin="/PATH/BIN_LOG_FILE:指定二进制日志文件位置;" 通常单独存放到与数据库不同的机器中="" <="" p=""></br>sql_log_bin=on|off:是否记录二进制日志,默认为on>
清理二进制日志文件
show master logs; 查看二进制日志文件列表<br>flush logs;="" 切换二进制日志文件(mysql命令),创建新的二进制日志="" <br>mysqladmin="" flush-logs="" 切换二进制日志文件(bash命令)="" <br>purge="" binary="" logs="" to="" 'mysqlbin.000005';="" 删除除mysqlbin.000005日志之前的所有日志,保留mysqlbin.000005及以后的日志="" <br>reset="" master="" 重新001开始记数二进制日志(老版本)。从mariadb10.1.6开始支持to="" #,指定从#开始记数="" <="" p=""></br>flush>
完全备份,并还原到最新状态(mysqldump)
前提条件:启用二进制日志,并单独存放。在mysql数据丢失时,可以还原最新备份到丢失时刻的数据<br>1 完全备份="" <="" p=""></br>1>
1 | mysqldump -A --single-transaction --master-data=1 > /data/backup/all_mysql.sql |
完全备份数据库文件,并存放多份到安全的地方<br>2 修改数据库(在数据表中添加多条记录。模拟数据增加,但还没有备份时数据丢失的情况。可以通过二进制日志还到最新的数据)="" <="" p=""></br>2>
1 | mysql> insert TABLENAME(col_name,...)value(value,...) |
3 数据库文件丢失<br>rm -rf="" data="" mysql="" *="" 测试效果,清空mysql数据目录,数据全部丢失,但开启了二进制日志,并单独存放在其他的硬盘中="" <br>4="" 停止mysql服务="" <="" p=""></br>rm>
1 | service mysqld stop |
5 查看完全备份时二进制日志备份的最后位置,实验时备份的最后位置为:CHANGE MASTER TO MASTER_LOG_FILE='mariadb.000001', MASTER_LOG_POS=8944;<br>通过less 命令查看最新的备份文件all_mysql.sql获取此信息="" <="" p=""></br>通过less>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | -- 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 @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */ ; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */ ; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */ ; /*!40101 SET NAMES utf8 */ ; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */ ; /*!40103 SET TIME_ZONE='+00:00' */ ; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */ ; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */ ; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */ ; /*!40111 SET @OLD_SQL_NOTES=@@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服务:
1 | service mysqld restart |
登录mysql :
1 | mysql -uroot -p |
临时关闭二进制日志,还原完全备份:
1 2 | mysql> set sql_log_bin= off ; mysql> soruce /data/backup/all_mysql.sql |
6 还原没有备份的新数据<br>新开一个终端:用mysqlbinlog工具导出存放在二进制日志中没有备份的新记录,开始位置为第4步中查询到的位置(实验时为8944) <="" p=""></br>新开一个终端:用mysqlbinlog工具导出存放在二进制日志中没有备份的新记录,开始位置为第4步中查询到的位置(实验时为8944)>
1 | mysqlbinlog --start-postion=8944 /data/bin/mariadb.000001 > /data/backup/inc.sql |
在原终端中继续还原
1 | mysql> soruce /data/backup/inc.sql |
到此已经还原全部数据
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek “源神”启动!「GitHub 热点速览」
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器