【MySQL】数据库——备份与恢复,日志管理

一、数据备份的重要性

1.备份的主要目的是灾难恢复

  1. 在生产环境中,数据的安全性至关重要

  2. 任何数据的丢失都可能产生严重的后果
  3. 造成数据丢失的原因:
  • 程序错误
  • 人为,操作错误
  • 运算错误
  • 磁盘故障
  • 灾难(如火灾、地震)和盗窃

2.数据库备份的分类

物理备份:直接对数据库的数据文件或者日志文件进行备份.

  • 冷备份(脱机备份) :是在关闭数据库的时候进行的
  • 热备份(联机备份) :数据库处于运行状态,依赖于数据库的日志文件
  • 温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作

逻辑备份:对数据库的库或表对象进行备份.

  • 即以sql语句的形式,把库、表结构、表数据保存下来
数据库的备份策略
  • 完全备份(全量备份):每次对数据库进行完整的备份
  • 差异备份:备份自从上次完全备份之后被修改过的文件
  • 增量备份:只有在上次完全备份或者增量备份后被修改的文件才会被备份

二、MySQL的完全备份与恢复

物理冷备份(完全备份)与恢复    tar压缩打包

systemctl stop mysqld
mkdir /opt/backup    #将数据库备份文件保存到/opt/backup目录下
[root@localhost backup]# cd /usr/local/mysql/
[root@localhost mysql]# tar zcf /opt/backup/mysql_data-$(date +%F).tar.gz data/
[root@localhost mysql]# cd /opt/backup/
[root@localhost backup]# ls
mysql_data-2024-06-26.tar.gz
[root@localhost backup]# scp mysql_data-2024-06-26.tar.gz 192.168.100.18:~/#发送给备份数据文件的主机的根目录下~/

再在数据库备份主机(192.168.100.18)操作恢复数据库 

[root@localhost ~]# systemctl stop mysqld
[root@localhost ~]# ls[root@localhost ~]# tar xf mysql_data-2024-06-26.tar.gz 
[root@localhost ~]# ls[root@localhost ~]# cd /usr/local/mysql/
[root@localhost mysql]# ls[root@localhost mysql]# mv data/ data_old
[root@localhost mysql]# mv ~/data/ data
[root@localhost mysql]# ls[root@localhost mysql]# systemctl start mysqld
[root@localhost mysql]# mysql -uroot -pabcd1234

mysqldump进行逻辑备份

mysqldump备份数据库

备份指定数据库中的文件:
mysqldump -u用户名 -p密码 数据库名 > 指定路径的绝对路径/数据库名.sql

备份指定数据库和文件:
mysqldump -u用户名 -p密码 --databases 数据库名 > 指定路径的绝对路径/数据库名.sql

备份多个库及文件
mysqldump -u用户名 -p密码 --databases 数据库1 数据库2 > 指定路径的绝对路径/数据库名.sql
 

备份所有数据库文件:
mysqldump -u用户名 -p密码 --all-databases > 指定路径的绝对路径/数据库名.sql
 

逻辑热备份(完全备份)与恢复

mysqldump实现逻辑备份
mysqldump -u用户名 -p密码 --databases 库1 [库2 ...] > /存储路径/xxx.sql
##备份库以及库中所有表的表数据及表结构mysqldump -u用户名 -p密码 --all-databases  > /存储路径/xxx.sql
##备份所有的库以及其表数据mysqldump -u用户名 -p密码 库名 > /存储路径/xxx.sql
##只备份指定库中的所有表数据,不包含库对象mysqldump -u用户名 -p密码 库名 表1 [表2 ] > /存储路径/xxx.sql
##备份指定库中的单个或多个表的数据和表结构,不包含库对象mysqldump -u用户名 -p密码 -d 库名 表1 [表2 ] > /存储路径/xxx.sql
##只备份指定库中的单个或多个表的结构,不包含库对象,也不包含表的数据

恢复

方法一:
先登录到数据库,然后使用source +/存储路径/xxx.sql 进行恢复(如果sql文件是只备份了表数据的文件,那么需要先创建库,并use切换库后才能执行该命令)方法二:
使用sql语句来进行恢复
mysql -u用户名 -p密码 < /存储路径/xxx.sql
cat /存储路径/xxx.sql | mysql -u用户名 -p密码 
##恢复库
mysql -u用户名 -p密码  指定库名 < /存储路径/xxx.sql
cat /存储路径/xxx.sql | mysql -u用户名 -p密码 指定库名 
##恢复库中的表,且需要库是存在的

三、MySQL的增量备份与恢复

增量备份是采用的物理二进制日志文件分割来完成增量备份的
启用相关日志需要  编辑 /etc/my.cnf 文件内容,末行添加以下内容
 

vim /etc/my.cnf#开错误日志
log-error=/usr/local/mysql/data/mysql_error.log
#开通用查询日志
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log
#开二进制日志
log_bin=mysql_bin
#开启慢查询日志
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=2

重启mysql并查看日志

[root@zx1 backup]# systemctl restart mysqld
[root@zx1 backup]# cd /usr/local/mysql/data/
[root@zx1 data]# ls
auto.cnf         ib_logfile0       mysql_general.log     sys
ca-key.pem       ib_logfile1       mysql_slow_query.log  zx
ca.pem           ibtmp1            performance_schema    zx1
client-cert.pem  mysql             private_key.pem       zx2
client-key.pem   mysql_bin.000001  public_key.pem
ib_buffer_pool   mysql_bin.index   server-cert.pem
ibdata1          mysql_error.log   server-key.pem
[root@zx1 data]# vim /etc/my.cnf
[root@zx1 data]#

刷新生成二进制日志文件的两种方式:

(1)重启数据库服务:systemctl restart mysqld; 

(2)flush-logs命令刷新:mysqladmin -uroot -pabc123 flush-logs;

二进制日志(binlog)有3种不同的记录格式:

STATEMENT(基于SQL语句):默认格式是STATEMENT。该方式记录语句快,占用内存空间少。但高并发情况下会导致记录日志顺序紊乱,造成恢复数据时发生偏差。
ROW(基于行):基于数据内容行进行记录,不仅记录执行的命令语句,还会记录命令影响的相关数据行。
MIXED(混合模式):高并发情况下ROW方式进行记录,一般情况下采用STATEMENT方式进行记录。

1、手动增量备份

手动增量备份的方式有三种:
第一种:手动刷新
mysqladmin -uroot -pabc123 flush-logs第二种:重启mysqld服务
systemctl restart mysqld第三种:二进制日志文件的大小达到1G的时候会进行自动分割
与max_binlog_size大小相关
默认为1073741824字节等于1G

2、增量备份恢复

mysqlbinlog --no-defaults 指定binlog |mysql -u用户名 -p密码 
[root@ll data]# cd /root/back-everyday/
[root@zll back-everyday]# ls
mysql_bin.20240624  mysql_bin.20240625  mysql_bin.20240626
[root@ll back-everyday]# mysqlbinlog --no-defaults mysql_bin.20240625 | mysql -u root -pabc123
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@ll back-everyday]# mysql -u root -pabc123 -e 'select * from zx.zx;'
mysql: [Warning] Using a password on the command line interface can be insecure.
+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  1 | scj  | 男   |   20 |
|  2 | zx   | 男   |   21 |
|  3 | tc   | 男   |   20 |
|  4 | ctt  | 女   |   20 |
|  5 | jlh  | 男   |   20 |
+----+------+------+------+
[root@ll back-everyday]# mysqlbinlog --no-defaults mysql_bin.20240626 | mysql -u root -pabc123
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@ll back-everyday]# mysql -u root -pabc123 -e 'select * from zx.zx;'              mysql: [Warning] Using a password on the command line interface can be insecure.
+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  1 | scj  | 男   |   20 |
|  2 | zx   | 男   |   21 |
|  3 | tc   | 男   |   20 |
|  4 | ctt  | 女   |   20 |
|  5 | jlh  | 男   |   20 |
|  6 | zyr  | 男   |   20 |
|  7 | tj   | 男   |   20 |
+----+------+------+------+

4、增量备份断点恢复

第一种:基于位置恢复
基于位置点恢复
mysqlbinlog --no-defaults --start-position="" --stop-position="" 指定binlog |mysql -u用户名 -p密码 
第二种:基于时间点恢复
基于时间点恢复
mysqlbinlog --no-defaults --start-datetime="" --stop-datetime="" 指定binlog |mysql -u用户名 -p密码 

如果需要恢复到某条sql语句之前的所有数据,就stop在这个语句的位置点或时间点之前
如果需要恢复某条sql语句及其之后的所有数据,就从这个语句的位置点或时间点开始start 

总结

备份方法
物理备份:直接对数据库的物理文件(数据文件、日志文件等)进行备份
逻辑备份:对数据库的库和表对象以SQL语言的形式导出进行备份备份策略
完全备份:每次备份都备份完整的库或者表数据
差异备份:只备份上一次完全备份后的更新数据
增量备份:每次备份只备份上一次完全备份或增量备份后的更新数据数据库上云迁移     冷迁移     物理冷备      先关闭数据库,再打包备份+恢复热迁移     阿里云 DTS完全备份
物理冷备:先关闭数据库,使用tar命令打包备份数据库的数据目录和文件  mysql/data/mysqldump逻辑热备
mysqldump -uXXX -pXXX  --databases 库1 [库2 ....] > XXX.sql       备份一个或多个库及库中所有的表数据
mysqldump -uXXX -pXXX  --all-databases > XXX.sql                  备份所有的库
mysqldump -uXXX -pXXX  库名 > XXX.sql                             备份指定库中的所有的表数据,不包含库对象
mysqldump -uXXX -pXXX  库名 表1 [表2 ....] > XXX.sql              备份指定库中的一个或多个表数据,不包含库对象xtrabackup物理热备完全恢复
先登录到数据库,再执行 source XXX.sql (如果sql文件是只备份了表数据的文件,需要先创建库并 use 切换库后再执行)mysql -uXXX -pXXX < XXX.sql         cat XXX.sql | mysql -uXXX -pXXX                          恢复库
mysql -uXXX -pXXX 库名 < XXX.sql    cat XXX.sql | mysql -uXXX -pXXX 库名                     恢复表增量备份
通过刷新二进制日志间接实现增量备份
mysqladmin -uXXX -pXXX flush-logs查看二进制日志内容
mysqlbinlog --no-defaults --base64-output=decode-rows -v <BINLOG>使用二进制日志增量恢复
mysqlbinlog --no-defaults <BINLOG> | mysql -uXXX -pXXX断点恢复
基于位置点恢复
mysqlbinlog --no-defaults --start-position='开始位置点' --stop-position='结束位置点'  <BINLOG> | mysql -uXXX -pXXX基于时间点恢复
mysqlbinlog --no-defaults --start-datetime='YYYY-mm-dd HH:MM:SS' --stop-position='YYYY-mm-dd HH:MM:SS'  <BINLOG> | mysql -uXXX -pXXX如果需要恢复到某条sql语句之前的所有数据,就stop在这个语句的位置点或时间点之前
如果需要恢复某条sql语句及其之后的所有数据,就从这个语句的位置点或时间点开始start

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

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

相关文章

【5G射频基本架构】

平台框架 平台演进及搭配 5G NR频谱 NSA/SA/ENDC 在双连接中&#xff0c;UE在连接状态下可同时使用至少两个不同基站的无线资源。对于Sprint&#xff0c;ENDC将允许设备在相同的频段&#xff08;41 / 2.5 GHz频段&#xff09;上同时访问LTE和5G。 手机硬件实现ENDC方式—类似LT…

动态住宅代理IP的优势是什么?什么地方用到?

在大数据时代的背景下&#xff0c;代理IP成为了很多企业顺利开展的重要工具。代理IP地址可以分为住宅代理IP地址和数据中心代理IP地址。选择住宅代理IP的好处是可以实现真正的高匿名性&#xff0c;而使用数据中心代理IP可能会暴露自己使用代理的情况。 住宅代理IP是指互联网服务…

数据库系统概论 | 触发器代码 | 行级触发器 | 语句级触发器

触发器 这篇博客拿两个例子来解释一下什么是行级触发器和语句级触发器。 **例子1&#xff1a;**当对表SC的Grade属性进行修改时&#xff0c;若分数增加了10%&#xff0c;则将此次操作记录到另一个表SC_U&#xff08;Sno CHAR(8)、Cno CHAR(5)、Oldgrade SMALLINT、Newgrade S…

Flink 窗口触发器(Trigger)(一)

Flink 窗口触发器(Trigger)(一) Flink 窗口触发器(Trigger)(二) Flink的窗口触发器&#xff08;Trigger&#xff09;是流处理中一个非常关键的概念&#xff0c;它定义了窗口何时被触发并决定触发后的行为&#xff08;如进行窗口数据的计算或清理&#xff09;。 一、基本概念 …

[数据集][目标检测]人员状态跑睡抽烟打电话跌倒检测数据集4943张5类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4943 标注数量(xml文件个数)&#xff1a;4943 标注数量(txt文件个数)&#xff1a;4943 标注…

[Leetcode 136][Easy]-只出现一次的数字

目录 题目描述 具体思路 题目描述 原题链接 具体思路 ①首先看到数组中重复的数字&#xff0c;想到快慢指针&#xff0c;但是数组的元素是乱序的不好求。因此先对数组排序。使用了STL库的sort函数&#xff0c;时间复杂度O(nlogn)不符合题目要求&#xff0c;空间复杂度O(1)。…

Pytorch学习之torch.split函数

Pytorch学习之torch.split函数 一、简介 torch.split用于将一个张量&#xff08;tensor&#xff09;沿指定维度&#xff08;dim&#xff09;拆分为多个子张量。这个函数对于处理需要按块拆分数据的任务非常有用&#xff0c;例如在自然语言处理和图像处理中的数据预处理。 二…

RXMH2 RK223 069 AS大容量中间继电器 板前接线 约瑟JOSEF

RXMH2大容量中间继电器型号&#xff1a; RXMH2 RK 223 067大容量中间继电器&#xff1b; RXMH2 RK 223 068大容量中间继电器&#xff1b; RXMH2 RK 223 069大容量中间继电器&#xff1b; RXMH2 RK 223 070大容量中间继电器&#xff1b; 用途 用于电力系统二次回路及工业自…

基于Hadoop平台的电信客服数据的处理与分析③项目开发:搭建Kafka大数据运算环境---任务11:基础环境准备

任务描述 任务主要是安装配置基础环境&#xff0c;主要内容包括&#xff1a; 1、安装java Kafka和ZooKeeper都需要安装Java环境&#xff0c;推荐至少Java8及以上版本 2、安装ZooKeeper ZooKeeper是Kafka集群的必要组件 3、安装kafka Kafka版本包括使用的scala语言版本和kafka版…

Ubuntu22.04上Docker的安装

1. 使用APT安装 首先安装HTTPS传输的软件包和CA证书&#xff0c;确保软件下载过程中不被篡改。 sudo apt-get updatesudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release -y然后&#xff0c;使用国内源&#xff0c;并添加软件源的 GPG 密钥以防…

Java面试题:讨论持续集成/持续部署的重要性,并描述如何在项目中实施CI/CD流程

持续集成/持续部署&#xff08;CI/CD&#xff09;的重要性 持续集成&#xff08;Continuous Integration, CI&#xff09; 和 持续部署&#xff08;Continuous Deployment, CD&#xff09; 是现代软件开发的重要实践。这些方法通过自动化构建、测试和部署过程&#xff0c;显著…

Ubuntu 用户配置

环境信息 系统版本Ubuntu16.04.1-Ubuntu x86_64 创建用户组 新建一个用户组&#xff0c;GID为888。 sudo addgroup –g 888 组名删除用户组 sudo delgroup 组名创建用户 username 为用户名&#xff0c;执行后系统会提示输入新用户的密码&#xff0c;后续输入其他信息&#xff0…

代码随想录day34 贪心(5)

56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 写法一&#xff1a;维护right和left两个数作为当前区间的左右边界 class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:intervals.sort(key lambda x: x[0])left intervals[0][0]ri…

番外1:企业数据

数据类别说明 企业中除了主数据和次级数据外,企业中还有其他一些常见的数据分类,这些数据类型根据其特定的用途和性质,在企业的各个功能和部门中起着重要作用。 主数据(Master Data) 主数据是企业中核心、长期存在且在整个组织中广泛使用的关键数据。主数据具有以下特征:…

Vue2和Vue3的区别Vue3的组合式API

一、Vue2和Vue3的区别 1、创建方式的不同&#xff1a; &#xff08;1&#xff09;、vue2:是一个构造函数&#xff0c;通过该构造函数创建一个Vue实例 new Vue({})&#xff08;2&#xff09;、Vue3:是一个对象。并通过该对象的createApp()方法&#xff0c;创建一个vue实例。 Vue…

RAG技术下的文档智能检索

在数字化浪潮的推动下&#xff0c;信息检索已成为我们日常生活中不可或缺的一部分。然而&#xff0c;随着数据量的爆炸式增长&#xff0c;如何快速精准地从海量文档中检索出有价值的信息&#xff0c;成为了一个巨大的挑战。本文将带您走进 Pinecone 向量数据库的世界&#xff0…

AIGC到底如何改变创意设计?

在当今数字化时代&#xff0c;AIGC&#xff08;生成式人工智能&#xff09;技术的崛起对创意设计领域产生了深远的影响。AIGC不仅为设计师提供了新的工具和方法&#xff0c;还改变了传统的设计流程和思维方式。 传统的设计过程中&#xff0c;设计师需要耗费大量时间在绘图、修…

npm install puppeteer 报错 npm ERR! PUPPETEER_DOWNLOAD_HOST is deprecated解决办法

npm install puppeteer 报错如下&#xff1a; npm ERR! PUPPETEER_DOWNLOAD_HOST is deprecated. Use PUPPETEER_DOWNLOAD_BASE_URL instead. npm ERR! Error: ERROR: Failed to set up Chrome v126.0.6478.126! Set "PUPPETEER_SKIP_DOWNLOAD" env variable to sk…

【Linux进程】僵尸进程与孤儿进程

前言 僵尸进程和孤儿进程是Linux中极为重要的两个种进程状态, 本文将会围绕这三个问题: 是什么? 为什么? 如何产生的? 详细的介绍这两种进程; 以及一些使用场景. 僵尸进程 在了解孤儿进程之前, 需要先引入僵尸进程的概念; 什么是僵尸进程? 僵尸进程: 就是处于僵死状态的进…

揭秘代理IP:原理、优势与应用场景全面解析

随着数字化进程的加速&#xff0c;网络安全已经成为现代社会不可或缺的一环。无论是政府机构、企业还是个人用户&#xff0c;都面临着越来越多的网络威胁。本文将深入探讨网络安全的重要性、面临的主要威胁以及应对策略&#xff0c;旨在为读者提供一个全面的网络安全视角。 1.…