MySQL 备份恢复

1.1 MySQL日志管理

在数据库保存数据时,有时候不可避免会出现数据丢失或者被破坏,这样情况下,我们必须保证数据的安全性和完整性,就需要使用日志来查看或者恢复数据了。

数据库中数据丢失或被破坏可能原因:

  • 误删除数据库

  • 数据库工作时,意外断电或程序意外终止

  • 由于病毒造成的数据库损坏或丢失

  • 文件系统损坏后,系统进行自检操作

  • 升级数据库时,命令语句不严格

  • 设备故障等等

  • 自然灾害

  • 盗窃

1.1.1 MySQL日志类型

MySQL有几个不同的日志文件,可以帮助你找出mysql内部发生的事情:

日志类型记入文件中的信息类型
错误日志记录启动、运行或停止时出现的问题
查询日志记录建立的客户端连接和执行的语句
二进制日志记录所有更改数据的语句。主要用于复制和即时点恢复
慢日志记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询
事务日志记录InnoDB等支持事务的存储引擎执行事务时产生的日志

 

 默认情况下,所有日志创建于mysqld数据目录中。通过刷新日志,你可以强制 mysqld来关闭和重新打开日志文件(或者在某些情况下切换到一个新的日志)。当你执行一个FLUSH LOGS语句或执行mysqladmin flush-logsmysqladmin refresh时,出现日志刷新。如果你正使用MySQL复制功能,从复制服务器将维护更多日志文件,被称为接替日志。

 在mysql中,执行SQL语句:

FLUSH LOGS

在shell中,通过mysqladmin命令执行日志刷新:

mysqladmin flush-logs
mysqladmin refresh

1.1.2 错误日志

错误日志主要记录如下几种日志:

  • 服务器启动和关闭过程中的信息

  • 服务器运行过程中的错误信息

  • 事件调度器运行一个时间是产生的信息

  • 在从服务器上启动从服务器进程是产生的信息

错误日志定义:

可以用--log-error[=file_name]选项来指定mysqld保存错误日志文件的位置。如果没有给定file_name值,mysqld使用错误日志名host_name.err 并在数据目录中写入日志文件。如果你执行FLUSH LOGS,错误日志用-old重新命名后缀并且mysqld创建一个新的空日志文件。(如果未给出--log-error选项,则不会重新命名)

查看当前错误日志配置:

mysql> SHOW GLOBAL VARIABLES LIKE '%log_error%';
是否记录警告日志:
mysql> SHOW GLOBAL VARIABLES LIKE '%log_warnings%';

1.1.3 通用查询日志

启动开关:general_log={ON|OFF}

日志文件变量:general_log_file[=/PATH/TO/file]

全局日志开关:log={ON|OFF} 该开关打开后,所有日志都会被启用

记录类型:log_output={TABLE|FILE|NONE}:

因此,要启用通用查询日志,需要至少配置general_log=ON,log_output={TABLE|FILE}。而general_log_file如果没有指定,默认名是host_name.log。

看看上述几个值的默认配置:

mysql> SHOW GLOBAL VARIABLES LIKE '%general_log%';mysql> SHOW GLOBAL VARIABLES LIKE '%log_output%';

1.1.4 慢查询日志

MySQL如果启用了 slow_query_log=ON 选项,就会记录执行时间超过long_query_time的查询(初使表锁定的时间不算作执行时间)。日志记录文件为slow_query_log_file[=file_name],如果没有给出file_name值, 默认为主机名,后缀为-slow.log。如果给出了文件名,但不是绝对路径名,文件则写入数据目录。

默认与慢查询相关变量:

# 默认没有启用慢查询,为了服务器调优,建议开启
mysql> SHOW GLOBAL VARIABLES LIKE '%slow_query_log%';# 开启方法,当前生效,永久有效配置文件中设置
SET GLOBAL slow_query_log=ON;   # 使用 mysqldumpslow 命令获得日志中显示的查询摘要来处理慢查询日志
# mysqldumpslow slow.log
# 那么多久算是慢呢?
# 如果查询时长超过long_query_time的定义值(默认10秒),即为慢查询:
mysql> SHOW GLOBAL VARIABLES LIKE 'long_query_time';

1.1.5 二进制日志

日志查看
查看有哪些二进制日志文件:mysql> SHOW BINARY LOGS;查看当前正在使用的是哪一个二进制日志文件:mysql> SHOW MASTER STATUS;执行一下删表操作后再查看一下正在使用的日志文件 可以观察到记录查看二进制日志内容:mysql> SHOW BINLOG EVENTS IN 'mysqld-binlog.000002';##该语句还可以加上Position(位置),指定显示从哪个Position(位置)开始:
mysql> SHOW BINLOG EVENTS IN 'mysqld-binlog.000002' FROM 203;使用命令mysqlbinlog查看二进制日志内容:mysqlbinlog [options] log-files
二进制日志还原数据

使用mysqlbinlog读取需要的日志内容,使用标准输入重定向到一个sql文件,然后在mysql服务器上导入即可,如下:

mysqlbinlog mysqld-binlog.000002 >/root/temp_date.sql

如果报编码错误:mysqlbinlog: [ERROR] unknown variable 'default-character-set

原因:mysqlbinlog这个工具无法识别binlog中的配置中的default-character-set=utf8mb4这个指令。

有两种方式解决:

  1. 添加 --no-defaults 参数

    mysqlbinlog --no-defaults binlog.000069 >c:/a.sql # 注意需要指定binlog的位置,如果是当前路径,则可以直接使用名称即可。

  2. 修改配置文件my.cnf

    default-character-set=utf8mb4 修改为 character-set-server = utf8mb4,但是需要重启MySQL服务。

1.2 MySQL备份

1.2.1 备份类型

根据服务器状态,可以分为热备份、温备份、冷备份

  • 热备份:读、写不受影响;

  • 温备份:仅可以执行读操作;

  • 冷备份:离线备份;读、写操作均中止;

从对象来分,可以分为物理备份与逻辑备份

  • 物理备份:复制数据文件;

  • 逻辑备份:将数据导出至文本文件中;

从数据收集来分,可以完全备份、增量备份、差异备份

  • 完全备份:备份全部数据;

  • 增量备份:仅备份上次完全备份或增量备份以后变化的数据;

  • 差异备份:仅备份上次完全备份以来变化的数据;

逻辑备份优缺点

逻辑备份的优点:

在备份速度上两种备份要取决于不同的存储引擎

物理备份的还原速度非常快。但是物理备份的最小粒度只能做到表

逻辑备份保存的结构通常都是纯ASCII的,所以我们可以使用文本处理工具来处理

逻辑备份有非常强的兼容性,而物理备份则对版本要求非常高

逻辑备份也对保持数据的安全性有保证

逻辑备份的缺点:

逻辑备份要对RDBMS产生额外的压力,而裸备份无压力

逻辑备份的结果可能要比源文件更大。所以很多人都对备份的内容进行压缩

逻辑备份可能会丢失浮点数的精度信息

1.2.2 备份内容

数据文件
日志文件(比如事务日志,二进制日志)
存储过程,存储函数,触发器
配置文件(十分重要,各个配置文件都要备份)
用于实现数据库备份的脚本,数据库自身清理的Crontab等

1.2.3 备份工具

MySQL自带的备份工具

mysqldump,是mysql数据库管理系统,自带的逻辑备份工具,支持所有引擎,MyISAM引擎是温备,InnoDB引擎是热备,备份速度中速,还原速度非常非常慢。但是在实现还原的时候,具有很大的操作余地。具有很好的弹性。

#备份DOS:
#备份所有数据库:
mysqldump -uroot -p --all-databases > h:/myschool.sql
#mysqldump -uroot -p --all-databases > /usr/local/myschool.sql
------------------------------------------------------------------------------
#备份myschool数据库的[student及result]表
mysqldump -uroot -p myschool [student result] > h:/myschool.sql
#mysqldump -uroot -p myschool [student result] > /usr/local/myschool.sql
#mysqldump -uroot -p myemployees departments  > /usr/local/sqlmessage/departments.sql
------------------------------------------------------------------------------
#创建数据库命令  mysqladmin -uroot -p create db_name;#恢复1:
mysql -uroot -p;
USE db_name;
source h:/myschool.sql;
#source /usr/local/myschool.sql 
#source /usr/local/sqlmessage/departments.sql#恢复2:
mysql -uroot -p db_name<h:/myschool.sql;
#mysql -uroot -p db_name</usr/local/myschool.sql;
#mysql -uroot -p test  < /usr/local/sqlmessage/departments.sql
文件系统备份工具

cp命令, 冷备份,支持所有引擎,复制命令,只能实现冷备,物理备份。使用归档工具,cp命令,对其进行备份的,备份速度快,还原速度几乎最快,但是灵活度很低,可以跨系统,但是跨平台能力很差。

lvm 几乎是热备份,支持所有引擎,基于快照(LVM,ZFS)的物理备份,速度非常快,几乎是热备。只影响数据几秒钟而已。但是创建快照的过程本身就影响到了数据库在线的使用,所以备份速度比较快,恢复速度比较快,没有什么弹性空间,而且LVM的限制:不能对多个逻辑卷同一时间进行备份,所以数据文件和事务日志等各种文件必须放在同一个LVM上。而ZFS则非常好的可以在多逻辑卷之间备份。

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

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

相关文章

编程实例分享,眼镜店电脑系统软件,配件验光管理顾客信息记录查询系统软件教程

编程实例分享&#xff0c;眼镜店电脑系统软件&#xff0c;配件验光管理顾客信息记录查询系统软件教程 一、前言 以下教程以 佳易王眼镜店顾客档案管理系统软件V16.0为例说明 如上图&#xff0c; 点击顾客档案&#xff0c;在这里可以对顾客档案信息记录保存查询&#xff0c;…

【学员分享-考试心得】国产数据库潜力无限,云贝教育OBCP认证培训帮您解难题

近年来&#xff0c;随着国产化转型的推进&#xff0c;国外数据库的岗位需求逐渐减少&#xff0c;让许多IT从业者倍感压力。在这种情况下&#xff0c;了解国产数据库成为了求职市场上的竞争力。云贝老师们将聚焦于OceanBase、PostgreSQL、TDSQL等IT培训&#xff0c;探讨其对国产…

Flutter 高级动画技术综合指南

在动画领域&#xff0c;Flutter 提供了一系列功能&#xff0c;包括基于物理的动画&#xff0c;可以模拟真实世界的动态&#xff0c;在应用程序中创建更逼真和自然的运动。 本文将深入研究 Flutter 动画&#xff0c;探索各种类型&#xff0c;并演示如何在项目中实现它们。 Flu…

企业安全漏洞一览:七大隐患及其防范措施

网络安全是一场跌宕起伏&#xff0c;永无止境的拉锯战。攻击者的技术和手法不断花样翻新&#xff0c;主打一个“避实就虚”和“出奇制胜”&#xff1b;防御者的策略则强调“求之于势&#xff0c;不责于人”&#xff0c;依靠整体安全态势和风险策略的成熟度和韧性来化解风险。 …

C/C++实现无序入参的命令解析工具

C/C实现无序入参的命令解析工具 1 实现思路2 主要功能3 效果展示3.1 直接运行代码图3.2help命令执行效果图3.3命令行执行命令解析效果图 4 代码实现5 代码下载 1 实现思路 基本介绍&#xff1a; 思路来源于atlas,atc(模型转换工具)&#xff0c;该工具对命令支持众多&#xff0…

Java面试——计网篇

一、基础篇 1、 TCP/IP 网络模型 对于同一台设备上的进程间通信&#xff0c;有很多种方式&#xff0c;比如有管道、消息队列、共享内存、信号等方式&#xff0c;而对于不同设备上的进程间通信&#xff0c;就需要网络通信&#xff0c;而设备是多样性的&#xff0c;所以要兼容多…

YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读

YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读 YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读一、前言二、我的环境三、yolov5s.yaml源文件内容四、Parameters五、anchors配置六、backbone七、head八、总结 OLOv5-第Y2周&#xff1a;训练自己的数据集) YOLOv5白皮书-第Y3周:yolov5s.…

获取真实 IP 地址(一):判断是否使用 CDN(附链接)

一、介绍 CDN&#xff0c;全称为内容分发网络&#xff08;Content Delivery Network&#xff09;&#xff0c;是一种网络架构&#xff0c;旨在提高用户对于网络上内容的访问速度和性能。CDN通过在全球各地部署分布式服务器节点来存储和分发静态和动态内容&#xff0c;从而减少…

【C语言刷题系列】喝汽水问题

文章目录 一、文章简介 1.先买再换 1.1 代码逻辑&#xff1a; 1.2 完整代码 1.3 运行结果 1.4 根据方法一总结优化 2.边买边换 2.1 代码逻辑&#xff1a; 2.2 完整代码 2.3 运行结果 一、文章简介 本文所述专栏——C语言经典编程问题 C语言刷题_倔强的石头106的博客…

2024牛客寒假训练营1总结

G题不开long long的后果&#xff0c;即使有思路也没用。(给我气的) E题&#xff0c;不看数据范围的后果&#xff0c;不能一题名取题啊。 using ll long long; void solve() {int n, m;std::cin >> n >> m;std::vector<int>a(n);for (int i 0; i < n; i)…

MATLAB矩阵的操作(第二部分)

师从清风 矩阵的创建方法 在MATLAB中&#xff0c;矩阵的创建方法主要有三种&#xff0c;分别是&#xff1a;直接输入法、函数创建法和导入本地文件中的数据。 直接输入法 输入矩阵时要以中括号“[ ]”作为标识符号&#xff0c;矩阵的所有元素必须都在中括号内。 矩阵的同行元…

C语言递归实现数字逆序输出

引言 在计算机编程中&#xff0c;递归是一种强大的工具&#xff0c;它允许函数在其定义内部调用自身。今天&#xff0c;我们将通过一个实例——使用递归函数实现数字的逆序输出&#xff08;如将1234输出为4 3 2 1&#xff09;来深入理解递归的应用和工作原理。 代码展示与解析…