Mysql备份和恢复的类型,备份恢复的几种方法! --个人整理 MySql数据库基本操作(一) 前八月融合创新提升服务,大数据搭建信息网 长三角税收一体化按下“快进键” 一些建议:给当年刚做程序员的我 谁是物联网江湖明日之星?答案是新CIoT 企业信用有效“变现” 江苏银行物联网金融规模达185亿 2020年中国5G物联网行业:中国通信运营商5G投资达1.23万亿元-可下载 搭建 GFS 分布式文件系统-----实操 排障集锦:九九八十一难之第十五难!-------------史上最全rsync报错详解 docker系列1---docker隔离和限制技术 Linux系统安全及应用加固———最适合新手学,新手都能看懂!超详细的理论+超详细的实验!呕心沥血之作完成! LAMP架构集成ownCloud搭建私有云盘 Shell脚本正则表达式(一) Linux第一人称侵入进程的好地方 Windows DOS常用命令(持续更新完善) 大数据驱动新材料研发 变革从内而发,一站式大数据平台和多模数据库雄起 雕佛像、打棒球、开飞机、去北极,这个90后程序员有点不一样 12项特色功能构建施工现场“物联网” 400亿美元!英伟达收购Arm 软银套现离场物联网梦醒 卫星物联网再次引发热议,原因在这里 信用飞:航旅行业数字化前景可期,大数据预防砍头息乱象 大数据加持自动驾驶产业发展 上海智能网联汽车公共数据中心揭牌 恒久科技(002808.SZ):子公司闽保信息与鸿达兴业签署智能制造及大数据平台综合应用项目战略合作框架协议 工业平板电脑如何在物联网中发挥作用? 400亿美元!英伟达收购Arm 软银套现离场物联网梦醒 “数字心脏”动态解析消费密码——国家级消费市场大数据联合实验 重庆:大数据智能化牵引产业结构调整质效提升 分析物联网技术在智能家居中的应用场景 国家级消费市场大数据联合实验室在上海先行先试 山西吕梁培训搬迁户成为大数据标注员 昔日贫困户,玩转高科技 知乎热议:2020年程序员是否过剩? 柯建东:宁波抢抓工业物联网新机遇,要做好四个平台建设 旷视:城市物联网的实现,是从超级应用到操作系统的沉淀过程 排障集合———忘记原密码,如何重新修改MySQL登入密码 【Redis】主从复制 网易2021批笔试题解 msf工具之木马程序制作以及伪装 【JAVA】滴滴-2021校招在线笔试-DE数据开发试卷-0913 机器学习13 -- 无监督学习之自监督 2020年全国数学建模大赛 B题部分代码和模型的建立 jumpserver安装(centos) Redis 知识点总结 通过RabitMQ实现分布式事务 高焕堂《嵌入式UML设计》读书笔记_第一章 2020年中国5G在物联网行业:中国通信运营商5G投资达1.23万亿元(可下载) 面试题精选:数据伪造 繁忙的都市(并查集、Kruskal) BFS 力扣 200.岛屿数量 深度操作系统Deepin V20正式版
您的位置:首页 >物联网 >

Mysql备份和恢复的类型,备份恢复的几种方法! --个人整理

个人整理,感谢观看

一,为什么要做数据备份?二,备份的分类三,常见的备份方法四,mysql完全备份操作1.物理备份与恢复2.mysqldump备份和恢复五,增量备份和恢复1、增量备份的特点2、MySQL数据库二进制日志对备份的意义方法:一般恢复:基于位置恢复:基于时间戳恢复

一,为什么要做数据备份?

在生产环境中,数据的安全性非常重要,任何数据的丢失都可能会产生严重的后果,造成数据丢失的原因: 程序错误 人为操作失误 运算错误 磁盘故障 灾难 等等…所以说备份数据库是非常重要的,对咱们的数据安全性也就能大大的提高

二,备份的分类

物理备份 对数据库操作系统的物理文件(数据文件,日志文件等…)备份 物理备份方法:

冷备份(脱机备份):需要关闭数据库,才能进行 热备份(联机备份):数据库处于运行状态,依赖数据库的日志文件 温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作

逻辑备份:对数据库逻辑组件(数据库中的表…)的备份

从数据库的备份策略角度,备份可分为

完全备份:每次对数据库进行完整的备份 差异备份:备份自从上次完全备份之后被修改过的文件 增量备份:只有在上次完全备份或增量备份后被修改的文件才会被备份

三,常见的备份方法

1.物理冷备份 tar命令

2.专用备份工具 mysqldump mysqlhotcopy

3.二进制日志

4.第三方工具备份 Percona XtraBackup Xtrabackup、innobackupex、xbstream

四,mysql完全备份操作

1.物理备份与恢复

备份: systemctlstop mysqld #先关闭数据库服务 mkdir /bakup#创建备份目录 tar zcvf /bakup/mysql_all-$(date +%F).tar.gz/usr/local/mysql/data/ #压缩目录备份 cd /backup/#查看备份模拟故障:mkdir /bak #创建目录模拟故障 mv /usr/local/mysql/data//bak#移动数据文件目录cd /usr/local/mysql/ #查看模拟故障是否成功 ll恢复:mkdir /restore#创建恢复存放目录tar zxvf /bakup/mysql_all-2020-09-13.tar.gz-C/restore/#将之前压缩备份的目录,解压到指定的新建恢复存放目录 mv /restore/usr/local/mysql/data//usr/local/mysql/ #将解压的数据文件目录data,移动到mysql下systemctlstartmysqld #启动服务systemctl status mysqld #查看数据库开启正常● mysqld.service - MySQL Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2020-09-13 06:03:42 EDT; 3h 56min ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.htmlProcess: 9819 ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/usr/local/mysql/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)Process: 9801 ExecStartPre=/usr/local/mysql/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS) Main PID: 9822 (mysqld)

2.mysqldump备份和恢复

mysqldump 可以将指定的库,表,或全部的库导出为sql脚本;

备份的几种操作:

mysqldump备份需要和mysql进行数据交互,如果关闭mysql 则无法备份和恢复mysqldump -u 用户 -p [选项] 库名 [表名1] [表名2] … > /备份路径/备份文件名 mysqldump -u 用户 -p [选项] --databases 库名1 [库名2] … > /备份路径/备份文件名mysqldump -u 用户 -p [选项] --all-databases > /备份路径/备份文件名

示例: mysqldump -u root -p mysql user >mysql-user.sql #备份数据路mysql中的user表 ,文件保存在当前操作目录下面 Enter password: ###输入密码abc123 mysqldump -u root -p --databases auth >auth.sql #备份auth数据库 文件保存在当前操作目录下面 Enter password: ####输入密码abc123

操作: 准备环境: 创建数据库—创建表—表内增加点数据

1.create database wow;2.use wow;3.create talbe lol(name CHAR(16) NOT NULL,password CHAR(48) DEFAULT'',primary key (name));4.mysql> insert into lol(name,password) -> values-> ('xiaohong',password('123456'));5.mysql> insert into lol values ('lisi',password('123456'));Query OK, 1 row affected, 1 warning (0.01 sec)对数据库的表备份: mysqldump -u root -pwowlol >lol.sql #对数据库中的lol表做备份Enter password:#输入密码恢复:mysql -u root -p uou < lol.sql#uou是之前存在的空库,将备份表lol导入到uou库中;Enter password: mysql -u root -p -e 'show tables from uou' #查看数据表lol是否导入成功Enter password: +---------------+| Tables_in_uou |+---------------+| lol || user|+---------------+对数据库做备份:mysqldump -u root -p --databases wow >wow.sqlEnter password: 模拟数据库故障:[root@localhost ~]# mysql -u root -p -e 'drop database wow'#将库wow删除,模拟故障(高危操作哦!!!!)Enter password: [root@localhost ~]# mysql -u root -p -e 'show databases'#查看下是否被删除Enter password: +--------------------+| Database |+--------------------+| information_schema || mysql|| performance_schema || sys|| uou|+--------------------+恢复:[root@localhost ~]# mysql -u root -p < wow.sql#将库wow导入数据库中Enter password: [root@localhost ~]# mysql -u root -p -e 'show databases'#查看下数据库中的库Enter password: +--------------------+| Database |+--------------------+| information_schema || mysql|| performance_schema || sys|| uou|| wow|+--------------------+

五,增量备份和恢复

1、增量备份的特点

与完全备份完全不同,增量备份没有重复数据,备份量不大,时间短;但其恢复麻烦,需要上次完成完全备份及备份之后的所有增量备份才能恢复。

2、MySQL数据库二进制日志对备份的意义

二进制日志保存了所有更新或者可能更新数据的操作。二进制日志在启动mysql服务器后开始记录,并在文件达到二进制日志所设置的最大值 或者接受到flush logs命令后重新创建新的日志文件,生成二进制的文件序列,并及时把这些日志文件保存到安全的存储位置,即可完成一个时间段 的增量备份

方法:

一般恢复: (一般丢什么数据,找什么数据) 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 密码

一般恢复:

准备环境:生成二进制文件--常见库--表1.vi /etc/my.cnf在[mysqld]配置内,添加log-bin=/usr/local/mysql/data/mysql-bin 2.systemctlrestart mysqld#重启服务3.ll/usr/local/mysql/data#查看时候有二进制文件日志生成....省略部分...-rw-r-----. 1 mysql mysql154 Sep 13 11:50 mysql-bin.000001-rw-r-----. 1 mysql mysql 39 Sep 13 11:50 mysql-bin.index....省略部分...
在这里插入代码片创建测试环境:mysql> create database cl;Query OK, 1 row affected (0.01 sec)mysql> use cl;Database changedcreate table cls(工号 char(20) not null,姓名 char(10) not null,工资 char(6) not null,部门 char(5));Query OK, 0 rows affected (0.01 sec)insert into cls values ('001','熏无空','18888',1);Query OK, 1 row affected (0.00 sec)mysql> insert into cls values ('002','沙屋静','16666',2);Query OK, 1 row affected (0.00 sec)mysql> insert into cls values ('003','竹巴结','14444',3);Query OK, 1 row affected (0.01 sec)mysql> select * from cls;+--------+-----------+--------+--------+| 工号 | 姓名| 工资 | 部门 |+--------+-----------+--------+--------+| 001| 熏无空| 18888| 1|| 002| 沙屋静| 16666| 2|| 003| 竹巴结| 14444| 3|+--------+-----------+--------+--------+3 rows in set (0.00 sec)mysql> show master logs;#查看是否生成二进制日志文件,记录着操作+------------------+-----------+| Log_name | File_size |+------------------+-----------+| mysql-bin.000001 |1802 |+------------------+-----------+1 row in set (0.00 sec)
进行一次完全备份:mysql> flush tables with read lock;Query OK, 0 rows affected (0.00 sec)mysql> exitBye mysqldump -u root -p cl cls >/mysql-bak/cls-$(date +%F).sqlEnter password: ll /mysql-bak/total 4-rw-r--r--. 1 root root 1952 Sep 13 12:22 cls-2020-09-13.sql mysqladmin -u root -p flush-logsEnter password:ll /usr/local/mysql/data/...省略部分...-rw-r-----. 1 mysql mysql 1849 Sep 13 12:24 mysql-bin.000001-rw-r-----. 1 mysql mysql154 Sep 13 12:24 mysql-bin.000002-rw-r-----. 1 mysql mysql 78 Sep 13 12:24 mysql-bin.index...省略部分...录入新的内容并进行一次增量备份:mysql> unlock tables;Query OK, 0 rows affected (0.00 sec)mysql> use cl;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> insert into cls values ('004','滕森','10000',4);Query OK, 1 row affected (0.00 sec)mysql> insert into cls values ('005','金娇','10000',5);Query OK, 1 row affected (0.00 sec)mysql> select * from cls;+--------+-----------+--------+--------+| 工号 | 姓名| 工资 | 部门 |+--------+-----------+--------+--------+| 001| 熏无空| 18888| 1|| 002| 沙屋静| 16666| 2|| 003| 竹巴结| 14444| 3|| 004| 滕森| 10000| 4|| 005| 金娇| 10000| 5|+--------+-----------+--------+--------+5 rows in set (0.00 sec)mysqladmin -u root -p flush-logs;#再次查看二进制日志文件,看操作是否被记录生成文件Enter password: ll /usr/local/mysql/data/...省略部分...-rw-r-----. 1 mysql mysql 1849 Sep 13 12:24 mysql-bin.000001-rw-r-----. 1 mysql mysql753 Sep 13 12:30 mysql-bin.000002-rw-r-----. 1 mysql mysql154 Sep 13 12:30 mysql-bin.000003-rw-r-----. 1 mysql mysql117 Sep 13 12:30 mysql-bin.index...省略部分... cp /usr/local/mysql/data/mysql-bin.000002/mysql-bak/#将二进制日志文件复制到咱们创建的备份目录下模拟失误操作删除cls表; mysql -u root -p -e 'drop table cl.cls'Enter password: mysql -u root -p -e 'select * from cl.cls'Enter password: ERROR 1146 (42S02) at line 1: Table 'cl.cls' doesn't exist恢复操作:(完全备份恢复)mysql -u root -p cl < /mysql-bak/cls-2020-09-13.sql Enter password: [root@localhost ~]# mysql -u root -p -e 'select * from cl.cls'Enter password: +--------+-----------+--------+--------+| 工号 | 姓名| 工资 | 部门 |+--------+-----------+--------+--------+| 001| 熏无空| 18888| 1|| 002| 沙屋静| 16666| 2|| 003| 竹巴结| 14444| 3|+--------+-----------+--------+--------+增量备份恢复: mysqlbinlog --no-defaults /mysql-bak/mysql-bin.000002 |mysql -u root -p Enter password:mysql -u root -p -e 'select * from cl.cls'Enter password: +--------+-----------+--------+--------+| 工号 | 姓名| 工资 | 部门 |+--------+-----------+--------+--------+| 001| 熏无空| 18888| 1|| 002| 沙屋静| 16666| 2|| 003| 竹巴结| 14444| 3|| 004| 滕森| 10000| 4|| 005| 金娇| 10000| 5|+--------+-----------+--------+--------+

基于位置恢复:

模拟删除表cls:删除表cls---恢复下完全备份cl.2020.9.13.sql--查看二进制日志文件内想要恢复的位置mysqlbinlog --no-defaults --base64-output=decode-rows -v /mysql_bak/mysql-bin.000002####--base64-output=decode-rows64解码###-v 换行显示.........省略部分...........#at 289#200913 12:27:59 server id 1end_log_pos 344 CRC32 0x25b12913Table_map: `cl`.`cls` mapped to number 225#at 344#200913 12:27:59 server id 1end_log_pos 399 CRC32 0xbd609658Write_rows: table id 225 flags: STMT_END_F### INSERT INTO `cl`.`cls`### SET### @1='004'### @2='滕森'### @3='10000'### @4='4'# at 399#200913 12:27:59 server id 1end_log_pos 430 CRC32 0x3561ca6aXid = 74COMMIT/*!*/;# at 565#200913 12:28:26 server id 1end_log_pos 620 CRC32 0x5e09ca65Table_map: `cl`.`cls` mapped to number 225# at 620#200913 12:28:26 server id 1end_log_pos 675 CRC32 0x9a65af81Write_rows: table id 225 flags: STMT_END_F### INSERT INTO `cl`.`cls`### SET### @1='005'### @2='金娇'### @3='10000'### @4='5'# at 675#200913 12:28:26 server id 1end_log_pos 706 CRC32 0x510d9e90Xid = 75COMMIT/*!*/;.........省略部分...........

咱们只想恢复 滕森的数据!操作如下:

从文件可以得知,at289- at565这位置范围是滕森 mysqlbinlog--no-defaults --stop-position='430' /mysql-bak/mysql-bin.000002 |mysql -u root -p #位置在操作节点附近即可Enter password: [root@localhost ~]# mysql -u root -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)[root@localhost ~]# mysql -u root -p -e 'select * from cl.cls'Enter password: +--------+-----------+--------+--------+| 工号 | 姓名| 工资 | 部门 |+--------+-----------+--------+--------+| 001| 熏无空| 18888| 1|| 002| 沙屋静| 16666| 2|| 003| 竹巴结| 14444| 3|| 004| 滕森| 10000| 4|+--------+-----------+--------+--------+另一种操作方法:start 跟上面差不多操作注意: 基于位置恢复的操作,节点不要选择太靠近操作的节点,否则容易恢复失败。

基于时间戳恢复

比如咱们通过时间戳恢复金娇的数据 20200913 12:28:26 # 日志文件中金娇所在的时间戳

 mysqlbinlog --no-defaults --start-datetime='2020-09-13 12:28:26' /mysql-bak/mysql-bin.000002|mysql -u root -p Enter password: [root@localhost ~]# mysql -u root -p -e 'select * from cl.cls'Enter password: +--------+-----------+--------+--------+| 工号 | 姓名| 工资 | 部门 |+--------+-----------+--------+--------+| 001| 熏无空| 18888| 1|| 002| 沙屋静| 16666| 2|| 003| 竹巴结| 14444| 3|| 004| 滕森| 10000| 4|| 005| 金娇| 10000| 5|+--------+-----------+--------+--------+

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。