在Centos中的mysql的备份与恢复

news2024/9/20 14:37:15

1.物理备份

  • 冷备份:关闭数据库时进行
  • 热备份:数据库运行时进行,依赖于数据库日志文件
  • 温备份:数据库不可写入但可读的状态下进行

2.逻辑备份

  • 对数据库的表或者对象进行备份

3.备份策略

  • 完全备份:每次都备份完整的数据库
  • 差异备份:只备份上一次完全备份之后的更新数据
  • 增量备份:每次备份只备份上一次完全备份或增量备份之后的更新数据

4.备份方法和工具

  • 物理冷备份:备份时数据库关闭,直接打包数据库文件;备份速度块,恢复时也简单
  • 备份工具:mysqldump或者mysqlhoocopy
    mysqldump备份速度慢(如果数据库超过100G,不建议使用)
  • 使用二进制日志进行增量备份
  • 使用第三方工具:XtraBackup

一、物理备份

使用物理冷备份
systemctl stop mysqld  #先关闭主机的mysql服务
mkdir mysqlbackup     #创建一个文件夹之后将数据库压缩包放入其中
tar -zcvf /usr/local/src/mysqlbackup/mysql_full_$(date -d "-1 day" +%Y%m%d).tar.gz /var/lib/mysql/data/  #备份 /var/lib/mysql/data下的所有

scp /usr/local/src/mysqlbackup/mysql_full_20240828.tar.gz 192.168.222.213:/usr/local/src/mysql/  #使用scp命令将数据库拷贝到要备份的主机上

之后在备份主机上进行压缩

systemctl stop mysqld  #先停止mysql服务
tar -xf mysql_full_20240828.tar.gz #解压 
mv /data/ /var/lib/mysql/ #再将压缩后的数据库复制到目标目录下即可
使用工具mysqldump进行冷备份

可以将指定的库、表导出为SQL脚本

1.完整备份一个或者多个完整的数据库(包含其中的表)
  mysqldump -u root -p[密码] --databases 库名1 [库名2] … > /备份路径/备份文件名.sql
  mysqldump -u root -ppassword  --databases exam_system > /usr/local/src/mysqlbackup/exam_system.sql
  遇到的问题:mysqldump: [Warning] Using a password on the command line interface can be insecure
  解决办法:在my.cnf中添加
  [mysqldump]
  user=root
  password=password
  然后不需要使用账号密码即可进行备份:
  mysqldump  --databases exam_system > /usr/local/src/mysqlbackup/exam_system.sql

如果不加 --databases ,只备份库中的表,不会备份库

2.备份整个数据库
mysqldump -u root -p[密码] --all-databases > /备份路径/备份文件名.sql
mysqldump --all-databases > /usr/local/src/mysqlbackup/all.sql

3.备份指定库中的部分表
mysqldump -u root -p[密码] 库名 [表名1] [表名2] … > /备份路径/备份文件名.sql
mysqldump  exam_system answer question > /usr/local/src/mysqlbackup/answerAndquestion.sql
备份成sql语句后进行恢复
1.通过source命令恢复
  登录备份主机的mysql
  mysql -uroot -p
  执行命令:mysql>  source /usr/local/src/mysql/exam_system.sql;
2.通过mysql命令恢复
  mysql -u 用户名 -p[密码] < 库备份脚本的路径
  mysql -uroot -ppassword < /usr/local/src/mysql/exam_system.sql
当备份的sql中只包含表的备份,而不是库的备份时,恢复的时候需要指定数据库,并且目标库必须存在
mysql -uroot -ppassword exam_system < /usr/local/src/mysqlbackup/answerAndquestion.sql

二、增量备份(需要用到mysql的二进制日志)

1.开启二进制日志功能:
	vim /etc/my.cnf
	[mysqld]
	log-bin=mysql-bin
	binlog_format = MIXED				
	#可选,指定二进制日志(binlog)的记录格式为 MIXED
	server-id = 1
	
	#二进制日志(binlog)有3种不同的记录格式:STATEMENT(基于SQL语句)、ROW(基于行)、MIXED(混合模式),默认格式是STATEMENT
通过刷新二进制日志文件实现增量备份(和上面同理,在my.cnf中添加 [mysqladmin] 的账号密码在此处就不需要使用账号密码了)
	mysqladmin  flush-logs
	查看二进制文件内容 
	mysqlbinlog --no-defaults --base64-output=decode-rows -v 二进制文件(绝对路径)
	mysqlbinlog --no-defaults --base64-output=decode-rows -v /var/lib/mysql/binlog.000001

2.进行增量备份操作


一般恢复手段
  2.1.先对数据库exam_system中的answer表做完全备份
 	mysqldump exam_system answer > /usr/local/src/mysqlbackup/answer.sql
  2.2.在answer中添加新数据
  2.3.再刷新二进制日志文件
 	mysqladmin flush-logs
  2.4.新增数据

在这里插入图片描述

  2.5.再次刷新二进制日志文件
  2.6.进行备份,备份的是倒数第二个二进制日志文件,不是最新的那个
	mv -f /var/lib/mysql/binlog.000012 /usr/local/src/mysqlbackup/binlog.000012_backup
  2.7.将其拷贝到目的主机上
	scp /usr/local/src/mysqlbackup/binlog.000012_backup 192.168.222.213:/var/lib/mysql
  2.8.通过管道符导入的方式进行增量备份
 	mysqlbinlog --no-defaults  /usr/local/src/mysqlbackup/binlog.000012_backup  | mysql -uroot -ppassword



断点恢复手段
  2.1.删除一条id=7的数据
  2.2 #查看二进制文件 
	mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/src/mysqlbackup/binlog.000012_backup
	
	  查询结果
	  # The proper term is pseudo_replica_mode, but we use this compatibility alias
	# to make the statement usable on server versions 8.0.24 and older.
	/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
	/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
	DELIMITER /*!*/;
	# at 4
	#240829 22:20:58 server id 1  end_log_pos 126 CRC32 0x5a25dbb2 	Start: binlog v 4, server v 8.0.39 created 240829 22:20:58
	# at 126
	#240829 22:20:58 server id 1  end_log_pos 157 CRC32 0xb00ab440 	Previous-GTIDs
	# [empty]
	# at 157
	#240829 22:21:43 server id 1  end_log_pos 236 CRC32 0x11b51759 	Anonymous_GTID	last_committed=0	sequence_number=1	rbr_only=yes	original_committed_timestamp=1724941303404462	immediate_commit_timestamp=1724941303404462   transaction_length=330
	/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
	# original_commit_timestamp=1724941303404462 (2024-08-29 22:21:43.404462 CST)
	# immediate_commit_timestamp=1724941303404462 (2024-08-29 22:21:43.404462 CST)
	/*!80001 SET @@session.original_commit_timestamp=1724941303404462*//*!*/;
	/*!80014 SET @@session.original_server_version=80039*//*!*/;
	/*!80014 SET @@session.immediate_server_version=80039*//*!*/;
	SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
	# at 236
	#240829 22:21:43 server id 1  end_log_pos 318 CRC32 0xc8f08fde 	Query	thread_id=17	exec_time=0	error_code=0
	SET TIMESTAMP=1724941303/*!*/;
	SET @@session.pseudo_thread_id=17/*!*/;
	SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
	SET @@session.sql_mode=1168113696/*!*/;
	SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
	/*!\C utf8mb4 *//*!*/;
	SET @@session.character_set_client=255,@@session.collation_connection=255,@@session.collation_server=255/*!*/;
	SET @@session.lc_time_names=0/*!*/;
	SET @@session.collation_database=DEFAULT/*!*/;
	/*!80011 SET @@session.default_collation_for_utf8mb4=255*//*!*/;
	BEGIN
	/*!*/;
	# at 318
	#240829 22:21:43 server id 1  end_log_pos 392 CRC32 0x792677a7 	Table_map: `exam_system`.`answer` mapped to number 148
	# has_generated_invisible_primary_key=0
	# at 392
	#240829 22:21:43 server id 1  end_log_pos 456 CRC32 0x59ebb7ee 	Write_rows: table id 148 flags: STMT_END_F
	### INSERT INTO `exam_system`.`answer`
	### SET
	###   @1=6
	###   @2='因数'
	###   @3=NULL
	###   @4='因数'
	###   @5=2
	###   @6=NULL
	# at 456
	#240829 22:21:43 server id 1  end_log_pos 487 CRC32 0xe2a746e6 	Xid = 1415
	COMMIT/*!*/;
	# at 487
	#240829 22:22:03 server id 1  end_log_pos 566 CRC32 0x80070a3c 	Anonymous_GTID	last_committed=1	sequence_number=2	rbr_only=yes	original_committed_timestamp=1724941323438391	immediate_commit_timestamp=1724941323438391   transaction_length=348
	/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
	# original_commit_timestamp=1724941323438391 (2024-08-29 22:22:03.438391 CST)
	# immediate_commit_timestamp=1724941323438391 (2024-08-29 22:22:03.438391 CST)
	/*!80001 SET @@session.original_commit_timestamp=1724941323438391*//*!*/;
	/*!80014 SET @@session.original_server_version=80039*//*!*/;
	/*!80014 SET @@session.immediate_server_version=80039*//*!*/;
	SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
	# at 566
	#240829 22:22:03 server id 1  end_log_pos 648 CRC32 0xd97b61d5 	Query	thread_id=17	exec_time=0	error_code=0
	SET TIMESTAMP=1724941323/*!*/;
	BEGIN
	/*!*/;
	# at 648
	#240829 22:22:03 server id 1  end_log_pos 722 CRC32 0x066adb4a 	Table_map: `exam_system`.`answer` mapped to number 148
	# has_generated_invisible_primary_key=0
	# at 722
	#240829 22:22:03 server id 1  end_log_pos 804 CRC32 0x23e50863 	Write_rows: table id 148 flags: STMT_END_F
	### INSERT INTO `exam_system`.`answer`
	### SET
	###   @1=7
	###   @2='多音字,少银子'
	###   @3=NULL
	###   @4='少银子'
	###   @5=1
	###   @6=NULL
	# at 804
	#240829 22:22:03 server id 1  end_log_pos 835 CRC32 0xeb4d3e35 	Xid = 1418
	COMMIT/*!*/;
	# at 835
	#240829 22:22:07 server id 1  end_log_pos 879 CRC32 0x29dc8064 	Rotate to binlog.000015  pos: 4
	SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
	DELIMITER ;
	# End of log file
	/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
	/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

  2.3.基于位置恢复,恢复id=7的数据
   mysqlbinlog --no-defaults --start-position='648'  /var/lib/mysql/binlog.000014 | mysql -uroot -ppassword
   或者
   mysqlbinlog --no-defaults --start-position='648' --stop-position='835' /var/lib/mysql/binlog.000014 | mysql -uroot -ppassword

  2.4.基于时间恢复
  mysqlbinlog --no-defaults --start-datetime='2024-08-29 22:22:03' /var/lib/mysql/binlog.000014 | mysql -uroot -ppassword
MySQL 的日志默认保存位置为 /usr/local/mysql/data
vim /etc/my.cnf
[mysqld]
##错误日志,用来记录当MySQL启动、停止或运行时发生的错误信息,默认已开启
#指定日志的保存位置和文件名
log-error=/usr/local/mysql/data/mysql_error.log					


##通用查询日志,用来记录MySQL的所有连接和语句,默认是关闭的
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log

##二进制日志(binlog),用来记录所有更新了数据或者已经潜在更新了数据的语句,记录了数据的更改,可用于数据恢复,默认已开启
log-bin=mysql-bin				
#也可以 log_bin=mysql-bin

##慢查询日志,用来记录所有执行时间超过long_query_time秒的语句,可以找到哪些查询语句执行时间长,以便于优化,默认是关闭的
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5												
#设置超过5秒执行的语句被记录,缺省时为10秒


mysql -u root -p
#查看通用查询日志是否开启
show variables like 'general%';									

#查看二进制日志是否开启
show variables like 'log_bin%';									
#查看二进制日志的格式
show variables like '%binlog_format%';
#查看慢查询日功能是否开启
show variables like '%slow%';									
#查看慢查询时间设置
show variables like 'long_query_time';							

#在数据库中设置开启慢查询的方法
set global slow_query_log=ON;				



[root@localhost mysql]# cat backupmysqlbinlog.sh 
#!/bin/bash
#增量备份mysql数据库
TODAY=$(date +%Y%m%d)
YESTERDAY=$(date -d '-1 day' +%Y%m%d)
DATA_HOME=/var/lib/mysql/
USERNAME=root
PASSWORD=password

##备份二进制日志索引文件 binlog.index
/usr/bin/cp -f $DATA_HOME/binlog.index /opt/backup/binlog-$TODAY.index

##判断是否存在前一天的日志索引文件,如果存在则通过反向查询获取今天生成的二进制日志文件
if [ -f /opt/backup/binlog-$YESTERDAY.index ]
then
  COUNT=$(cat /opt/backup/binlog-$TODAY.index | grep -v `/opt/backup/binlog-$YESTERDAY.index` | awk -F '/' '{print $2}')
else
  COUNT=$(cat /opt/backup/binlog-$TODAY.index | awk -F '/' '{print $2}')
fi

#刷新二进制日志文件
mysqldump -u"$USERNAME" -p"$PASSWORD" flush-logs &> /dev/null
#使用循环备份当天的二进制日志
for BINLOG in $COUNT
do
  /usr/bin/mv -f "$DATA_HOME/$BINLOG" "/opt/backup/$BINLOG-$TODAY"
done

https://blog.csdn.net/m0_71593537/article/details/133240696原文链接

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

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

相关文章

每日OJ_牛客_Rational Arithmetic(英文题模拟有理数运算)

目录 牛客_Rational Arithmetic&#xff08;英文题模拟有理数运算&#xff09; 解析代码 牛客_Rational Arithmetic&#xff08;英文题模拟有理数运算&#xff09; Rational Arithmetic (20)__牛客网 解析代码 本题看上去不难&#xff0c;但是存在几个问题&#xff1a; 除…

【C++】汇编分析

传参 有的是用寄存器传参&#xff0c;有的用push传参 我在MSVC编译测出来的是PUSH传参&#xff08;debug模式&#xff09;&#xff0c;具体过程如下 long func(long a, long b, long c, long d,long e, long f, long g, long h) {long sum;sum (a b c d e f g h);ret…

《机器学习》文本数据分析之关键词提取、TF-IDF、项目实现 <上>

目录 一、如何进行关键词提取 1、关键词提取步骤 1&#xff09;数据收集 2&#xff09;数据准备 3&#xff09;模型建立 4&#xff09;模型结果统计 5&#xff09;TF-IDF分析 2、什么是语料库 3、如何进行中文分词 1&#xff09;导包 2&#xff09;导入分词库 3&#xff09…

智能优化特征选择|基于鲸鱼WOA优化算法实现的特征选择研究Matlab程序(SVM分类器)

智能优化特征选择|基于鲸鱼WOA优化算法实现的特征选择研究Matlab程序&#xff08;SVM分类器&#xff09; 文章目录 一、基本原理鲸鱼智能优化特征选择&#xff08;WOA&#xff09;结合SVM分类器的详细原理和流程原理流程 二、实验结果三、核心代码四、代码获取五、总结 智能优化…

js | XMLHttpRequest

是什么&#xff1f; 和serve交互数据的对象&#xff1b;能够达到页面部分刷新的效果&#xff0c;也就是获取数据之后&#xff0c;不会使得整个页面都刷新&#xff1b;虽然名字是XML&#xff0c;但不限于XML数据。 怎么用&#xff1f; function reqListener() {console.log(thi…

理解数据库系统的内部结构

数据库系统在我们的数字世界中扮演着关键角色。本文将介绍数据库系统的内部结构&#xff0c;帮助初学者了解其基本概念。 数据库系统的三级模式 数据库系统内部采用三级模式二级映像结构&#xff0c;包括外模式、模式和内模式。这种结构确保了数据的逻辑独立性和物理独立性。…

全能型AI vs 专业型AI:未来是草莓味的AI吗?

草莓&#xff1a;全能型AI的新宠儿&#xff1f; 根据最近的消息&#xff0c;OpenAI的“草莓”模型据说是一个全能型AI&#xff0c;无论是解数学题还是搞定主观营销策略&#xff0c;它都能轻松驾驭。这个AI不仅仅是能解决问题&#xff0c;更是能够跨越多个领域&#xff0c;展现出…

C++学习/复习补充记录 --- 图论(深搜,广搜)

数据结构与算法 | 深搜&#xff08;DFS&#xff09;与广搜&#xff08;BFS&#xff09;_深搜广搜算法-CSDN博客 深度优先搜索理论基础 深搜和广搜的区别&#xff1a; &#xff08;通俗版&#xff09; dfs是可一个方向去搜&#xff0c;不到黄河不回头&#xff0c;直到遇到绝境了…

消费电子钛时代到来!天工股份抢占发展高地,业绩爆发式增长、前景广阔

消费电子“钛时代”正加速到来。 27日凌晨&#xff0c;苹果正式定档iPhone 16系列新品的发布会日期。据悉&#xff0c;本次iPhone 16 Pro系列将全系标配钛金属中框&#xff0c;继续沿用并升级此前在iPhone 15 Pro系列上应用的钛金属材质。 回看去年9月秋季新品发布会&#xf…

三秒学会--百度网盘下载提速10倍的小tip

开启优化速率 从2mb-->20mb 纵享新丝滑~

PHP安装扩展包时忽略依赖强制安装

正常安装时会检查依赖包&#xff0c;比如是否安装了reids扩展&#xff0c;是否安装了gd库等&#xff0c;卖到依赖包安装失败。 如下提示&#xff1a; 这样会导致你的包安装不上。 使用下面命令&#xff0c;强制安装&#xff0c;如下&#xff1a; 加上 --ignore-platform-req…

常见概念 -- dBm, mW,dB之间的关系

dBm与mW dBm&#xff08;毫瓦分贝&#xff09;与mW&#xff08;毫瓦&#xff09;都是光功率的单位。 两者之间的换算关系&#xff1a;dBm10xlgP。其中P为功率&#xff0c;单位为mW。 如&#xff1a;1mW可换算为0dBm。 dBm与dB dBm为光功率的单位&#xff0c;d…

GraphPad Prism下载安装教程怎样中文汉化

GraphPad Prism下载安装教程怎样中文汉化&#xff1a; GraphPad Prism 是一款集生物统计、曲线拟合和科技绘图于一体的软件&#xff0c;主要用于医学和生物科学领域的数据分析和绘图&#xff0c;具有高效、简便、多功能和高质量的特点&#xff0c;被广泛应用于科研、教育和业界…

告别繁琐,拥抱简单!用户好评如潮的录屏软件

不论你是有游戏过程录制的需求&#xff0c;还是教学片段录制的需求肯定都需要电脑屏幕录制工具吧。除了小巧便捷的ocam录屏之外还有不少类似工具可供我们选择。这次我就给你介绍几款我用过的录屏工具吧。 1.福昕录屏大师 链接&#xff1a;www.foxitsoftware.cn/REC/ 这款录屏…

智慧猪场实训中心解决方案

一、引言 随着科技的飞速发展&#xff0c;传统养猪业正经历着前所未有的变革。为了提高养猪效率、降低生产成本并保障猪只健康&#xff0c;智慧养猪场的概念应运而生。唯众特此推出《智慧猪场实训中心解决方案》&#xff0c;旨在通过先进的技术与管理手段&#xff0c;为养猪业培…

MQ专题:延迟消息的通用方案

一、主要内容 本文将实现一个MQ延迟消息的通用方案。 方案不依赖于MQ中间件&#xff0c;依靠MySQL和DelayQueue解决&#xff0c;不管大家用的是什么MQ&#xff0c;具体是RocketMQ、RabbitMQ还是kafka&#xff0c;本文这个方案你都可以拿去直接使用&#xff0c;可以轻松实现任…

【安规电容】

安规电容&#xff08;Safety Capacitors&#xff09;是一种专门设计用于电气设备中的电容器&#xff0c;主要用于确保电气安全&#xff0c;特别是用于交流电路中的滤波、降噪以及跨接隔离等功能。它们必须符合特定的安全标准&#xff0c;以确保电气设备在各种运行条件下都能保持…

MySQL:简述数据库的主从复制

MySQL主从复制是指数据可以从一个MySQL数据库主节点复制到一个或多个从节点。 MySQL默认采用异步复制方式&#xff0c;这样从节点不用一直访问主节点来更新自己的数据&#xff0c;数据的更新可以在远程连接上进行&#xff0c;从节点可以复制主节点中的所有数据库或者特定的数据…

FastJson序列化驼峰-下划线转换问题踩坑记录

背景 问题描述 在MySQL数据表中&#xff0c;存在一个JSON结构的扩展字段&#xff0c;通过updateById进行更新写入操作。更新写入的同一个字段名出现了混合使用了驼峰命名和下划线命名两种格式。 ps: FastJson版本是1.2.83 问题影响 数仓同学离线统计数据时发现字段名有两种…

【生命之树】

题目 思路 求联通区域中的最大和值 代码 #include <bits/stdc.h> using namespace std; const int N 1e510, M N << 1; const int null -0x3f3f3f3f; long long w[N]; int h[N], e[M], ne[M], idx; void add(int a, int b) // 添加一条边a->b {e[idx] b,…