mysql数据库完全备份和增量备份与恢复
mysql数据备份:
数据备份方式
- 物理备份:
- 冷备:.冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库
- 热备:一般用于保证服务正常不间断运行,用两台机器作为服务机器,一台用于实际数据库操作应用,另外一台实时的从前者中获取数据以保持数据一致.如果当前的机器熄火,备份的机器立马取代当前的机器继续提供服务
- 冷备常用命令:cp tar scp …
- 逻辑备份:
- mysqldump //备份命令
- mysql /恢复数据命令
1. 物理备份及恢复:
1.1. 备份操作:
实例1:
mkdir -p /data/mysql
cp -r /var/lib/mysql/ /data/mysql/mysql.bak
实例2:
tar -zcvf /data/mysql/mysql.tar.gz /var/lib/mysql
实例3:
#在备份数据库创建备份目录:
mkdir /data
#备份数据
scp -r /var/lib/mysql 192.168.2.20:/data/mysql.bak
2. Mysqldump备份:
- mysqldump备份完成之前,会把所有的表锁住,导致无法写入。
2.1. 只备份表,不备份数据本身:
备份mysql数据库中的所有表,但是不会自动生成创建mysql数据库的语句:
[root@www ~]# mysqldump -uroot -p1234 mysql > /root/mysql.sql
2.2. 备份数据库与表:
备份mysql数据库中的所有表,并且会生成创建mysql数据库的SQL语句,也就是导入时不需要先创建数据库:
[root@www ~]# mysqldump -uroot -p1234 --databases mysql > /root/mysql.sql
2.3. 备份多个数据库:
备份数据库MySQL、ys到/root/ys_mysql.sql
[root@www ~]# mysqldump -uroot -p1234 --databases mysql ys > /root/ys_mysql.sql
2.4. 备份所有数据库:
[root@www ~]# mysqldump -uroot -p1234 --all-databases >/root/all.sql
或者:
[root@www ~]# mysqldump -uroot -p1234 -A >/root/all.sql
2.5. 备份mysql数据库,并且记录pos点:
[root@www ~]# mysqldump -uroot -p1234 --master-data mysql > /root/mysql.sql
2.6. 备份数据库,并刷新日志:
[root@www ~]# mysqldump -uroot -p1234 --master-data --flush-logs mysql > /root/mysql.sql
2.3. 数据库的恢复:
[root@www ~]# mysqldump -uroot -p1234 --databases ys > /root/ys.sql
首先把ys数据库删除
mysql> drop database ys;
Query OK, 31 rows affected, 2 warnings (0.06 sec)mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
| mysql |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> exit
Bye
## 恢复数据库ys
[root@www ~]# mysql -uroot -p1234 < /root/ys.sql
[root@www ~]# mysql -uroot -p1234
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
| sys |
| mysql |
| ys |
+--------------------+
4 rows in set (0.00 sec)或者是:mysql> source /root/ys.sql; ---source 命令导入数据库需要先登录到数库终端:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
| sys |
| mysql |
| ys |
+--------------------+
4 rows in set (0.00 sec)
3. 增量备份与恢复
- 增量备份与恢复的特点
- 增量备份的优点是没有重复数据,备份量不大,时间短。但缺点也很明显,需要建立在上次完全备份及完全备份之后所有的增量才能恢复。
3.1. binlog日志概述:
- 什么是binlog日志?
- 也称作二进制日志
- mysql服务日志文件的一种
- 记录除查询外的所有SQL语句
- 可用于数据备份和恢复
- 配置mysql主从同步的必要条件
3.2. 启动日志
| 配置项 | 用途 |
|---|---|
| server_id=数字 | 指定id值(1-255) |
| log_bin[=目录名/文件名] | 启用binlog日志 |
| max_binlog_size=数值m | 指定binlog日志文件容量(默认1G) |
[root@localhost ~]# vim /etc/my.cnf
修改内容如下:
[mysqld]
.....
log_bin
server_id=100
[root@localhost ~]# systemctl restart mysqld
###查看binlog日志是否开启
登录数据库
mysql> show master status;
+----------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------+----------+--------------+------------------+-------------------+
| localhost-bin.000001 | 154 | | | |
+----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
- binlog相关文件默认存放在/var/lib/mysql/
- 主机名-bin.index 索引文件
- 主机名-bin.000001 第一个二进制文件
- 主机名-bin.000002 第二个二进制文件
…
- 正常情况下binlog二进制文件默认1G容量,超过重新创建新的binlog二进制文件,想生成新的binlog日志文件方法如下:
1.重启mysql服务
systemctl restart mysqld
或者:
mysql -root -p密码 -e 'flush logs'
或者:
mysqldump --flush-logs
3.3.增量备份
- 定时执行flush logs方法重新创建新的日志,生成二进制文件序列,并及时把这些文件保存到一个安全的地方即完成了一个时间段的增量备份
##创建数据库
create database school default charset=utf8mb4;
##创建表格
use school;
create table stuinfo(-> id int primary key auto_increment,-> name char(20) not null,-> sex enum('boy','girl') not null,-> age int unsigned not null,-> likes set('run','go fishing','Listen to the music','Play basketball') default'run,play basketball');
##往stuinfo表格里插入数据
insert into stuinfo values(1,'bob','boy',25,'run,go fishing');
##查看表格数据:
select * from stuinfo;
+----+------+-----+-----+----------------+
| id | name | sex | age | likes |
+----+------+-----+-----+----------------+
| 1 | bob | boy | 25 | run,go fishing |
+----+------+-----+-----+----------------+
##退出数据库并使用mysqldump完全备份school数据库并重新创建一个binlog文件。
exit ---退出数据库
mkdir /data ---创建存放数据的目录
mysqldump -uroot -p1234 --flush-logs -B school > /data/$(date +%Y-%m-%d)-school.sql
ls /data/
2023-02-14-school.sql
##进入数据库继续往表格里插入数据
use school;
insert into stuinfo values(2,'tom','boy',28,'run,play basketball');
select * from stuinfo;
+----+------+-----+-----+---------------------+
| id | name | sex | age | likes |
+----+------+-----+-----+---------------------+
| 1 | bob | boy | 25 | run,go fishing |
| 2 | tom | boy | 28 | run,Play basketball |
+----+------+-----+-----+---------------------+
##退出数据库生成增量备份文件
exit; ---退出数据库
mysql -uroot -p1234 -e "show master status;flush logs" ----查看当前的binlog文件名称,然后创建一个新的binlog文件
+----------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------+----------+--------------+------------------+-------------------+
| localhost-bin.000002 | 436 | | | |
+----------------------+----------+--------------+------------------+-------------------+
##把localhost-bin.000002文件拷贝到/data下并修改当前日期作为增量备份文件
cp -r /var/lib/mysql/localhost-bin.000002 /data/
mv /data/localhost-bin.000002 /data/$(date +%Y-%m-%d)-localhost-bin.000002
ls /data/
2023-02-14-localhost-bin.000002 2023-02-14-school.sql
3.4. 数据恢复
##删除school的所有表
drop table stuinfo;
##查看还有其他表格
show tables;
+------------------+
| Tables_in_school |
+------------------+
+------------------+
##退出数据库,恢复数据
quit;
mysql -uroot -p1234 < /data/2023-02-14-school.sql ---先恢复完全备份的文件
mysqlbinlog /data/2023-02-14-localhost-bin.000002 | mysql -uroot -p1234 --恢复增量备份的部分。
3.5.恢复指定范围的数据
- 语法:
mysqlbinlog 选项 binlog日志名称 | mysql -uroot -p密码

3.5.1. 查看binlog日志文件
[root@localhost ~]# mysqlbinlog /data/2023-02-14-localhost-bin.000002
可以看的出来这种日志格式不易看懂
3.5.2. 修改日志记录格式
##查看当前日志记录格式
mysql> show variables like "binlog_format";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.00 sec)
三种记录格式:
1.statement 报表模式
2.row 行模式
3.mixed 混合模式##修改日志记录格式:
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
....
binlog_format=mixed
[root@localhost ~]# systemctl restart mysqld
###查看是否修改成功
mysql> show variables like "binlog_format";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | MIXED |
+---------------+-------+
1 row in set (0.01 sec)
3.5.3. 恢复指定范围数据:
##往stuinfo表格中插入数据:
insert into stuinfo values(3,'grace','girl',20,'run,play basketball');
insert into stuinfo values(4,'andy','boy',23,'play basketball');
select * from stuinfo;
+----+-------+------+-----+---------------------+
| id | name | sex | age | likes |
+----+-------+------+-----+---------------------+
| 1 | bob | boy | 25 | run,go fishing |
| 2 | tom | boy | 28 | run,Play basketball |
| 3 | grace | girl | 20 | run,Play basketball |
| 4 | andy | boy | 23 | Play basketball |
+----+-------+------+-----+---------------------+
##删除grace这个数据
delete from stuinfo where name='grace';
select * from stuinfo;
+----+------+-----+-----+---------------------+
| id | name | sex | age | likes |
+----+------+-----+-----+---------------------+
| 1 | bob | boy | 25 | run,go fishing |
| 2 | tom | boy | 28 | run,Play basketball |
| 4 | andy | boy | 23 | Play basketball |
+----+------+-----+-----+---------------------+
##查看当前的binlog日志文件名称;
show master status;
+----------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------+----------+--------------+------------------+-------------------+
| localhost-bin.000006 | 1095 | | | |
+----------------------+----------+--------------+------------------+-------------------+
### 恢复grace的数据信息
[root@localhost ~]# mysqlbinlog /var/lib/mysql/localhost-bin.000006 ---查看binlog日志内容
# at 302 ---起始pos值
#230214 17:27:39 server id 100 end_log_pos 449 CRC32 0x2dbf2580 Query thread_id=3 exec_time=0 error_code=0
use `school`/*!*/;
SET TIMESTAMP=1676366859/*!*/;
insert into stuinfo values(3,'grace','girl',20,'run,play basketball')
/*!*/;
# at 449
#230214 17:27:39 server id 100 end_log_pos 480 CRC32 0x3116b5d3 Xid = 21
COMMIT/*!*/; ---回车操作
# at 480 ---结束pos值
#230214 17:28:12 server id 100 end_log_pos 545 CRC32 0x0b918b41 Anonymous_GTID last_committed=1 sequence_number=2 rbr_only=no
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 545
[root@localhost ~]# mysqlbinlog --start-position=302 --stop-position=480 /var/lib/mysql/localhost-bin.000006 | mysql -uroot -p1234
或者
[root@localhost ~]# mysqlbinlog --start-datetime="2023-02-14 17:27:39" --stop-datetime="2023-02-14 17:28:12" /var/lib/mysql/localhost-bin.000006 | mysql -uroot -p1234
###查看是否恢复:
select * from stuinfo;
+----+-------+------+-----+---------------------+
| id | name | sex | age | likes |
+----+-------+------+-----+---------------------+
| 1 | bob | boy | 25 | run,go fishing |
| 2 | tom | boy | 28 | run,Play basketball |
| 3 | grace | girl | 20 | run,Play basketball |
| 4 | andy | boy | 23 | Play basketball |
+----+-------+------+-----+---------------------+
相关文章:
mysql数据库完全备份和增量备份与恢复
mysql数据备份: 数据备份方式 物理备份: 冷备:.冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库热备:一般用于保证服务正常不间断运行,用两台机器作为服务机器,一台用于实际数据库操作应用,另外…...
CF1667E Centroid Probabilities
题目描述 对于所有点数为 nnn 的树,如果其满足 对于所有 i∈[2,n]i\in [2,n]i∈[2,n],与 iii 相连的 jjj 中有且只有一个点 jjj 满足 j<ij<ij<i ,那么我们称其为好树 对于 1∼n1\sim n1∼n 每个点求出来有多少好树满足重心为 iii …...
全网详细总结com.alibaba.fastjson.JSONException: syntax error, position at xxx常见错误方式
文章目录1. 复现问题2. 分析问题3. 解决问题4. 该错误的其他解决方法5. 重要补充1. 复现问题 今天在JSONObject.parse(json)这个方法时,却报出如下错误: com.alibaba.fastjson.JSONException: syntax error, position at 0, name usernameat com.aliba…...
快速部署个人导航页:美好的一天从井然有序开始
很多人都习惯使用浏览器自带的收藏夹来管理自己的书签,然而收藏夹存在着一些问题。 经过长时间的累积,一些高频使用的重要网站和偶尔信手收藏的链接混在了一起,收藏夹因为内容过多而显得杂乱无章;收藏夹没有什么美观可言…...
【Python】如何在 Python 中使用“柯里化”编写干净且可重用的代码
对于中级Python开发者来说,了解了Python的基础语法、库、方法,能够实现一些功能之后,进一步追求的就应该是写出优雅的代码了。 这里介绍一个很有趣的概念“柯里化”。 所谓柯里化(Currying)是把接受多个参数的函数变换…...
ROS笔记(4)——发布者Publisher与订阅者Subscribe的编程实现
发布者 以小海龟的话题消息为例,编程实现发布者通过/turtle1/cmd_vel 话题向 turtlesim节点发送消息,流程如图 步骤一 创建功能包(工作空间为~/catkin_ws/src) $ cd ~/catkin_ws/src $ catkin_create_pkg learning_topic roscpp rospy s…...
Linux进程概念(一)
文章目录Linux进程概念(一)1. 冯诺依曼体系结构2. 操作系统(Operator System)2.1 考虑2.2 如何理解操作系统对硬件做管理?2.3 操作系统为什么要对软硬件资源做管理呢?2.4 系统调用和库函数概念2.5 计算机体系结构3. 进程的初步理解…...
Leetcode.1124 表现良好的最长时间段
题目链接 Leetcode.1124 表现良好的最长时间段 Rating : 1908 题目描述 我们认为当员工一天中的工作小时数大于 8 小时的时候,那么这一天就是「劳累的一天」。 所谓「表现良好的时间段」,意味在这段时间内,「劳累的天数」是严格…...
达梦数据库会话、事务阻塞排查步骤
查询阻塞的事务IDselect * from v$trxwait order by wait_time desc;--单机select * from v$dsc_trxwait order by wait_time desc;–DSC集群查询阻塞事务的会话信息select sf_get_session_sql(sess_id),* from v$sessions where trx_id69667;--单机select sf_get_session_sql(…...
sqlServer 2019 开发版(Developer)下载及安装
下载软件 官网只有2022的,2019使用百度网盘进行下载 安装下崽器 选择自定义安装 选择语言、以及安装位置 点击“安装” 安装 SQL Server 可能的故障 以上步骤安装后会弹出以上界面,如果未弹出,手动去安装目录下点击 SETUP.EXE 文件…...
使用Arthas定位问题
功能概述 首先,Arthas的常用功能大概有以下几个: 解决依赖冲突 sc命令:模糊查看当前 JVM 中是否加载了包含关键字的类,以及获取其完全名称。 sc -d 关键字 注意使用 sc -d 命令,获取 classLoaderHash命令:…...
性能测试之tomcat+nginx负载均衡
nginx tomcat 配置准备工作:两个tomcat 执行命令 cp -r apache-tomcat-8.5.56 apache-tomcat-8.5.56_2修改被复制的tomcat2下conf的server.xml 的端口号,不能与tomcat1的端口号重复,不然会启动报错 ,一台电脑上想要启动多个tomcat,…...
【手写 Vuex 源码】第十一篇 - Vuex 插件的开发
一,前言 上一篇,主要介绍了 Vuex-namespaced 命名空间的实现,主要涉及以下几个点: 命名空间的介绍和使用;命名空间的逻辑分析与代码实现;命名空间核心流程梳理; 本篇,继续介绍 Vu…...
opencv基础知识和绘图图形
大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…...
15- 决策回归树, 随机森林, 极限森林 (决策树优化) (算法)
1. 决策回归树: from sklearn.tree import DecisionTreeRegressor model DecisionTreeRegressor(criterionmse,max_depth3) model.fit(X,y) # X是40个点 y是一个圆 2. 随机森林 稳定预测: from sklearn.ensemble import RandomForestClassifier # model RandomForestC…...
Flink相关的记录
Flink源码编译首次编译的时候,去除不必要的操作,同时install会把Flink中的module安装到本地仓库,这样依赖当前module的其他组件就无需去远程仓库拉取当前module,节省了时间。mvn clean install -T 4 -DskipTests -Dfast -Dmaven.c…...
配置可视化-基于form-render的无代码配置服务(一)
背景 有些业务场景需要产品或运营去配置JSON数据提供给开发去使用(后面有实际业务场景的说明),原有的业务流程,非开发人员(后面直接以产品指代)把数据交给开发,再由开发去更新JSON数据。对于产…...
Java 代理模式详解
1、代理模式 代理模式是一种比较好理解的设计模式。简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。 代理模式的主要作用是扩展目标对象…...
知识付费小程序怎么做_分享知识付费小程序的作用
在线知识付费产业的主要业务逻辑是基于用户的主动学习需求,为其提供以跨领域基础知识与技能为核心的在线知识服务,提升其达到求知目的的效率。公众号和小程序的迅速发展,又为知识付费提供了技术支持,从而促进了行业的进一步发展。…...
14- 决策树算法 (有监督学习) (算法)
决策树是属于有监督机器学习的一种决策树算法实操: from sklearn.tree import DecisionTreeClassifier # 决策树算法 model DecisionTreeClassifier(criterionentropy,max_depthd) model.fit(X_train,y_train)1、决策树概述 决策树是属于有监督机器学习的一种,起源…...
揭秘ARM Mali-V VPU:V61/V550/V500内部架构、固件机制与生态现状深度解析
ARM Mali-V VPU技术全景:从V61/V550/V500架构解析到生态挑战 在移动设备视频处理领域,ARM Mali-V系列VPU(Video Processing Unit)作为SoC中的关键IP核,长期保持着神秘色彩。不同于公开资料丰富的Mali GPU系列ÿ…...
核心代码编程-文档特征提取-100分
题目描述: 一篇文档由多个文本片段组成(这里假定每个片段由小写英文字母组成,不包含其他内容),需要针对该文档的多个片段进行特征提取,提取方法如下1、特征提取处理时首先找出所有片段中都包含的字母&#…...
从Sentaurus到Silvaco:手把手教你迁移半导体仿真物理模型(附避坑指南)
从Sentaurus到Silvaco:半导体仿真物理模型迁移实战指南 当工程师需要将半导体器件仿真从Synopsys Sentaurus迁移到Silvaco Atlas平台时,最关键的挑战在于物理模型的等效转换。这不仅涉及语法差异,更需要深入理解两种工具对物理效应的不同实现…...
B站缓存视频终极转换指南:3分钟实现m4s到MP4的无损转换
B站缓存视频终极转换指南:3分钟实现m4s到MP4的无损转换 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾为B站缓存的视频无法…...
时间序列预测:朴素方法与网格搜索实战指南
1. 单变量时间序列预测中的朴素方法网格搜索在时间序列预测领域,我们经常陷入一个误区:认为只有复杂的深度学习模型才能获得良好的预测效果。但从业十年来,我发现一个被忽视的真相——简单方法往往能提供惊人的基准性能。今天我要分享的网格搜…...
终极游戏模组管理解决方案:XXMI启动器完整使用指南
终极游戏模组管理解决方案:XXMI启动器完整使用指南 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 你是否厌倦了为不同游戏安装模组时的繁琐步骤?每次切换…...
从论文到博客:如何用Markdown+LaTeX优雅排版数学公式?(解决行内/独行/矩阵排版难题)
从论文到博客:用MarkdownLaTeX打造专业数学排版的艺术 数学公式是技术写作中不可或缺的元素,但如何让它们在文档中既美观又专业?这个问题困扰着许多学术作者和技术博主。我曾花了整整一周时间调整一篇论文中的矩阵对齐问题,最终发…...
别再只敲mosquitto -c了!这5个命令行参数才是调试和部署的隐藏神器
别再只敲mosquitto -c了!这5个命令行参数才是调试和部署的隐藏神器 在MQTT生态系统中,Mosquitto作为轻量级消息代理的标杆,其命令行参数的设计哲学往往被大多数开发者低估。当你在生产环境遇到连接闪断、日志信息不足或配置热更新需求时&…...
微芯官方驱动库怎么用?实战解析MCP2518FD的CAN FD模式配置与RAM数据读写
微芯官方驱动库实战指南:MCP2518FD的CAN FD模式深度配置与RAM高效读写 1. 从零搭建MCP2518FD开发环境 在嵌入式系统开发中,CAN FD总线因其高带宽和灵活数据场特性,正逐渐取代传统CAN总线。Microchip的MCP2518FD作为一款独立CAN FD控制器&…...
算术编码 vs. 哈夫曼编码:图像压缩实战中到底该选谁?
算术编码 vs. 哈夫曼编码:图像压缩实战中到底该选谁? 在数字图像处理领域,数据压缩技术始终扮演着关键角色。面对海量图像数据的存储与传输需求,工程师们常常需要在算术编码和哈夫曼编码这两种经典熵编码方案之间做出选择。本文将…...
