在Centos中的mysql的备份与恢复

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] … > /备份路径/备份文件名.sqlmysqldump -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=rootpassword=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.sql3.备份指定库中的部分表
mysqldump -u root -p[密码] 库名 [表名1] [表名2] … > /备份路径/备份文件名.sql
mysqldump  exam_system answer question > /usr/local/src/mysqlbackup/answerAndquestion.sql
备份成sql语句后进行恢复
1.通过source命令恢复登录备份主机的mysqlmysql -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-binbinlog_format = MIXED				#可选,指定二进制日志(binlog)的记录格式为 MIXEDserver-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.0000012.进行增量备份操作一般恢复手段2.1.先对数据库exam_system中的answer表做完全备份mysqldump exam_system answer > /usr/local/src/mysqlbackup/answer.sql2.2.在answer中添加新数据2.3.再刷新二进制日志文件mysqladmin flush-logs2.4.新增数据

在这里插入图片描述

  2.5.再次刷新二进制日志文件2.6.进行备份,备份的是倒数第二个二进制日志文件,不是最新的那个mv -f /var/lib/mysql/binlog.000012 /usr/local/src/mysqlbackup/binlog.000012_backup2.7.将其拷贝到目的主机上scp /usr/local/src/mysqlbackup/binlog.000012_backup 192.168.222.213:/var/lib/mysql2.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=0SET 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 = 1415COMMIT/*!*/;# 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=0SET 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 = 1418COMMIT/*!*/;# at 835#240829 22:22:07 server id 1  end_log_pos 879 CRC32 0x29dc8064 	Rotate to binlog.000015  pos: 4SET @@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 -ppassword2.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 ]
thenCOUNT=$(cat /opt/backup/binlog-$TODAY.index | grep -v `/opt/backup/binlog-$YESTERDAY.index` | awk -F '/' '{print $2}')
elseCOUNT=$(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.rhkb.cn/news/417410.html

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

相关文章

使用C语言实现字符推箱子游戏

使用C语言实现字符推箱子游戏 推箱子&#xff08;Sokoban&#xff09;是一款经典的益智游戏&#xff0c;玩家通过移动角色将箱子推到目标位置。本文将带你一步步用C语言实现一个简单的字符版本的推箱子游戏。 游戏规则 玩家只能推箱子&#xff0c;不能拉箱子。只能将箱子推到…

Unity界面、组件以及脚本

Unity界面 菜单栏 菜单栏&#xff1a;位于屏幕顶部&#xff0c;包含文件、编辑、资产、游戏对象、组件、地形、动画、图形、AI、窗口、工具和帮助等菜单项。 工具栏 工具栏&#xff1a;位于菜单栏下方&#xff0c;提供了快速访问常用功能的按钮&#xff0c;如播放、暂停、停止…

OpenGL/GLUT实践:实现反弹运动的三角形动画与键盘控制(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub&#xff1a;A-UESTCer-s-Code 文章目录 1 运行效果2 实验过程2.1 环境配置2.2 绘制三角形2.2.1 渲染函数2.2.2 主函数2.2.3 运行结果 2.3 调整窗口大小2.4 简单动画与按键控制2.4.1 简单旋转2.4.2 键盘控制 2.5 窗口反弹动画2.5.1 处理窗口大小变化2.5.2 渲染函数…

c++修炼之路之C++11

目录 一&#xff1a;使用列表初始化 二&#xff1a;decltype和nullptr 三&#xff1a;右值引用和移动语义 四&#xff1a;新的类功能 五&#xff1a;可变参数模板 六&#xff1a;lambda表达式 七&#xff1a;包装器 1.function包装器 2.bind包装器 接下来的日子会顺…

Linux CentOS 部署Docker

1. yum 配置 &#xff08;1&#xff09;更新yum yum update -y 如果不升级更新yum 可能在后续docker部署后再更新容器会出现oci runtime error等 &#xff08;2&#xff09;安装yum工具类准备 yum install -y yum-utils device-mapper-persistent-data lvm2 &#xff08;3&…

【操作系统存储篇】Linux文件基本操作

目录 一、Linux目录 二、Linux文件的常用操作 三、Linux文件类型 一、Linux目录 Linux有很多目录&#xff0c;Linux一切皆是文件&#xff0c;包括进程、设备等。 相对路径&#xff1a;相对于当前的操作目录&#xff0c;文件位于哪个目录。 绝对路径 &#xff1a;从根目录开…

Golang | Leetcode Golang题解之第387题字符串中的第一个唯一字符

题目&#xff1a; 题解&#xff1a; type pair struct {ch bytepos int }func firstUniqChar(s string) int {n : len(s)pos : [26]int{}for i : range pos[:] {pos[i] n}q : []pair{}for i : range s {ch : s[i] - aif pos[ch] n {pos[ch] iq append(q, pair{ch, i})} e…

数仓工具—Hive语法之URL 函数

hive—语法—URL 函数 业务需求中,我们经常需要对用户的访问、用户的来源进行分析,用于支持运营和决策。例如我们经常对用户访问的页面进行统计分析,分析热门受访页面的Top10,观察大部分用户最喜欢的访问最多的页面等: 又或者我们需要分析不同搜索平台的用户来源分析,统…

jmeter同步定时器、固定定时器、统一随机定时器、常数吞吐量定时器详解

一、同步定时器 可以让多个线程同时向服务器发送请求&#xff0c;实现瞬间并发(相当于现实中同步秒杀商品)类似于集合点 例如&#xff1a;10个人约定去旅游&#xff0c;出发前提前会在某一个地方等到10个人同时都到了约定地点之后再一同排队上车 在任意接口下添加同步定时器模…

区域智慧农业解决方案

### 1. 项目概述 《区域智慧农业整体解决方案》由左岸芯慧提出&#xff0c;旨在通过数字化手段打造新型农业经营管理方式&#xff0c;实现产销一体化。 ### 2. 农业监管与需求分析 方案针对监管部门、消费者和生产服务企业的需求进行分析&#xff0c;指出农业监管包括数据收…

【SpringBoot】使用Redis

目录 0. 安装Redis 1. 导入依赖 2. 配置Redis 3. idea连接Redis 4. 使用Redis简单实现记录访问次数 1. 配置拦截器 2. 定义拦截器 3. 控制器类 0. 安装Redis 我使用的是本地Redis服务器&#xff0c;安装过程。安装完成后启动Redis服务。 1. 导入依赖 <!-- red…

负载均衡调度器--LVS

文章目录 集群和分布式集群分布式 LVS介绍LVS特点LVS工作原理LVS集群架构 LVS集群中的术语CIPVIPRSDIPRIP LVS集群的工作模式NAT模式DR模式DR模式的特点: TUN模式 LVS调度算法LVS相关软件ipvsadm 命令管理集群服务&#xff1a;增、改、删管理集群上的RS:增、改、删 创建集群 LV…

如何修复软件中的BUG

笔者上一篇博文《如何开发出一款优秀的软件》主要讲了如何开发一款优秀的软件及相应的必要条件。但对一个已上线&#xff0c;已经成型的产品&#xff0c;该如何解决存在的bug呢&#xff1f;这是本文要阐述的内容。 在这里&#xff0c;首先说一下bug的种类及bug严重程度分类&…

微信小程序认证和备案

小程序备案的流程一般包括以下步骤‌&#xff1a; 准备备案所需材料‌&#xff1a;通常需要提供‌营业执照、法人的‌身份证、两个‌手机号和一个邮箱等资料。 ‌1 ‌登录‌微信公众平台‌&#xff1a;作为第一次开发微信小程序的服务商&#xff0c;需要通过微信公众平台申请…

AAC高级音频编码技术

一、什么是AAC AAC的中文名称是高级音频编码技术&#xff0c;它是基于MPEG-2的一种全新的音频编码技术。随着时代的发展&#xff0c;目前AAC的技术升级到MPEG-4表准。AAC广泛的应用在网络传输、高清录制等领域&#xff0c;而AAC技术的出现就是为了取代之前的MP3格式。 二、为什…

酒店网站管理系统前后台完整源码

酒店网站管理系统前后台完整源码&#xff0c;架构是javasshmysql。 系统基于SSH框架&#xff0c;数据库用的mysql。系统分为前台网站部分&#xff0c;和后台管理部分。 注意&#xff0c;不是php代码&#xff0c;是java代码&#xff0c;使用者需要懂java才行。仅供懂java的人学…

如何提升网站的收录率?

要提升网站的收录率&#xff0c;其中一个特别有效的工具就是GPC爬虫池&#xff0c;这个工具通过深度研究谷歌SEO算法&#xff0c;吸引谷歌爬虫。 GPC爬虫池的基本原理是构建一个庞大的站群系统&#xff0c;并创建复杂的内链和外链结构&#xff0c;以吸引并留住谷歌蜘蛛 使用GP…

跟着李沐学ai

01 课程安排【动手学深度学习v2】-跟李沐学AI-【完结】动手学深度学习 PyTorch版-哔哩哔哩视频 (bilibili.com)https://www.bilibili.com/list/1567748478?sid358497&spm_id_from333.999.0.0&desc1&oid714717789&bvidBV1oX4y137bC 目标 介绍深度学习经典和最…

大白话说什么是“MLLM”多模态大语言模型

1. 什么是MLLM多模态大语言模型 1.1 先来思考一个问题 如果上传了一张图片&#xff0c;并向大模型提问。“图片中绿色框框中的人是谁&#xff1f;” 大模型回答&#xff1a;“那是波多野吉衣老师” 请问&#xff0c;大模型是怎么做到的&#xff1f; 我们用常规的思路来想一…

使用 MongoDB 构建 AI:Patronus 如何自动进行大语言模型评估来增强对生成式 AI 的信心

大语言模型可能不可靠&#xff0c;这几乎算不上头条新闻。对于某些用例&#xff0c;这可能会带来不便。而对于其他行业&#xff0c;尤其是受监管行业&#xff0c;后果则要严重得多。于是&#xff0c;业内首个大语言模型自动评估平台 Patronus AI 应运而生。 Patronus AI 由 Met…