mysql数据库完全备份和增量备份与恢复

news2024/11/24 17:04:31

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日志概述:

  1. 什么是binlog日志?
  2. 也称作二进制日志
  3. mysql服务日志文件的一种
  4. 记录除查询外的所有SQL语句
  5. 可用于数据备份和恢复
  6. 配置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/
  1. 主机名-bin.index 索引文件
  2. 主机名-bin.000001 第一个二进制文件
  3. 主机名-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     |
+----+-------+------+-----+---------------------+

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/346513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于stm32mp157的嵌入式linux+qt项目实战物联网毕业设计选题之智慧医疗项目

stm32mp157开发板FS-MP1A是华清远见自主研发的一款高品质、高性价比的Linux单片机二合一的嵌入式教学级开发板。开发板搭载ST的STM32MP157高性能微处理器&#xff0c;集成2个Cortex-A7核和1个Cortex-M4 核&#xff0c;A7核上可以跑Linux操作系统&#xff0c;M4核上可以跑FreeRT…

吃瓜教程 | Datawhale 打卡(Task 01)

第1章 绪论 引言 机器学习致力于研究如何通过计算的手段&#xff0c;利用经验来改善系统自身的性能。 “经验”通常以“数据”的形式存在。 机器学习研究的主要内容&#xff1a; 在计算机上从数据中产生“模型”&#xff08;model&#xff09;的算法&#xff0c;即“学习算法…

软件开发风险 需要规避的4个重点

1、前期减少投资 开发软件&#xff0c;最好减少前期的投入。软件开发成本高低是取决于所需开发的功能&#xff0c;需求越多&#xff0c;需要实现的功能越多&#xff0c;开发成本就越高。在不确定开发软件能够带来预期价值的情况下&#xff0c;建议先开发核心功能&#xff0c;辅…

分享166个HTML医疗保健模板,总有一款适合您

分享166个HTML医疗保健模板&#xff0c;总有一款适合您 166个HTML医疗保健模板下载链接&#xff1a;https://pan.baidu.com/s/1tBFEInec5Jnw_ShQd21MJg?pwdakif 提取码&#xff1a;akif Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 import os import shuti…

【残差稠密网络:医学图像:超分】

Residual dense network for medical magnetic resonance images super-resolution &#xff08;医学磁共振图像超分辨率的残差稠密网络&#xff09; 高分辨率磁共振成像&#xff08;MRI&#xff09;有助于专家定位病灶和诊断疾病&#xff0c;但高分辨率MRI难以获得。此外&am…

PyQt5数据库开发1 4.2 配置SQL Server 2008 数据源(ODBC编程)

文章目录 配置SQL Server 2008 数据源&#xff08;ODBC编程&#xff09; 1. 了解要配置的数据源服务器名称&#xff0c;以及数据库和对应表 2. 打开控制面板&#xff0c;点击管理工具 3. 双击数据源 4. 选择“用户DSN”选项卡&#xff0c;点击“添加” 5. 选择SQL Serv…

晚上下班之后可以做什么副业,业余时间需要利用起来

对大多数普通人来说&#xff0c;他们晚上有很多空闲时间&#xff0c;但他们总是在手机上玩游戏&#xff0c;刷视频&#xff0c;白白度过一夜。事实上&#xff0c;近年来&#xff0c;很多朋友都想利用晚上的时间做一些副业&#xff0c;因为目前的工资已经不能满足自己的需求&…

第05章_MySQL排序与分页

第05章_排序与分页 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 1. 排序数据 如果没有使用排序操作&#xff0c;默认情况下查询返回的数据时按照添加数据的顺序显示的 SELECT employee_id, la…

yocto创建自己的machine

前面讲了如何离线构建yocto工程&#xff0c;这节讲如何创建自己的machine&#xff0c;在初始化yocto启动bitbake需要输入如下命令 DISTROfsl-imx-fb MACHINEimx6ull14x14evk source imx-setup-release.sh -b build其中DISTRO用来指定发行版本 MACHINE用来指定硬件平台 build为构…

HTML复习1

VSCode 工具生成骨架标签新增代码 < !DOCTYPE html>表示的什么意思&#xff1f; 这句代码的意思是&#xff1a;当前页面采取的是HTML5版本来显示网页. 注意&#xff1a; < !DOCTYPE> 声明位于文档中的最前面的位置&#xff0c;处于 < html> 标签之前。< …

SAP S/4HANA Cloud 2302 财务模块亮点

&#xff08;亮点1:&#xff09;含项目制造的按订单设计 (ETO) 使用 SAP S/4HANA Cloud 2302&#xff0c;新的范围项目 6GD首先发布在德国和美国的国家版本下&#xff0c;提供项目制造的按订单设计 (ETO)的功能。 价值体现 借助 ETO 解决方案&#xff0c;您可以&#xff1a;…

【模型部署】TensorRT的安装与使用

文章目录1.TensorRT的安装1.1 cuda/cudnn以及虚拟环境的创建1.2 根据cuda版本安装相对应版本的tensorRT2. TensorRT的使用2.1 直接构建2.2 使用 Python API 构建2.3 使用 C API 构建2.3.1 属性配置2.3.2 验证2.4 IR 转换模型2.4.1 使用 Python API 转换2.4.2 使用 C API 转换2.…

Moonbeam生态说|走近生态项目SubWallet

「Moonbeam生态说」是Moonbeam中文爱好者社区联合Moonbeam中文高级大使组织的社区AMA活动。该活动为已部署Moonriver或Moonbeam的项目方提供了在主流Moonbeam非官方中文社区内介绍自己的项目信息&#xff0c;包括&#xff1a;项目介绍、团队介绍、技术优势等&#xff0c;帮助社…

【Unity VR开发】结合VRTK4.0:创建抽屉

语录&#xff1a; 为有牺牲多壮志&#xff0c;敢叫日月换新天。 前言&#xff1a; 前面我们知道了门的基本实现原理是通过角度驱动器实现的&#xff0c;那么今天我们来实现一下抽屉的实现原理&#xff1a;线性驱动器。 正文&#xff1a; 步骤一&#xff1a; 首先我们需要在新…

零基础学Java要具备哪些前提条件?

很多零基础的学员对于学Java比较迷茫&#xff0c;想通过学Java掌握一技之长&#xff0c;却不知道入门需要具备哪些条件?不知道怎么去学习?下面详细来和大家聊聊&#xff1a;首先&#xff0c;要对Java语言感兴趣&#xff0c;兴趣是最好的老师&#xff0c;只有拥有兴趣才能在学…

浅析云边端协同架构的应用意义与EasyCVR视频融合能力升级

随着5G时代的到来&#xff0c;万物互联产生了海量数据&#xff0c;据IDC预测&#xff0c;到2025年全球设备连接总数将达到1000亿&#xff0c;集中式处理模型下核心网络无法承载如此大的数据量传输&#xff0c;数据也无法在云中心存储计算&#xff0c;因此基于云边端的架构模式成…

ATR指标在外汇交易中的另类运用方法

当涉及到外汇交易时&#xff0c;有许多不同的指标可以使用。然而&#xff0c;ATR指标可能是一个被低估的工具&#xff0c;可以帮助您发现有利可图的交易机会。本文将介绍ATR指标是什么&#xff0c;如何使用它来识别价格波动和制定交易策略&#xff0c;以及如何在外汇市场中另辟…

DRF之实战总结

前言 DRF概念&#xff1a;Django REST framework框架是一个用于构建Web API的强大而又灵活的工具. 通常简称为DRF框架 或 REST framework框架 特点&#xff1a; 提供了定义序列化器serializer的方法,可以快速根据Django ORM或者其他库自动序列化/反序列化;提供了丰富的类视图…

解决rimraf使用时提示unexpected token “.”

解决rimraf使用时提示unexpected token “.” 前言 最近运行一个Cordova项目时&#xff0c;npm install后打包&#xff0c;命令栏提示了下面这个问题&#xff1a; 很奇怪啊&#xff0c;就我这里有问题&#xff0c;别人之前都没事&#xff0c;很头疼。 问题原因 经过一番摸索…

centos安装FastDFS,集成到SpringBoot中

前言 本教程采用centos7 实测 安装fastdfs&#xff0c;每一步都存在截图&#xff0c;安装不成功你就我 最关键的是采用springboot 集成 fastdfs&#xff0c;上传保存文件信息 小序 FastDFS是一个开源的分布式文件系统&#xff0c;她对文件进行管理&#xff0c;功能包括&…