MySQL的数据备份

article/2025/10/7 23:55:41

MySQL的数据备份

MySQL数据完全备份

数据备份目的?

数据丢失或者损坏,可以使用备份数据恢复

数据备份策略

  • 完全备份

    备份所有数据(一张表,一个库、一台服务器)

  • 增量备份

    备份上次备份后,所有新产生的数据

  • 差异备份

    备份完全备份后,所有新产生的数据

数据备份方式:

  • 物理备份

    • 冷备 cp、tar
  • 逻辑备份

    • mysqldump
  • mysql

物理备份及恢复

备份操作

cp -r /var/lib/mysql 备份目录/mysql.bak

tar -zcvf /root/mysql.tar.gz /var/lib/mysql/*

恢复操作

cp -r 备份目录/mysql.bak /var/lib/mysql

tar -zxvf /root/mysql.tar.gz -C /var/lib/mysql/*

chown -R mysql:mysql /var/lib/mysql

例:

把数据库服务器的数据库文件复制到测试主机上

#192.168.4.3(数据库服务器)
cp -r /var/lib/mysql   /root/mysql.bak
scp -r /root/mysql.bak root@192.168.4.100:/root 
#192.68.4.100(测试服务器)
ss -nultp | grep 3306
systemctl stop mysqld  #数据库服务如果开启,请关闭
rm -rf /var/lib/mysql
cp -r /root/mysql.bak/  /var/lib/mysql
chown -R mysql:mysql  /var/lib/mysql
systemctl start mysqld
#登录MySQL查看,数据是否和数据库服务器的数据一致

逻辑备份:

使用软件自带的备份程序(备份命令)对数据做备份,在执行备份命令时,会根据已有的数据生成对应的命令,把命令存放到指定的备份文件里,恢复时,执行备份文件里的命令恢复数据

备份

mysqldump命令

命令格式:

mysqldump -uroot -p 密码 库名 > 目录/xxx.sql

恢复

mysql 命令

命令格式:

mysq -uroot -p 密码 库名 < 目录/xxx.sql

备份时库名的表示方式

  • –all-databases 或 -A #所有库
  • 数据库名 #单个库
  • 数据库名 表名 #单张表
  • -B 数据库1 数据库2 #多个库

注意事项:

无论时备份还是恢复都需要验证用户权限

#先建立一个目录来存放备份数据
mkdir /mybak
mysqldump -uroot -p123456 -A >/mybak/alldb.sql  #备份整个数据库
mysqldump -uroot -p123456 db1 >/mybak/db1.sql   #备份db1
mysqldump -uroot -p123456 db3 user >/mybak/db3_user.sql  #备份单个表
mysqldump -uroot -p123456 -B db3 db1 >/mybak/twodb.sql #备份多个库#测试,进入数据库删除库中的所有数据进行测试
#恢复单个库,单个表需要提前需要建好对应的库或者表
mysql -u root -p123456
drop database db1;
create database db1;  #恢复库数据需要提前建立好数据库
\q
mysql -u root -p123456 db1 </mybak/db1.sql
mysql -u root -p123456
use db1;
show table;
#恢复多个库,不需要提前建立相应的库,因为多个库的恢复,备份文件中有建立库和表的sql
mysql -u root -p123456 </mybak/alldb.sql

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6NFVdAsB-1657254850585)(E:/Typort/image-20211213233205016.png)]

MySQL数据增量备份

使用MySQL服务的binlog日志实现数据的增量备份与恢复

binlog日志的使用

binlog日志介绍

什么是binlog日志

  • 也称作 二进制日志
  • MySQL服务日志文件的一种,默认没有启用
  • 记录除查询之外的所有SQL命令
  • 可用于数据备份和恢复
  • 配置mysql主从同步的必要条件
启用binlog日志
配置项用途
server id=数字指定id值(1-255)
log-bin=[目录名/文件名]启用binlog日志
max_binlog_size=数值m指定日志文件容量,默认1G
vim /etc/my.cnf
[mysqld]
server_id=3
log_bin    #默认在 /var/lib/mysql,默认命名主机名-bin。随机六位数systemctl restart mysqld
#查看日志
mysql> show master status;
ls /var/lib/mysql#自定义目录,这个目录需要提前建立好,并且mysql用户要对这个文件有写入权限
mkdir /mylog
vim /etc/my.cnf
[mysqld]
server_id=3   
log_bin=/mylog/bxl chown mysql /mylog
systemctl restart mysqld
#查看日志
mysql> show master status;  #查看日志名称是否发生变化

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6vp9BBSD-1657254850587)(E:/Typort/image-20211213235337257.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WHLxJt42-1657254850588)(E:/Typort/image-20211214000014982.png)]

手动创建新的binlog日志文件

binlog相关文件

  • 主机名-bin.index #索引文件
  • 主机名-bin.000001 #第一个二进制文件
  • 主机名-bin.000002 #第二个二进制文件

每次重启服务,就会生成一个新的二进制文件

systemctl restart mysqld
mysql> flush logs;  #刷新日志文件
mysql -uroot -p123456 -e "flush logs"  #在命令行执行SQL语句
mysql -uroot -p123456 -e "show master status"
mysqldump -uroot -p123456 --flush-logs db3 > /mybak/db3.sql  #在执行备份时刷新日志文件

以上命令都会刷新二进制文件

删除已有的binlog日志

清理日志

  • 删除指定编号之前的binlog日志文件

    mysql> purge master logs to “binlog文件名”;

  • 删除所有的binlog日志,重建新日志

    mysql> reset master;

#示例:删除4之前的日志文件
mysql> system ls /mylog  #查看当前有哪些日志文件
mysql> purge master logs to "bxl.000004";
mysql> system ls /mylog
#删除所有的binlog日志,重建新日志
mysql> reset master;
mysql> system ls /mylog
mysql> show master status;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p1jgLsWM-1657254850588)(E:/Typort/image-20211214105419334.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X2pkhSX0-1657254850589)(E:/Typort/image-20211214105603419.png)]

查看binlog日志内容
mysql> show master status;  #在没有进行对数据的改变时,position偏移量不会发生改变,偏移量发生改变说明数据发生了变化
insert into db3.user(name,uid,gid) values("x",1001,1001);
insert into db3.user(name,uid,gid) values("y",1002,1002);
insert into db3.user(name,uid,gid) values("z",1003,1003);
insert into db3.user(name,uid,gid) values("aa",1004,1004);
insert into db3.user(name,uid,gid) values("bb",1005,1005);
show master status;  #偏移量发生了改变
\q  #退出数据库
mysqlbinlog /mylog/bxl.000001   #查看二进制文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fpQeED4S-1657254850590)(E:/Typort/image-20211214111215244.png)]

使用binlog日志恢复数据

命令格式:

mysqlbinlog /路径/日志文件 | mysql -uroot -p123546

例:

#在test主机上进行恢复测试,在上面使用过test主机进行过物理备份,所以他两的数据时一致的,现在进行增量恢复
#192.168.4.3(主服务器)
scp /mylog/bxl.000001 root@192.168.4.100:/root
#192.168.4.100(test服务器)
mysql -uroot -p123456 -e "select count(*) from db3.user"
mysqlbinlog /root/bxl.000001 |mysql -uroot -p123456
mysql -uroot -p123456 -e "select count(*) from db3.user"
mysql -uroot -p123456 -e "select * from db3.user where id > 21" 
#查看是否恢复成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LrjFIba3-1657254850592)(E:/Typort/image-20211214112733293.png)]

使用binlog日志恢复指定数据

修改日志格式:

通过修改日志格式,可以看到sql语句,来决定那些需要备份,那些不需要

日志格式类型

  • statement 报表模式
  • row 行模式
  • mixed 混合模式

查看默认使用的日志格式

show variables like "binlog_format";  #默认行模式

修改日志记录格式

vim /etc/my.cnf
binlog_format="mixed"systemctl restart mysqld
mysql -uroot -p123456 -e"reset master"
mysql -uroot -p123456 -e"show master status"
mysql -uroot -p123456 -e'insert into db3.user(name,uid,gid) values("tom",1006,1006)'
mysql -uroot -p123456 -e"show master status"
mysqlbinlog /mylog/bxl.000001 | grep -i insert

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1q6jJJmW-1657254850595)(E:/Typort/image-20211214115136462.png)]

在日志文件中能看到我们刚刚写入的指令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7IOlo4kE-1657254850596)(E:/Typort/image-20211214115407246.png)]

日志文件如何区分记录的多条sql命令:

偏移量,时间点

命令格式:

mysqlbinlog 选项 /路径/日志文件 | mysql -uroot -p密码

指定偏移量

–start-position=偏移量开始值 --stop-position=偏移量结束值

指定时间点

–start-datetime=“yyyy-mm-dd hh:mm:ss” --stop-datetime=“yyyy-mm-dd hh:mm:ss”

#刚刚添加了用户,现在删除他,我们只需要恢复他添加用户的内容,删除不恢复
mysql -uroot -p123456 -e ' delete from db3.user where name="tom" '
mysqlbinlog /mylog/bxl.000001 | grep -i delete  #查看删除是否写入成功
#日志文件传输,在test主机上进行测试
scp /mylog/bxl.000001 root@192.168.4.100:/tmp
#test主机
mysqlbinlog /tmp/bxl.000001

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fHn8PXta-1657254850596)(E:/Typort/image-20211214121042913.png)]

这就是一个sql语句的binlog

at 325开始偏移量

211214 系统时间

at 452语句偏移量

commit 提交

at 483 这个语句提交后的偏移量

这里我们使用的是开始偏移量和语句提交后的偏移量(提交后语句才会生效)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZaqXwU6A-1657254850597)(E:/Typort/image-20211214121814069.png)]


http://chatgpt.dhexx.cn/article/XCt75FBS.shtml

相关文章

mysql数据备份

直接拷贝文件 myisam存储引擎 只要对应表的后缀为.frm .MYD .MYI,三个文件拷贝到对应的数据库文件夹就行 innodb存储引擎 先通过SHOW CREATE TABLE table命令,查询出表的创建语句,然后在备份库中执行执行ALTER TABLE table DISCARD TABLESPACE,丢弃的表空间拷贝表的后缀为.…

windows MySQL数据备份

本博客属作者原创&#xff0c;未经允许禁止转载&#xff0c;请尊重原创&#xff01;如有问题请联系QQ509961766 环境 OS&#xff1a;windows server 2012 Mysql&#xff1a;5.6.33 编写脚本 新建dump.bat批处理文件 rem auther:wwhy rem date:20210823 rem ******Backup MyS…

Mysql 数据备份

一、数据库备份的分类 备份方式分很多种&#xff0c;从物理与逻辑的角度&#xff0c;备份可分为以下几类&#xff1a; 1. 物理备份 指对数据库操作系统的物理文件&#xff08;如数据文件、日志文件等&#xff09;的备份 物理备份是磁盘块为基本单位将数据从主机复制到备机 物…

Mysql数据备份(mysqldump的操作)

数据备份 所有备份数据都应放在非数据库本地&#xff0c;&#xff08;得用远程存储&#xff0c;如ftp&#xff0c;nfs&#xff09;而且建议有多份副本。 备份的作用 能够防止由于机械故障以及人为误操作带来的数据丢失&#xff0c;如&#xff0c;将数据库文件保存在了其它地…

MySQL 数据备份与恢复

本次使用的MySQL版本为8.0.20 目录 一、数据备份 1.使用 MySQLdump 命令备份 &#xff08;1&#xff09;使用MySQLdump备份单个数据库中的所有表 案例&#xff1a;完成数据插入后&#xff0c;输入备份命令如下&#xff1a; &#xff08;2&#xff09;使用MySQLdump备份数据…

MySQL备份

目录 一、直接拷贝数据库文件 二、mysqldump备份数据库 1、备份 2、备份还原 (1)完全备份还原 (2)增量备份 #eg ​(1)创建一个新的数据库表resume.test ​(2)此时完全备份 ​​(3)接着再往数据库表里面插入两条数据 ​(4)删除数据库resume,刷新日志 ​(5)此时会增加一个…

MySQL备份方案

mysql数据库的几种备份方案&#xff1a; 一、binlog二进制日志通常作为备份的重要资源&#xff0c;所以再说备份方案之前先总结一下binlog日志 1、binlog日志 1.1、引起mysql服务器改变的任何操作( 增 删 改 没有查)1.2、复制功能依赖于此日志1.3、slave服务器通过复制master…

MySQL 数据库备份(一)(完全备份与恢复)

文章目录 前言一、MySQL 完全备份1.数据库备份方式精讲1.1 数据库备份的重要性1.2 数据库备份的分类1.2.1 物理备份1.2.2 逻辑备份1.2.3 完全备份1.2.4 差异备份1.2.5 增量备份1.2.6 备份方式比较 1.3 MySQL 完全备份概念解读 2.mysqldump 备份演练2.1 使用 tar 打包文件夹备份…

捷豹路虎选择思博伦车载以太网一致性测试解决方案

现代化的汽车往往拥有上百种发动机控制单元&#xff08;ECU&#xff09;&#xff0c;随着越来越多的车辆开始支持多摄像机和高级驾驶员辅助系统&#xff08;ADAS&#xff09;等特性&#xff0c;汽车设计师必须在车载网络中采用更高带宽的以太网技术。汽车以太网源于现代通信网络…

Hype_V

Hyper-V是 微软的一款虚拟化产品&#xff0c;是微软第一个采用类似Vmware和Citrix开源Xen一样的基于hypervisor的技术。这也意味着 微软会更加直接地与市场先行者VMware展开竞争&#xff0c;但竞争的方式会有所不同。 目录 简介 系统要求 架构特点 技术 实际部署 展开 简介 系统…

HSRP介绍

HSRP(Hot Standby Router Protocol 热备份路由器协议)是Cisco的专有协议。HSRP把多台路由器组成一个“热备份组”&#xff0c;形成一个虚拟路由器。这个组内只有一个路由器是Active(活动)的&#xff0c;并由它来转发数据包&#xff0c;如果活动路由器发生了故障&#xff0c;备份…

php+coreseek/sphinx之中文全文搜索平台搭建

1.简介 sphinx是一款高性能全文搜索软件包&#xff0c;由俄罗斯人开发&#xff0c;sphinx本身是可以支持中文搜索的&#xff0c;只是不支持中文分词&#xff0c;需要安装中文分词插件&#xff0c;coreseek就是一个打包了mmseg中文分词插件和sphinx源码的安装包。 2.安装 cores…

live555传输Speex音频详解一:Speex over RTP

1. RTP Speex 头部 RTP头部在[RFC3550]中定义。本文定义RTP头部中各字段的用法。 Payload Type (PT): 本格式的负责类型号。 Marker (M) bit: 此位被用来标志一段无声后有声的开始。打在 有声数据的第一个包上。 Speex支持声音检测&#xff0c;可以在无声时不 产生帧数据。所…

Speex的使用

Downloads Speex是一套主要针对语音的开源免费&#xff0c;无专利保护的音频压缩格式。Speex工程着力于通过提供一个可以替代高性能语音编解码来降低语音应用输入门槛 。另外&#xff0c;相对于其它编解码器&#xff0c;Speex也很适合网络应用&#xff0c;在网络应用上有着自己…

网络测速服务器OpenSpeedTest

什么是 OpenSpeedTest &#xff1f; OpenSpeedTest 是一个跨平台的互联网速度测试应用程序。因此&#xff0c;您可以在不同操作系统中的各种网络浏览器中测试您的互联网速度&#xff0c;而无需安装任何其他应用程序或插件&#xff08;无需 Flash 或 Java&#xff09;。这意味着…

【SpeechX—统一高性能语音部署工具】SpeechX Custom ASR

(以下内容搬运自 PaddleSpeech) 在一些场景中&#xff0c;识别系统需要高精度的识别一些稀有词&#xff0c;例如导航软件中地名识别。而通过定制化识别可以满足这一需求。 相关demo: https://github.com/PaddlePaddle/PaddleSpeech/tree/develop/demos/custom_streaming_asr …

Speex for Android

http://blog.csdn.net/chenfeng0104/article/details/7088138 在Android开发中&#xff0c;需要录音并发送到对方设备上。这时问题来了&#xff0c;手机常会是GPRS、3G等方式上网&#xff0c;所以节省流量是非常关键的&#xff0c;使用Speex来压缩音频文件&#xff0c;可以将音…

IOS开发之SDWebImage

SDWebImage 前言&#xff1a;在我们日常的开发中我们通常会使用SDWebImage来实现UIImageView加载来自互联网的远程图片 官方介绍&#xff1a;一个具有缓存支持的异步映像下载程序 功能简介 一个添加了web图片加载和缓存管理的UIImageView分类一个异步图片下载器一个异步的内存…

SDWebImage-解码、压缩图像

一、简单介绍 研究了下SDWebImage的源码&#xff0c;借鉴了别人的一些资料&#xff0c;感觉逐渐的明白的一些原理&#xff0c;现在就来记录下。 在我们使用 UIImage 的时候&#xff0c;创建的图片通常不会直接加载到内存&#xff0c;而是在渲染的时候默认在主线程上再进行解码…

sdwebimage 加载webp图片

sdwebimage加载 webp / git 配置宏 - (void)setUpCusPhoto {_scrollView [UIScrollView new];_scrollView.frame self.view.bounds;[self.view addSubview:_scrollView];//webpUIImageView *view [[UIImageView alloc] init];view.frame CGRectMake(10, 100, 320, 200);NS…