小阿轩yx-MySQL备份与恢复

小阿轩yx-MySQL备份与恢复

  • 企业对信息系统依赖性越来预高,数据库担任着重要角色
  • 如果发生意外宕机或数据丢失,损失是非常严重的
  • 数据库管理员必须针对具体的业务要求制定详细的数据库备份与灾难恢复策略

对数据库要求高的行业

  • 银行
  • 证券
  • 电信等

MySQL 数据库备份概述

备份

主要目的

  • 灾难恢复

还可以

  • 测试应用
  • 回滚数据修改
  • 查询历史数据
  • 审计等

数据备份的重要性

  • 数据保障了企业业务的正常运行
  • 数据的安全性及数据的可靠性是运维的重中之重

造成数据丢失的原因有

  • 程序错误
  • 人为操作错误
  • 运算错误
  • 磁盘故障
  • 灾难(如火灾、地震)
  • 盗窃

数据库备份类型

从物理与逻辑的角度分类

可以分为

  • 物理备份
  • 逻辑备份
  • 冷备份(脱机备份)
  • 热备份(联机备份)
  • 温备份

物理备份

  • 对数据库操作系统的物理文件(如数据文件、日志文件等)的备份
  • 适用于出现问题时需要快速恢复的大型重要数据库

冷备份

  • 在数据库关闭状态下进行备份操作

热备份

  • 在数据库处于运行状态时进行备份,该备份方法依赖数据库的日志文件

温备份

  • 数据库锁定表格(不可写入但可读)的状态下进行备份

逻辑备份

  • 对数据库逻辑组件(如表等数据库对象)的备份
  • 为逻辑数据库结构(CREATE DATABASE,CREATE TABLE 语句)
  • 内容(INSERT 语句或分隔文本文件)的信息
  • 适用于可以编辑数据值或表结构较小的数据量
  • 或者不同的机器体系结构上重新创建数据
从数据库的备份策略角度分类

分为

  • 完全备份
  • 差异备份
  • 增量备份

完全备份

  • 每次对数据进行完整的备份
  • 对整个数据库、数据库结构和文件结构的备份
  • 保存的是备份完成时刻的数据库
  • 是差异备份与增量备份的基础

缺点

  • 数据存在大量重复
  • 会占用大量磁盘空间
  • 备份时间长

差异备份

  • 自从上次完全备份之后被修改过的所有文件
  • 备份时间节点从上次完整备份起
  • 备份量会越来越大

恢复

  • 只需恢复上次完全备份与最近的一次差异备份

增量备份

只有上次完全备份或增量备份后被修改的才会被备份

以上次完整备份或上次增量备份时间为点,仅备份这之间的变化

优势

  • 数据量小
  • 占用空间小
  • 备份速度快

恢复

  • 需要从上次完整备份开始到最后一次增量备份之间的所有增量一次恢复

(注:中间某次备份数据损坏,将导致数据丢失)

常见的备份方法

可采用多种方式

  • 直接打包数据库文件(物理冷备份)
  • 专用备份工具(mysqldump)
  • 二进制日志增量备份
  • 第三方工具备份等
物理冷备份
  • 需要在数据库处于关闭状态下,能较好的保证数据库完整性
  • 一般用于非核心业务,一般允许中断

特点

  • 速度快
  • 恢复最为简单
  • 通常通过直接打包数据库文件夹实现备份
专用备份工具 mysqldump 或 mysqlhotcopy

mysqldump

  • 客户端常用逻辑备份程序
  • 能够产生一组被执行后再现原始数据库对象定义和表数据的 SQL 语句
  • 可以转储一个到多个 MySQL 数据库,对其进行备份或传输到远程 SQL 服务器
  • 更为通用,可以备份各种表
  • 仅适用于某些存储引擎

mysqlhotcopy

  • 由 Time Bunce 最初编写和贡献的 Peil 脚本
  • 仅用于备份 MySAM 和 ARCHIVE 表
  • 只能运行在 UNIX 或 Linux 上,因为范围很小
通过启用二进制日志进行增量备份
  • MySQL 支持增量备份,进行增量备份时必须启用二进制日志
  • 为用户提供复制,对执行备份点后进行的数据库更改所需信息进行恢复
  • 需要刷新二进制日志

通过第三方工具备份

Percona XtraBackup

  • 是一个免费的 MySQL 热备份软件
  • 支持在线热备份 Innodb 和XtraDB
  • 也可以支持 MySQL 表备份

不过 MyISAM 表的备份要在表锁的情况下进行

Percona XtrBackup 有三个主要的工具

  • xtrabackup
  • innobackupex
  • xbstream

xtrabackup

  • 是一个编译了的二进制文件
  • 只能备份Innodb/Xtradb 数据文件

innodbackupex

  • 是一个封装了xtrabackup 的Per 脚本
  • 除了可以备份Innodb/Xtradb 之外
  • 还可以备份 MySIAM

xbstream

  • 是一个新组件
  • 能够允许将文件格式转成 xbstream 格式或从 xbstream格式转到文件格式

xtrabackup 工具

  • 可以单独使用

但推荐使用innobackupex来进行备份,因为innobackupex 本身就已经包含了 xtrabackup 的所有功能
xtrabackup

  • 是基于 Innodb 的灾难恢复功能进行设计的
  • 备份工具复制 Innodb 的数据文件
  • 但是,由于不锁表,这样复制出来的数据将不一致
  • Innodb维护了一个重做日志
  • 包含 Innodb 数据的所有改动情况

备份 Innodb 数据的同时,xtrabackup 还有另外一个线程用来监控重做日志,一但日志发生变化,就把发生变化的日志数据复制走

Percona XtraBackup 对 MySIAM 的复制顺序

  • 首先锁定表,然后复制,再解锁表

数据库完全备份操作

可分为

  • 完全备份
  • 差异备份
  • 增量备份

物理冷备份与恢复

  • 一般用 tar 命令直接打包数据库文件夹
  • 进行备份之前需要使用'systemctl stop mysqld”命令关闭 mysqld 服务
备份数据库

创建一个/backup 目录作为备份数据存储路径,使用tar 创建备份文件

整个数据库文件夹备份属于完全备份

[root@localhost ~]# systemctl stop mysqld
[root@localhost ~]# mkdir /backup
[root@localhost ~]# tar zcf /backup/mysql all-$(date +%F).tar.gz /usr/local/mysql/data/
[root@localhost ~]# ls -l /backup
总用量 736
-rw-r--r-- 1 root root7516708月1 22:27 mysql _al1-2020-01-02.tar.g2

恢复数据库

将数据库文件/usr/local/mysqldata/转移至 bak 目录下,模拟故障

[root@localhost ~l# mkdir bak
[root@localhost ~]# mv /usr/local/mysqldata/ /bak/

从备份文件恢复数据

[root@localhost ~]# mkdir restore
[root@localhost ~]# tar zxf /backup/mysql all-2020-01-02.tar.gz -C restore/
[root@localhost ~]# mv restore/usr/local/mysql/data/ /usr/local/mysql
[root@localhost ~]# systemctl start mysqld

mysqldump 备份与恢复

  • 一般用 tar 命令直接打包数据库文件夹
  • 进行备份之前需要使用"systemctl stop mysqld”命令关闭 mysqld 服务
备份数据库

创建一个/backup 目录作为备份数据存储路径,使用tar 创建备份文件

整个数据库文件夹备份属于完全备份

[root@localhost ~]# systemctl stop mysqld
[root@localhost ~]# mkdir /backup
[root@localhost ~]# tar zcf /backup/mysql all-$(date +%F).tar.gz /usr/local/mysql/data/
[root@localhost ~]# ls -l /backup/
总用量 736
rw-r--r-- 1 root root 751670 8月    1 22:27 mysql_all-2020-01-02.tar.gz
恢复数据库

将数据库文件/usr/local/mysql/data/转移至 bak 目录下,模拟故障

[root@localhost ~]# mkdir bak
[root@localhost ~]# mv /usr/local/mysql/data/ /bak/

从备份文件恢复数据

[root@localhost ~]# mkdir restore
[root@localhost ~]# tar zxf /backup/mysql all-2020-01-02.tar.gz -C restore/
[root@localhost ~# mv restore/usr/local/mysqlldata/ /usr/local/mysql/
[root@localhost ~]# systemctl start mysqld

mysqldump 备份与恢复

  • 可以将指定的库、表或全部的库导出为 SQL 脚本
  • 便于该命令在不同版本的 MySQL服务器上使用
备份数据库

使用 mysqldump 命令导出数据时,默认会直接在终端显示,若要保存到文件,还需要结合 Shel 的“>”重定向输出操作

格式1:备份指定库中的部分表

mysqldump[选项] 库名 [表名 1][表名 2]...>/备份路径/备份文件名

格式 2:备份一个或多个完整的库(包括其中所有的表)

mysqldump [选项] --databases 库名1[库名2]...>/备份路径/备份文件名

格式 3:备份 MySQL 服务器中所有的库

mysqldump [选项] --all-databases >/备份路径/备份文件名

常用的选项包括

  • “-u”
  • “-p”

分别用于指定

  • 数据库用户名
  • 密码

分别使用格式 1、格式 2,将 mysql 库中的 user 表导出为mysql-user.sql,将整个 auth导出为 auth.sq 文件,所有操作均以root 用户身份验证

[root@localhost ~]# mysqldump -u root -p mysql user> mysql-user.sql
Enter password:
[root@localhost ~]# mysqldump -u root -p --databases auth > auth.sql
Enter password:

将创建备份文件 all-data.sql,其中包括 MySQL 服务器中的所有库

[root@localhost ~]# mysqldump -u root -p -opt --all-databases > all-data.sql
Enter password:
查看备份文件
  • 通过 mysqldump 工具导出的 SQL 脚本是文本文件
  • 其中“!...*/"部分或以“-”开头的行表示注释信息

查看脚本内容使用文本工具

  • grep
  • less
  • cat

过滤出 auth.sql 脚本中的数据库操作

[root@localhost ~]# grep -v "^.." auth.sql | grep -v "^!" | grep -v "^$"
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `auth` /*!40100 DEFAULT CHARACTER
SET utf8 */;
USE auth;
DROP TABLE IF EXISTS 'users`;CREATE TABLE `users`(
user name char(16) NOT NULL,
user passwd` char(48) DEFAULT"
PRIMARY KEY(`user name”)
)ENGINE=InnODB DEFAULT CHARSET=utf8;
LOCK TABLES users WRITE;
INSERT INTO users VALUES
('zhangsan''*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9');
UNLOCK TABLES;
恢复数据库

使用 mysqldump 命令导出的 SQL 备份脚本,在需要恢复时可以通过 mysql 命令对其进行导入操作

mysql [选项] [库名] [表名]</备份路径/备份文件名

从备份文件mysql-user.sql 中将表导入test库。

其中“-e”选项是用于指定连接 MySQL后执行的命令,命令执行完后自动退出

[root@localhost ~]# mysql -u root -p test< mysql-user.sql
Enter password:
//验证导入结果
[root@localhost ~]# mysql -u root -p -e 'SHOW TABLES FROM test;'
Enter password:
+--------------+
|Tables_in_test|
+--------------+
|user          |
+--------------+

从备份文件 auth.sql 恢复 auth 库

[root@localhost ~]# mysql -u root -p -e 'DROP DATABASE auth;'
//删除 auth 数据库,模拟故障
Enter password:
[root@localhost ~]# mysql -u root -p -e 'SHOW DATABASES;'
//查看 auth 数据库是否存在
Enter password:
+------------------+
|Database          |
+------------------+
|information schema|
|mysql             |
|performance schema|
|test              |//执行导入恢复操作
[root@localhost data]# mysql -u root -p< ~/auth.sql
Enter password://确认恢复后结果
[root@localhost ~]# mysql -u root -p -e'SHOW DATABASES;'
Enter password:
+------------------+
|Database          |
|information schema|
|auth              | 
|mysql             | 
|performance schema|
|test              |
+------------------+

MySQL 增量备份与恢复

  • 增量备份就是自上一次备份之后增加或改变的内容

MySQL 增量备份概述

增量备份的特点
  • 与完全备份不同
  • 没有重复数据
  • 备份量不大
  • 时间短

劣势

  • 恢复麻烦
  • 需要上次完全备份及完全备份之后所有的增量备份才能恢复
  • 而且要对所有增量备份进行逐个反推恢复

MySQL 没有提供直接的增量备份办法,可以通过 MySQL 提供的二进制日志binary logs)间接实现增量备份

MySQL 二进制日志对备份的意义
  • 保存了所有更新数据库的操作
  • 使用 max_binlog_size 配置可以设置二进制日志文件最大值
  • 如果文件大小超过max_binlog_size,就会自动创建新的二进制文件

要进行 MySQL 的增量备份,首先要开启二进制日志功能

开启 MySQL的二进制日志功能的实现方法有很多种

最常用的是

  • 在 MySQL配置文件的 mysqld 项下加入“log-bin=/文件路径/文件名"前缀

默认情况下,二进制日志文件的扩展名是一个六位的数字

[root@localhost ~]# vim /etc/my.cnf
[mysqld]
log-bin=/usr/local/mysql/data/mysql-bin
binlog format = MIXED
[root@localhost ~]# systemctl restart mysqld
//若 mysql无法启动,请确保配置文件内包含“server-id=1”
[root@localhost ~]#ls -l /usr/local/mysql/data/mysql-bin.*
-rw-r-----1 mysql mysql 154 Jan 2 14:22 /usr/local/mysql/data/mysql-bin.000001
-rw-r-----1 mysql mysql 19 Jan 2 14:22 /usr/local/mysql/data/mysql-bin.index

MySQL 增量恢复

维护数据库时,因为各种各样的原因可能会导致数据丢失

  • 如:人为的SQL语句破坏数据库
  • 在进行下一次全备份之前发生系统故障导致数据库数据丢失
  • 在数据库主从架构中主库的数据发生故障等
  • 当出现以上场景时可以使用增量恢复来恢复数据

常用的增量恢复的方法有三种

  • 一般恢复
  • 基于位置的恢复
  • 基于时间点的恢复

一般恢复

  • 将所有备份的二进制日志内容全部恢复
mysqlbinlog [--no-defaults] 增量备份文件 | mysql-u 用户名 -p密码

基于位置的恢复

  • 数据库管理员在操作数据库时可能在同一时间点既有错误的操作也有正确的操作
  • 通过基于位置进行恢复可以更加精准

格式1:恢复数据到指定位置

mysqlbinlog --stop-position='操作 id'二进制日志 | mysql -u 用户名 -p 密码

格式2:从指定位置开始恢复数据

mysqlbinlog --start-position='操作 id'二进制日志 | mysql -u 用户名 -p 密码

基于时间点的恢复

  • 跳过某个发生错误的时间点实现数据恢复

可以分成三种情况

格式 1:从日志开头截止到某个时间点的恢复

mysqlbinlog [--no-defaults] --stop-datetime='年-月-日 小时:分钟:秒' 二进制日志 | mysql -u用户名 -p 密码

格式2:从某个时间点到日志结尾的恢复

mysqlbinlog [--no-defaults] --start-datetime='年-月-日 小时:分钟:秒’二进制日志 | mysql -u 用户名 -p 密码

格式 3:从某个时间点到某个时间点的恢复

mysqlbinlog [--no-defaults] --start-datetime='年-月-日 小时:分钟:秒' --stop-datetime='年-月-日小时:分钟:秒'二进制日志 | mysql -u 用户名 -p 密码

小阿轩yx-MySQL备份与恢复 

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

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

相关文章

PHP的SHA256WithRSA签名和Curl POST请求函数

getCustomerEncryptionKey - 获取加密秘钥 /** * 获取加密秘钥 * param array $params * return string */ public function getCustomerEncryptionKey(array $params): string { //1.ASCII码&#xff08;字典序-升序&#xff09;排序…

Python网络爬虫实战6—下一页,模拟用户点击,切换窗口

【前期提要】感兴趣的可以看看往期文章哈~ Python网络爬虫5-实战网页爬取 Python网络爬虫4-实战爬取pdf Pyhon网络爬虫3-模拟用户点击 Python网络爬虫实战2-下载url下的pdf Python网络爬虫基础1 1.需求背景 针对长虹美菱电器说明书网页形式&#xff0c;编写爬虫代码&#xff…

IO模型简介

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言简介正文实现总结 前言 简介 Java1.4之前的早期版本,Java对I/O的支持并不完善,开发人员在开发高性能I/O程 序的时候,会面临一些巨大的挑战和困难,主要问题如下…

A36 STM32_HAL库函数 之PCD通用驱动 -- B -- 所有函数的介绍及使用

A36 STM32_HAL库函数 之PCD通用驱动 -- B -- 所有函数的介绍及使用 1 该驱动函数预览1.11 HAL_PCD_SOFCallback1.12 HAL_PCD_ResetCallback1.13 HAL_PCD_SuspendCallback1.14 HAL_PCD_ResumeCallback1.15 HAL_PCD_ISOOUTIncompleteCallback1.16 HAL_PCD_ISOINIncompleteCallbac…

【财务数字化转型之底座】集团企业财务数据中台系统建设方案

引言&#xff1a;随着企业规模的不断扩大和业务的复杂化&#xff0c;传统的财务管理模式已难以满足集团企业的数据整合、分析和决策需求。因此&#xff0c;建设一个高效、稳定、安全的财务数据中台系统&#xff0c;成为集团企业数字化转型的重要一环。本方案旨在构建一个集数据…

Android SurfaceFlinger——无效化和同步信号回调(十)

上一篇文章分析了屏幕热插拔回调回调,同时通过前面文章的介绍,我们知道一共有三个比较重要的回调,这里我们看一看另外两个回调函数无效化和垂直同步的相关调用。 一、回调介绍 这两个回调从表面看都是通知屏幕刷新的,但本质上还是有区别的。 无效化回调(Invalidate Hook…

算力服务先锋!和鲸科技入选《2024中国智算产业生态图谱》

2024 年 6 月 18 日&#xff0c;由科智咨询发起的《2024中国智算产业生态图谱》正式发布&#xff0c;依托 ModelWhale 构建的智算算力资源服务&#xff0c;以及深耕多年的 ModelWhale 数据科学协同平台优势&#xff0c;和鲸科技成功入选。 “智算时代”技术不断进步&#xff0c…

Open vSwitch 内核空间的流表同步

一、内核空间的流表同步 在 Open vSwitch 的数据包转发过程中&#xff0c;当数据包在 Datapath 模块无法完全处理时&#xff0c;会通过 upcall 调用将数据包交给用户空间的 vswitchd 守护进程&#xff0c;由 vswitchd 守护进程生成相应的流表和行为&#xff0c;并发送回内核空间…

什么是空间复杂度?

空间复杂度 是指算法在计算机中执行时所需额外空间的度量&#xff0c;记作S(n)。这个空间包括算法在执行时所使用的所有额外存储空间&#xff0c;包括变量&#xff08;包括静态变量和动态变量&#xff09;、递归调用栈、以及输入输出数据所占据的存储空间等。其中&#xff0c;n…

指针并不是用来存储数据的,而是用来存储数据在内存中地址(内存操作/函数指针/指针函数)

推荐&#xff1a;1、4、5号书籍 1. 基本概念 首先&#xff0c;让小明了解指针的基本概念&#xff1a; 指针的定义&#xff1a;指针是一个变量&#xff0c;它存储的是另一个变量的地址。指针的声明&#xff1a;例如&#xff0c;int *p表示一个指向整数的指针变量p。 2. 形象…

生命在于学习——Python人工智能原理(2.6.1)

六 Python的文件系统 6.1 打开文件 在Python中&#xff0c;可以使用内置的open函数来打开文件&#xff0c;open函数的基本语法如下&#xff1a; file open(file_name, moder, buffering-1, encodingNone, errorsNone, newlineNone, closefdTrue, openerNone)参数说明&#…

【Web3】Web3.js 启动!并解决Web3 is not a constructor报错

苏泽 大家好 这里是苏泽 一个钟爱区块链技术的后端开发者 本篇专栏 ←持续记录本人自学智能合约学习笔记和经验总结 如果喜欢拜托三连支持~ 本节教大家如何启动Web3.js 目录 Web3 启动&#xff01; 于是很愉快的报错 创建实例&#xff01; 出来了 Web3&#xff1a;模块…

【Android】设置光标颜色和图标

创建主题 该主题可以更改文字下方拖拽手柄的颜色 <?xml version"1.0" encoding"utf-8"?> <resources><style name"RedTextCursor"><item name"android:colorControlActivated">#FF0000</item></…

《PIDNet: A Real-time Semantic Segmentation Network Inspired by PID Controllers》

期刊&#xff1a;CVPR 年份&#xff1a;2023 代码&#xff1a;https://github.com/XuJiacong/PIDNet 摘要 双分支网络架构已经证明了它在实时语义分割任务中的有效性和有效性。然而&#xff0c;高分辨率细节和低频上下文的直接融合的缺点是细节特征很容易被周围的上下文信息…

快储存,分布式文件系统,对象储存

Ceph块存储 镜像快照 快照可以保存某一时间点时的状态数据快照是映像在特定时间点的只读逻辑副本希望回到以前的一个状态&#xff0c;可以恢复快照使用镜像、快照综合示例 rbd create img1 --size 10G 创建镜像rbd ls 查看镜像 rbd info img1 #查看…

Win32消息机制原理及消息运转

一.消息机制原理 1.消息类型&#xff1a; WIndows定义的一系列WM_XXX开头的&#xff0c;用来表示键盘按键&#xff0c;鼠标点击&#xff0c;窗口变化&#xff0c;用户自定义等各种消息; 2.消息队列&#xff1a; Windows为每一个正在运行的程序维护一个消息队列应用程序的消…

让DroidVNC-NG支持中文输入

DroidVNC-NG支持控制端输入内容&#xff0c;但是仅支持英文字符&#xff0c;如果需要控制输入法软键盘输入中文的话就没办法了&#xff0c;经过摸索找到了解决办法。 这个解决办法有个条件就是让DroidVNC-NG成为系统级应用&#xff08;这个条件比较苛刻&#xff09;&#xff…

【Linux】性能分析器 perf 详解(三)

上一篇:【Linux】性能分析器 perf 详解(二) 1、perf kmem 1.1 简介 kmem 用于跟踪/测量内核内存属性的工具,如分配、释放、碎片率等。可以帮助开发者和系统管理员理解内核内存的分配和释放模式,从而诊断内存泄漏、过度分配等问题。 功能: 跟踪内存分配和释放:监控内…

AI的赚钱风向,彻底变了!

从2023年3月起&#xff0c;生成式AI技术的浪潮席卷全球&#xff0c;让不少人开始焦虑中国AI技术与美国的差距。然而&#xff0c;最近的趋势显示&#xff0c;AI创业的盈利模式已经发生了根本性的变化。今年&#xff0c;我们见证了AIGC&#xff08;人工智能生成内容&#xff09;企…

ExtractAItoTEXT 提取Adobe illustrator AI文件中的文字到文本文件翻译并写回到Adobe illustrator AI文件

Extract Text from Adobe illustrator to text for translate and write back to Adobe illustrator after translate in text file. Originally script from marceloliaohotmail.com during his work in SDL. Updated by me. 从Adobe illustrator中提取文本以进行翻译&#x…