-
备份与恢复
2017-07-25 22:44:001. Linux系统需要备份的数据 /root /home /var/spool/mail /etc 其他目录 2. 常见服务的数据apache需要备份的数据: 配置文件 网站 日志文件 mysql需要备份的数据: 源码包安装的mysql: /usr/local/mysql/data/ RPM...1. Linux系统需要备份的数据
- /root
- /home
- /var/spool/mail
- /etc
- 其他目录
2. 常见服务的数据
apache需要备份的数据:
- 配置文件
- 网站
- 日志文件
mysql需要备份的数据:
- 源码包安装的mysql: /usr/local/mysql/data/
- RPM包安装的mysql: /var/lib/mysql/
3. 备份策略
完全备份:是指每次都把所有需要备份的数据全部备份。
增量备份:是指每次备份只备份较于上一次备份后新增的数据。
差异备份:是指第一次完全备份原始数据,第二次备份原始数据和差异数据,第三次备份原始数据和差异数据…。
4. 备份命令dump
通常,Linux系统中默认没有安装dump命令,当然,你也可以用下面的方法查询是否安装了dump。
rpm -q dump 或 rpm -qa | grep dump
确定Linux中没有安装dump的话,就用yum快速安装一下:
yum -y install dump
命令格式: dump [选项] 备份之后的文件名 原文件或目录
选项:
- -备份级别:0-9共十个备份级别(-0表示完全备份,-1到-9表示增量备份,只有分区允许增量备份,其他的目录只能完全备份)。
- -f:指定备份之后的文件名。
- -u:分区备份成功后,把备份时间记录在/etc/dumpdates文件中,该参数仅用于分区备份。
- -v:显示备份过程中的详细信息。
- -j:调用bzlib库压缩备份文件,也就是把备份文件压缩为.bz2格式。
- -W:显示允许被dump的分区的备份级别和备份时间。
示例:
dump -0uj -f /root/boot.bak.bz2 /boot 完全备份boot分区,并压缩和更新备份时间。 cat /etc/dumpdates 查看备份时间。 cp /root/install.log /boot 将install.log拷贝到boot分区中。 dump -1uj -f /root/boot.bak1.bz2 /boot 增量备份boot分区。 dump -W 查看分区的备份级别和备份时间。 dump -0j -f /root/etc.bak.bz2 /etc 完全备份/etc目录,并进行压缩。
5. 恢复命令restore
命令格式: restore [模式] [选项]
常用的模式有以下四种,但不能混用。
-C 比较备份数据和实际数据的变化 -i 进入交互模式,手工选择需要恢复的文件 -t 查看模式,用于查看备份文件中拥有哪些数据 -r 还原模式,用户数据的还原
选项:
-f 指定备份文件的文件名
示例:
restore -C -f /root/boot.bak.bz2 比较备份数据和实际数据之间的区别。 restore -t -f /root/boot.bak.bz2 查看备份文件中的所有文件。
如果是增量备份,恢复数据时,先恢复完全备份的原始数据,再逐个恢复增量数据。
这里,我们新建一个空目录 /root/test,来进行恢复测试。
mkdir /root/test cd /root/test restore -r -f /root/boot.bak.bz2 restore -r -f /root/boot.bak1.bz2
-
数据备份与恢复、系统备份与恢复
2018-04-17 22:56:58数据备份与恢复、系统备份与恢复一、数据备份与恢复1、什么是备份备份,即另外准备一– 为应付文件、数据丢失或损坏等可能出现的意外情况,将电子计算机存储设备中的数据复制到大容量存储设备中2、备份对象的类别...数据备份与恢复、系统备份与恢复
一、数据备份与恢复
1、什么是备份
备份,即另外准备一
– 为应付文件、数据丢失或损坏等可能出现的意外情况,将电子计算机存储设备中的数据复制到大容量存储设备中
2、备份对象的类别
系统备份
– 针对整个操作系统进行备份
– 当操作系统损坏或者无法启动时,能通过备份快速恢复
数据备份
– 针对用户的数据文件、应用软件、数据库进行备份
– 当这些数据丢失或损坏时,也能通过备份恢复
3、数据冷备份
• 什么是冷备份
– 指需要备份的文档不被占用的情况下执行备份的方式
– 比如将数据库软件关闭,对数据库资料做备份
• 冷备份的优缺点
– 优点:简单快速、容易恢复到某个时间点、方便维护
– 缺点:只能恢复到某个时间点、备份期间数据不便正常使用
4、数据热备份
• 什么是热备份
– 指执行备份时不影响被备份文档正常使用的的方式
– 比如数据库软件正运行,对数据库资料做备份
• 热备份的优缺点
– 优点:备份时间短、不影响数据使用、可达秒级恢复
– 缺点:所有操作都会同步,包括“删除”
二、Win10数据备份与还原
1、Win10文件备份
① 开始 -- 设置 -- 更新和安全 -- 备份 -- 转到备份和还原
-- 设置备份
② 指定保存的位置、需要备份的内容
③ 检查、保存设置并运行备份
④ 等待备份完成
2、Win10文件备份还原
① 开始 -- 设置 -- 更新和安全 -- 备份 -- 转到备份和还原
-- 还原我的文件
② 浏览文件夹 -- 找到并添加此前的备份 -- 选择要还原的位置(原始位置或其他位置)-- 执行还原操作
3、专用数据恢复
使用第三方的专用数据恢复软件,能针对删除、格式化、重分区
等深度损坏执行恢复操作,比如EasyRecovery易恢复、FinalDate
超级恢复、360文件恢复器、金山数据恢复等
三、系统备份与恢复
1、备份Win10系统
(1)常见的系统备份工具
大都是基于Symantec的Ghost克隆技术实现
-- U深度一键还原精灵
-- 一键还原Onekey、一键ghost 等等
2、一键还原工作方式
(1)U深度一键还原精灵、一键还原Onekey -- 在现有的Win10环境中运行,图形操作为主;
(2)一键ghost
-- 硬盘版,为Win添加启动项,可支持独立运行环境
-- U盘版,通过提前制作好的独立U盘启动
3、制作Win10备份镜像
等待备份过程
检查备份结果
实际备份过程中会执行压缩处理
备份文件小远小于系统盘的数据大小。
4、恢复Win10系统
(1)准备好系统备份(实现一键还原的前提条件)
-- 提前制作了可用的系统备份文件(通常为.gho格式)
-- 有些一键还原工具支持自定义备份位置
(2)恢复Win10操作系统(执行一键还原操作)
-- 根据提示选择备份位置
-- 确认后重启执行
(3)等待恢复过程
(4)确认恢复结果
恢复完成后
-- 系统盘C:\数据会还原到备份时的状态
-- 后增加的数据都会丢失(还原有风险,操作需谨慎!!!!)
四、磁盘及文件系统
1、基本磁盘
-- 传统磁盘,默认是基本磁盘
-- 磁盘大小固定扩展不方便,数量受限
2、动态磁盘(卷):windows 2000及其以后的操作系统支持动态磁盘,
比基本磁盘有较强的可扩展性、高可靠性,高读写性能。
五、基本磁盘概述
1、主分区:引导操作系统
(基本磁盘最多建立3个主分区,只有一个主分区处于激活状态)
2、扩展分区不能直接存储文件(需要细分多个逻辑分区)。
“扩展分区 + 主分区”数量不超过4个
3、逻辑分区:在扩展分区内部划分逻辑分区(不能直接启动操作系统)
4、基本磁盘的管理操作
鼠标右击此电脑 -- 管理 -- 存储 -- 磁盘管理 -- 选中磁盘的未分配空间 --
右键操作(新建简单卷)-- 选择大小 -- 确定
选中磁盘的已建立的分区 -- 右击 -- 格式化
1)创建主分区 2)创建展分区 3)创建逻辑分区
六、动态磁盘
1、鼠标右击基本磁盘 -- 转换为动态磁盘
(除非删除所有简单卷,否则动态磁盘不能转为基本磁盘)
2、新建简单卷
3、扩展简单卷
4、新建跨区卷
需要至少两块动态磁盘
容量是组成跨区卷的所有磁盘空间总和
5、新建带区卷
(1)成员容量大小是相同的;(2)数据被均匀以带区形式跨磁盘交替分配
(3)需要至少两块动态磁盘;(4)容量是组成带区卷所有磁盘空间总和
6、新建镜像卷
(1)具备故障转换功能; (2)在两个物理磁盘上复制数据的容错卷
(3)只需两块大小相同的磁盘;(4)容量是组成镜像卷所有磁盘空间和的一半
7、修复镜像卷
步骤:
① 关机取出故障磁盘换入新磁盘;② 启动计算机, 存储— 磁盘管理;
③ 初始化磁盘转换成动态磁盘
④ 右击之前镜像盘盘符— 选择删除镜像—选择丢失 — 删除镜像 — 确定
右击失败的镜像卷—添加镜像
8、新建RAID-5卷
数据分散写入硬盘并建立一份奇偶校验数据信息
具有较高磁盘利用率、读写性和可靠性
至少需要三块磁盘空间相同的硬盘
容量为磁盘数量-1
9、修复RAID-5卷
步骤:
关机取出故障磁盘换入新磁盘
启动计算机,管理工具— 计算机管理— 存储 — 磁盘管理
初始化磁盘转换成动态磁盘
右击之前RAID-5卷—修复卷
七、五种动态磁盘类型的对比
建立扩展分区 -- 也可用命令敲击
① 执行Win + R --- Cmd 命令
② diskpart
③ select disk + 磁盘区(1、2、3)
④ Create partition extended size = 磁盘大小(如300M)
⑤ Exit
-
数据完全备份与恢复恢复单张表增量备份与恢复
2020-11-09 08:59:50percona软件介绍 、 innobackupex备份与恢复 案例1:数据完全备份与恢复 案例2:恢复单张表 案例3:增量备份与恢复 1 案例1:数据完全备份与恢复 1.1 问题 安装percona软件包 备份所有数据到/allbak目录下 搭建新的...percona软件介绍 、 innobackupex备份与恢复
案例1:数据完全备份与恢复
案例2:恢复单张表
案例3:增量备份与恢复
1 案例1:数据完全备份与恢复
1.1 问题
安装percona软件包
备份所有数据到/allbak目录下
搭建新的数据库服务器,使用备份文件恢复数据
验证数据恢复
1.2 步骤
实现此案例需要按照如下步骤进行。步骤一:安装XtraBackup软件包
1)安装软件
[root@host50 ~]# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
[root@host50 ~]# yum -y install percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
警告:percona-xtrabackup-24-2.4.6-2.el7.x86_64.rpm: 头V4 DSA/SHA1 Signature, 密钥 ID cd2efd2a: NOKEY
准备中… ################################# [100%]
正在升级/安装…
1:percona-xtrabackup-24-2.4.6-2.el7################################# [ 33%]
2:percona-xtrabackup-test-24-2.4.6-################################# [ 67%]
3:percona-xtrabackup-24-debuginfo-2################################# [100%]
2)确认安装的主要程序/脚本[root@host50 ~]# rpm -qa | grep -i percona
percona-xtrabackup-24-2.4.7-1.el7.x86_64
[root@host50 ~]# rpm -ql percona-xtrabackup-24
/usr/bin/innobackupex
/usr/bin/xbcloud
/usr/bin/xbcloud_osenv
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup
/usr/share/doc/percona-xtrabackup-24-2.4.7
/usr/share/doc/percona-xtrabackup-24-2.4.7/COPYING
/usr/share/man/man1/innobackupex.1.gz
/usr/share/man/man1/xbcrypt.1.gz
/usr/share/man/man1/xbstream.1.gz
/usr/share/man/man1/xtrabackup.1.gz
[root@host50 ~]#
[root@host50 ~]# innobackupex --help //查看简单帮助
[root@host50 ~]#
[root@host50 ~]# man innobackupex //查看详细帮助
/usr/share/man/man1/xtrabackup.1.gz
步骤二:备份所有数据到/allbak目录下1)备份所有数据
[root@host50 ~]# innobackupex --user root --password 123456 /allbak --no-timestamp //执行备份命令
170425 11:05:44 innobackupex: Starting the backup operation
IMPORTANT: Please check that the backup run completes successfully.
At the end of a successful backup run innobackupex
prints “completed OK!”.
Unrecognized character \x01; marked by <-- HERE after <-- HERE near column 1 at - line 1374.
170425 11:05:45 Connecting to MySQL server host: localhost, user: root, password: set, port: not set, socket: not set
Using server version 5.7.17
innobackupex version 2.4.6 based on MySQL server 5.7.13 Linux (x86_64) (revision id: 8ec05b7)
xtrabackup: uses posix_fadvise().
xtrabackup: cd to /var/lib/mysql
xtrabackup: open files limit requested 0, set to 1024
xtrabackup: using the following InnoDB configuration:
xtrabackup: innodb_data_home_dir = .
xtrabackup: innodb_data_file_path = ibdata1:12M:autoextend
xtrabackup: innodb_log_group_home_dir = ./
xtrabackup: innodb_log_files_in_group = 2
xtrabackup: innodb_log_file_size = 50331648
InnoDB: Number of pools: 1
170425 11:05:45 >> log scanned up to (2543893)
xtrabackup: Generating a list of tablespaces
InnoDB: Allocated tablespace ID 2 for mysql/plugin, old maximum was 0
170425 11:05:45 [01] Copying ./ibdata1 to /backup/ibdata1
170425 11:05:45 [01] …done
170425 11:05:46 [01] Copying ./mysql/plugin.ibd to /backup/mysql/plugin.ibd
170425 11:05:46 [01] …done
170425 11:05:46 [01] Copying ./mysql/servers.ibd to /backup/mysql/servers.ibd
170425 11:05:46 [01] …done
170425 11:05:46 [01] Copying ./mysql/help_topic.ibd to /backup/mysql/help_topic.ibd
170425 11:05:46 [01] …done
170425 11:05:46 >> log scanned up to (2543893)
… …
170425 11:06:00 [01] Copying ./sys/x@0024waits_global_by_latency.frm to /backup/sys/x@0024waits_global_by_latency.frm
170425 11:06:00 [01] …done
170425 11:06:00 [01] Copying ./sys/session_ssl_status.frm to /backup/sys/session_ssl_status.frm
170425 11:06:00 [01] …done
170425 11:06:00 [01] Copying ./db1/db.opt to /backup/db1/db.opt
170425 11:06:00 [01] …done
170425 11:06:00 [01] Copying ./db1/tb1.frm to /backup/db1/tb1.frm
170425 11:06:00 [01] …done
170425 11:06:00 Finished backing up non-InnoDB tables and files
170425 11:06:00 Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS…
xtrabackup: The latest check point (for incremental): ‘2543884’
xtrabackup: Stopping log copying thread.
.170425 11:06:00 >> log scanned up to (2543893)
170425 11:06:00 Executing UNLOCK TABLES
170425 11:06:00 All tables unlocked
170425 11:06:00 [00] Copying ib_buffer_pool to /backup/ib_buffer_pool
170425 11:06:00 [00] …done
170425 11:06:00 Backup created in directory ‘/backup/’
170425 11:06:00 [00] Writing backup-my.cnf
170425 11:06:00 [00] …done
170425 11:06:00 [00] Writing xtrabackup_info
170425 11:06:00 [00] …done
xtrabackup: Transaction log of lsn (2543884) to (2543893) was copied.
170425 11:06:01 completed OK
2) 确认备份好的文件数据:[root@host50 ~]# ls /allbak
backup-my.cnf ib_buffer_pool mysql sys xtrabackup_info
db1 ibdata1 performance_schema xtrabackup_checkpoints xtrabackup_logfile
3)把备份文件传递给 目标服务器51[root@host50 ~]#
[root@host50 ~]# scp -r /allbak root@192.168.4.51:/root/
[root@host50 ~]#
步骤三:在51主机,使用备份文件恢复数据1)安装软件包,提供恢复命令
[root@host51 ~]# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
[root@host51 ~]# yum -y install percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
2)恢复数据[root@host51 ~]# systemctl stop mysqld
[root@host51 ~]# ls /var/lib/mysql
[root@host51 ~]# rm -rf /var/lib/mysql/* //清空数据
[root@host51 ~]#innobackupex–apply-log --redo-only /root/allbak //恢复数据
170425 11:42:19 innobackupex: Starting the apply-log operation
IMPORTANT: Please check that the apply-log run completes successfully.
At the end of a successful apply-log run innobackupex
prints “completed OK!”.
innobackupex version 2.4.6 based on MySQL server 5.7.13 Linux (x86_64) (revision id: 8ec05b7)
xtrabackup: cd to /backup/
xtrabackup: This target seems to be already prepared.
InnoDB: Number of pools: 1
xtrabackup: notice: xtrabackup_logfile was already used to ‘–prepare’.
xtrabackup: using the following InnoDB configuration for recovery:
xtrabackup: innodb_data_home_dir = .
xtrabackup: innodb_data_file_path = ibdata1:12M:autoextend
xtrabackup: innodb_log_group_home_dir = .
xtrabackup: innodb_log_files_in_group = 2
xtrabackup: innodb_log_file_size = 50331648
xtrabackup: using the following InnoDB configuration for recovery:
xtrabackup: innodb_data_home_dir = .
xtrabackup: innodb_data_file_path = ibdata1:12M:autoextend
xtrabackup: innodb_log_group_home_dir = .
xtrabackup: innodb_log_files_in_group = 2
xtrabackup: innodb_log_file_size = 50331648
xtrabackup: Starting InnoDB instance for recovery.
xtrabackup: Using 104857600 bytes for buffer pool (set by --use-memory parameter)
InnoDB: PUNCH HOLE support available
InnoDB: Mutexes and rw_locks use GCC atomic builtins
InnoDB: Uses event mutexes
InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
InnoDB: Compressed tables use zlib 1.2.7
InnoDB: Number of pools: 1
InnoDB: Not using CPU crc32 instructions
InnoDB: Initializing buffer pool, total size = 100M, instances = 1, chunk size = 100M
InnoDB: Completed initialization of buffer pool
InnoDB: page_cleaner coordinator priority: -20
InnoDB: Highest supported file format is Barracuda.
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
InnoDB: Starting shutdown…
InnoDB: Shutdown completed; log sequence number 2544177
InnoDB: Number of pools: 1
170425 11:42:20 completed OK!
[root@host51 ~]#
[root@host51 ~]# innobackupex --copy-back /root/allbak //拷贝数据
170425 11:42:55 innobackupex: Starting the apply-log operation
IMPORTANT: Please check that the apply-log run completes successfully.
At the end of a successful apply-log run innobackupex
prints “completed OK!”.
innobackupex version 2.4.6 based on MySQL server 5.7.13 Linux (x86_64) (revision id: 8ec05b7)
incremental backup from 2543884 is enabled.
xtrabackup: cd to /backup/
xtrabackup: This target seems to be already prepared with --apply-log-only.
InnoDB: Number of pools: 1
xtrabackup: xtrabackup_logfile detected: size=8388608, start_lsn=(2549924)
xtrabackup: using the following InnoDB configuration for recovery:
xtrabackup: innodb_data_home_dir = .
xtrabackup: innodb_data_file_path = ibdata1:12M:autoextend
xtrabackup: innodb_log_group_home_dir = /incr01/
xtrabackup: innodb_log_files_in_group = 1
xtrabackup: innodb_log_file_size = 8388608
xtrabackup: Generating a list of tablespaces
InnoDB: Allocated tablespace ID 2 for mysql/plugin, old maximum was 0
xtrabackup: page size for /incr01//ibdata1.delta is 16384 bytes
Applying /incr01//ibdata1.delta to ./ibdata1…
… …
170425 11:43:09 [01] Copying /incr01/performance_schema/global_status.frm to ./performance_schema/global_status.frm
170425 11:43:09 [01] …done
170425 11:43:09 [01] Copying /incr01/performance_schema/session_status.frm to ./performance_schema/session_status.frm
170425 11:43:09 [01] …done
170425 11:43:09 [00] Copying /incr01//xtrabackup_info to ./xtrabackup_info
170425 11:43:09 [00] …done
170425 11:43:10 completed OK!
[root@host50 ~]# chown -R mysql:mysql /var/lib/mysql //修改所有者与组
步骤四:验证数据恢复1)启动服务
[root@host51 ~]# systemctl start mysqld
[root@host51 ~]# mysql -uroot -p123456
mysql> show databases;
mysql> select * from db3.user2;
mysql>select count(*) from db3.user;
mysql>
2)查看数据[root@host51 ~]# mysql -uroot -p123456
mysql> show databases;
mysql> select * from db3.user2;
mysql> select count(*) from db3.user;
2 案例2:恢复单张表
2.1 问题
执行删除数据命令
使用备份目录/allbak 恢复表数据
验证数据恢复
2.2 步骤
实现此案例需要按照如下步骤进行。步骤一:安装XtraBackup软件包
1)执行删除数据命令
[root@host50 ~]# mysql –uroot -p123456
mysql> delete from db3.user2; //误删除数据操作
mysql>
2) 删除表空间mysql> alter table db3.user2 discard tablespace;
3) 导出表信息[root@host50 ~ ]# innobackupex --apply-log --export /allbak
4) 拷贝表信息文件到数据库目录下[root@host50 ~]# cp /allbak/db3/user2.{cfg,exp,ibd} /var/lib/mysql/db3/
5) 修改表信息文件的所有者及组用户为mysql[root@host50 ~]# chown mysql:mysql /var/lib/mysql/db3/user2.*
6) 导入表空间mysql> alter table db3.user2 import tablespace;
7) 删除数据库目录下的表信息文件[root@host50 ~]# rm -rf /var/lib/mysql/db3/user2.cfg
[root@host50 ~]# rm -rf /var/lib/mysql/db3/user2.exp
8) 查看表记录mysql> select * from db3.user2;
3 案例3:增量备份与恢复
3.1 问题
具体要求如下:
备份所有数据
备份新产生的数据
删除数据
使用备份文件恢复数据
3.2 步骤
实现此案例需要按照如下步骤进行。步骤一:备份所有数据,在50主机执行
1)完全备份 (备份所有数据到/fullbak目录)
[root@host50 ~]# innobackupex --user root --password 123456 /fullbak --no-timestamp
步骤二:增量备份 (每次执行备份,值备份新数据,在50主机执行)- 插入新记录,并做增量备份
mysql> insert into db3.user2 values(5,“jack”);// 插入新记录,多写几条
[root@host50 ~]# innobackupex --user root --password 123456 --incremental /new1dir --incremental-basedir=/fullbak --no-timestamp //第1次增量备份 ,数据存储目录/new1dir
2) 插入新记录,并做增量备份mysql> insert into db3.user2 values(6,“jack”);// 插入新记录,多写几条
[root@host50 ~]# innobackupex --user root --password 123456 --incremental /new2dir --incremental-basedir=/newdir1 --no-timestamp //第2次增量备份 ,数据存储目录/new2dir
- 把备份文件拷贝给目标主机51
[root@host50 ~]# scp -r /fullbak root@192.168.4.51:/root/
[root@host50 ~]# scp -r /new1dir/ root@192.168.4.51:/root/
[root@host50 ~]# scp -r /new2dir/ root@192.168.4.51:/root/
步骤三:在主机51 恢复数据- 停止服务,并清空数据
[root@host51 ~]# systemctl stop mysqld
[root@host51 ~]# rm -rf /var/lib/mysql/*
2) 合并日志[root@host51 ~ ]# innobackupex --apply-log --redo-only /root/fullbak //准备恢复数据
[root@host51 ~ ]# innobackupex --apply-log --redo-only /root/fullbak --incremental-dir=/root/new1dir //合并日志
[root@host51 ~ ]# innobackupex --apply-log --redo-only /root/fullbak --incremental-dir=/root/new2dir //合并日志
[root@host51 ~ ]# rm -rf /root/new2dir //恢复后,可以删除了
[root@host51 ~ ]# rm -rf /root/new1dir //恢复后,可以删除了
3) 恢复数据[root@host51 ~ ]# innobackupex --copy-back /root/fullbak //拷贝文件到数据库目录下
[root@host51 ~ ]# chown -R mysql:mysql /var/lib/mysql //修改所有者与组用户
[root@host51 ~ ]# systemctl start mysqld //启动服务
[root@host51 ~ ]# mysql -uroot -p123456 //登录
mysql> select count(*) from db3.user; //查看数据 -
理论+实验:数据库的备份与恢复——完全备份与恢复、增量备份与恢复——超详细!!!
2020-09-13 16:37:55数据库备份与恢复一、数据库备份的分类1.1 数据备份的重要性1.2 数据库备份的分类-11.3 数据库备份的分类-21.4 常见的备份方法二、 MySQL完全备份与恢复2.1 MySQL完全备份-12.2 MySQL完全备份-22.3 数据库完全备份...数据库备份与恢复
一、数据库备份的分类
1.1 数据备份的重要性
■ 再生产环境中,数据的安全性至关重要
■ 任何数据的丢失都可能产生严重的后果
■ 造成数据丢失的原因- 程序错误
- 人为操作错误
- 运算错误
- 磁盘故障
- 灾难(如火灾、地震)和盗窃
1.2 数据库备份的分类-1
■ 从物理与逻辑的角度,备份可分为
- 物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等)的备份
◆物理备份方法- 冷备份(脱机备份) :是在关闭数据库的时候进行的
- 热备份(联机备份) :数据库处于运行状态,依赖于数据库的日志文件
- 温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作
- 逻辑备份:对数据库逻辑组件(如: 表等数据库对象)的
备份
1.3 数据库备份的分类-2
■ 从数据库的备份策略角度,备份可分为
- 完全备份:每次对数据进行完整的备份
- 差异备份:备份那些自从上次完全备份之后被修改过的文件
- 增量备份:只有那些在上次完全备份或者增量备份后被修改的文件才会被备份
1.4 常见的备份方法
■ 物理冷备
- 备份时数据库处于关闭状态,直接打包数据库文件
- 备份速度快,恢复时也是最简单的
■ 专用备份工具mydump或mysqlhotcopy
- mysqldump常用的逻辑备份工具
- mysqlhotcopy仅拥有备份MyISAM和ARCHIVE表
■ 启用二进制日志进行增量备份
- 进行增量备份,需要刷新_二进制日志
■ 第三方工具备份
- 免费的MySQl热备份软件Percona XtraBackup
二、 MySQL完全备份与恢复
2.1 MySQL完全备份-1
■ 完全备份是对整个数据库的备份、数据库结构和文件结构的备份
■ 完全备份保存的是备份完成时刻的数据库
■ 完全备份是增量备份的基础2.2 MySQL完全备份-2
■ 优点
- 安全性高
- 备份与恢复操作简单方便
■ 缺点
- 数据存在大量的重复
- 占用大量的备份空间,空间利用率低
- 备份与恢复时间长
2.3 数据库完全备份分类
■ 物理冷备份与恢复
- 关闭MySQL数据库
- 使用tar命令直接打包数据库文件夹
- 直接替换现有MySQL目录即可
■ mysqldump备份与恢复
- MySQL自带的备份工具,可方便实现对MySQL的备份
- 可以将指定的库、表导出为SQL脚本
- 使用命令mysql导入备份的数据
2.4 MySQL物理冷备份及恢复
■ 物理冷备份
[root@localhost ~]# systemctl stop mysqld [root@localhost ~]# mkdir /backup [root@localhost ~]# tar zvcf /backup/mysql ll-$(date + %F).tar.gz /usrlocal/mysql/dat
■ 恢复数据库
[root@localhost ~]# mkdir bak [root@localhost ~]# mv /usr/local/mysqI/data/ /bak/ [root@localhost ~]# mkdir restore [root@localhost ~]# tar zxf /backup/mysql all-2020-01-02.tar.gz -C restore/ [root@localhost ~]# mv restore/usr/local/mysql/data/ /usr/local/mysq/ [root@localhost ~]# systemctl start mysql
2.5 mysqldump备份数据库-1
■ mysqldump命令对单个库进行完全备份
musqldump -u 用户名 -p【密码】【选项】【数据库名】 > 备份路径/备份文件名
■ 单裤备份的示例
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | shuai | | sys | +--------------------+ 5 rows in set (0.00 sec) [root@localhost ~]# mysqldump -u root -p shuai > /opt/shuai.sql #shuai.sql就是导出的备份文件 [root@localhost opt]# ls mysql-5.7.20 mysql-boost-5.7.20.tar.gz shuai.sql mysql_all_2020-08-19.tar.gz rh
2.6 mysqldump备份数据库-2
■ mysqldump命令对多个库进行完全备份
mysqldump -u 用户名 -p 【密码】【选项】 --databases 库名1 【库名2】.. > /备份路径/备份文件名
■ 多库备份的示例
#显示所有数据库 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mei | | mysql | | performance_schema | | shuai | | sys | +--------------------+ 6 rows in set (0.01 sec) #进行多库备份 [root@localhost opt]# mysqldump -uroot -pabc123 --databases shuai mei > /opt/shuai.mei mysqldump: [Warning] Using a password on the command line interface can be insecure.
■ 对所有库进行完全备份
musqldump -u 用户名 -p 【密码】【选项】 -add-databases > /备份路径/备份文件名
■ 所有库备份的示例
[root@localhost opt]# mysqldump -uroot -pabc123 --all-databases > /opt/all.sql mysqldump: [Warning] Using a password on the command line interface can be insecure.
2.7 恢复表的操作
■ 恢复表时同样可以使用source或者mysql命令
■ source恢复表的操作与恢复库的操作相同
■ 当备份文件中包含表的备份,而不包括创建库的语句时,必须指定库名,且目标库必须存在mysql -u 用户名 -p [密码] <表备份脚本的路径 mysql -u root -p mysql </backup/mysql-user.sql
■ 在生产环境中,可以使用shell脚本自动实现定时备份
三、企业备份案例-完全备份
3.1 物理冷备份与恢复
备份数据库: [root@localhost ~]# systemctl stop mysqld ###关闭数据库#### [root@localhost ~]# mkdir /backup ###在根下新建个backup目录 [root@localhost ~]# tar zcf /backup/mysql_all-$(date +%F).tar.gz /usr/local/mysql/data/ #####/usr/local/mysql/data备份压缩 [root@localhost ~]# cd /backup/ ###进入/backup/ [root@localhost backup]# ll ##查看备份 总用量 1328 -rw-r--r-- 1 root root 1359664 8月 12 22:39 mysql_all-2018-08-12.tar.gz
◆模拟故障 [root@localhost backup]# mkdir /bak ####在根下新建bak目录 [root@localhost backup]# mv /usr/local/mysql/data/ /bak/ ####将目录data数据移动到bak 里面去 [root@localhost backup]# cd /usr/local/mysql/ #####仅mysql目录查看data [root@localhost mysql]# ll ####查看后data目录被移走 ,模拟故障成功 总用量 64 drwxr-xr-x 2 mysql mysql 4096 8月 4 19:19 bin -rw-r--r-- 1 mysql mysql 17987 9月 13 2017 COPYING -rw-r--r-- 1 mysql mysql 17987 9月 13 2017 COPYING-test drwxr-xr-x 2 mysql mysql 55 8月 4 19:19 docs drwxr-xr-x 3 mysql mysql 4096 8月 4 19:19 include drwxr-xr-x 4 mysql mysql 191 8月 4 19:19 lib drwxr-xr-x 4 mysql mysql 30 8月 4 19:19 man drwxr-xr-x 10 mysql mysql 4096 8月 4 19:20 mysql-test -rw-r--r-- 1 mysql mysql 2478 9月 13 2017 README -rw-r--r-- 1 mysql mysql 2478 9月 13 2017 README-test drwxr-xr-x 28 mysql mysql 4096 8月 4 19:20 share drwxr-xr-x 2 mysql mysql 90 8月 4 19:20 support-files drwxr-xr-x 3 mysql mysql 17 8月 4 19:19 usr
◆数据库恢复 [root@localhost mysql]# mkdir /restore ####根目录新建restore 目录 [root@localhost mysql]# tar xzvf /backup/mysql_all-2018-08-12.tar.gz -C /restore/ ####将备份数据库解压到 /restore目录下 不要无脑刷,时间节点不一样 usr/local/mysql/data/ usr/local/mysql/data/ibdata1 usr/local/mysql/data/ib_logfile1 usr/local/mysql/data/ib_logfile0 。。。。。。省略。。。。。。。 [root@localhost mysql]# mv /restore/usr/local/mysql/data/ /usr/local/mysql/ ####将备份数据移动到到/usr/local/mysql中 [root@localhost mysql]# systemctl start mysqld ####启动mysql数据库 [root@localhost mysql]# systemctl status mysqld ####查看mysql数据库启动状态 ,日志文件显示正常。 ● mysqld.service - MySQL Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: active (running) since 日 2018-08-12 22:48:20 CST; 7s ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Process: 2036 ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/usr/local/mysql/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS) Process: 2016 ExecStartPre=/usr/local/mysql/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS) Main PID: 2039 (mysqld) CGroup: /system.slice/mysqld.service └─2039 /usr/local/mysql/bin/mysqld --daemonize --pid-file=/usr/local/mys... 8月 12 22:48:20 localhost.localdomain mysqld[2036]: 2018-08-12T14:48:20.795875Z 0.... 8月 12 22:48:20 localhost.localdomain mysqld[2036]: 2018-08-12T14:48:20.795889Z 0...; 8月 12 22:48:20 localhost.localdomain mysqld[2036]: 2018-08-12T14:48:20.795911Z 0.... 8月 12 22:48:20 localhost.localdomain mysqld[2036]: 2018-08-12T14:48:20.812257Z 0...s 8月 12 22:48:20 localhost.localdomain mysqld[2036]: 2018-08-12T14:48:20.812564Z 0.... 8月 12 22:48:20 localhost.localdomain mysqld[2036]: Version: '5.7.20' socket: '/...n 8月 12 22:48:20 localhost.localdomain mysqld[2036]: 2018-08-12T14:48:20.812584Z 0.... 8月 12 22:48:20 localhost.localdomain mysqld[2036]: 2018-08-12T14:48:20.812591Z 0...s 8月 12 22:48:20 localhost.localdomain mysqld[2036]: 2018-08-12T14:48:20.826263Z 0...s 8月 12 22:48:20 localhost.localdomain systemd[1]: Started MySQL Server. Hint: Some lines were ellipsized, use -l to show in full.
3.2 mysqldump备份与恢复
#######创建环境##### mysql> create database auth; ####创建auth 这个数据库 mysql> use auth; ####进入auth 这个数据库 mysql> create table users (user_name CHAR(16) NOT NULL, user_passwd CHAR(48) DEFAULT '', PRIMARY KEY (user_name)); ###创建users表 Database changed mysql> insert into users(user_name,user_passwd) values('zhangsan', password('123456')); ###向users表插入‘zhangsan’信息 Query OK, 1 row affected, 1 warning (0.01 sec) mysql> insert into users values('lisi', password('123456')); ###向users表插入‘lisi’信息 Query OK, 1 row affected, 1 warning (0.01 sec)
######列子#### [root@localhost /]# mysqldump -u root -p mysql user >mysql-user.sql ###备份数据库mysql中的user表 ,文件保存在当前操作目录下面 Enter password: ###输入密码abc123 ######列子##### [root@localhost /]# mysqldump -u root -p --databases auth >auth.sql ####备份auth数据库 文件保存在当前操作目录下面 Enter password: ####输入密码abc123 #####列子###### 查看备份文件 [root@localhost /]# grep -v "^--" auth.sql | grep -v "^/" | grep -v "^$" CREATE DATABASE /*!32312 IF NOT EXISTS*/ `auth` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `auth`; DROP TABLE IF EXISTS `users`; CREATE TABLE `users` ( `user_name` char(16) NOT NULL, `user_passwd` char(48) DEFAULT '', PRIMARY KEY (`user_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; LOCK TABLES `users` WRITE; INSERT INTO `users` VALUES ('zhangsan','*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9'); UNLOCK TABLES;
#####恢复操作##### mysql [选项] [库名] [表名] < /备份路径/备份文件名 #####列子###恢复表 [root@localhost /]# mysql -u root -p ###进入数据库### Enter password: ###输入密码#### mysql> show databases; ###查看数据库#### +--------------------+ | Database | +--------------------+ | information_schema | | auth | | myadm | | mysql | | performance_schema | | sys | mysql> create database text ; ####新建数据库text ,等下导表用### Query OK, 1 row affected (0.00 sec) mysql> exit ####退出##### [root@localhost opt]# mysql -u root -p text < mysql-user.sql Enter password: [root@localhost /]# mysql -u root -p -e 'show tables from text' #######验证输出结果#### Enter password: ######输入密码 +----------------+ | Tables_in_text | +----------------+ | user | ####导进去的表 +----------------+
######列子数据库恢复##### [root@localhost /]# mysql -u root -p -e 'drop database auth' ######模拟故障删除auth数据库 Enter password: [root@localhost /]# mysql -u root -p -e 'show databases' ######查看databases所有数据库有没有auth,发现没有了 Enter password: +--------------------+ | Database | +--------------------+ | information_schema | | myadm | | mysql | | performance_schema | | sys | | text | [root@localhost /]# mysql -u root -p < ./auth.sql ####导入数据库auth Enter password: ####输入密码 [root@localhost /]# mysql -u root -p -e 'show databases' ######查看databases所有数据库有没有auth,发现有了 Enter password: +--------------------+ | Database | +--------------------+ | information_schema | | auth | #### 导进去的auth数据库 | bdqn | | myadm | | mysql | | performance_schema | | sys | | text | +--------------------+
四、MySQL增量备份与恢复
4.1 MySQL增量备份-1
■ 使用mysqldump命令进行完全备份存在的问题
- 备份数据中有重复数据
- 备份时间与恢复时间过长
■ 是自上一次备份后增加/变化的文件或者内容
■ 特点- 没有重复数据,备份量不大,时间短
- 恢复需要上次完全备份及完全备份之后所有的增量备份才能恢复,而且要对所有增量备份进行逐个反推恢复
4.2 MySQL增量备份-2
■ MySQL没有提供直接的增量备份方法
■ 可以通过 MySQL提供的二进制日志间接实现增量备份
■ MySQL二进制日志对备份的意义- 二进制日志保存了所有更新或者可能更新数据库的操作
- 二进制日志在启动MySQL服务器后开始记录,并在文件达到
max_binlog_size所设置的大小或者接收到flush logs命令后重新
创建新的日志文件 - 只需定时执行flush logs方法重新创建新的日志,生成二进制文
件序列,并及时把这些日志保存到安全的地方就完成了一个时间
段的增量备份
4.3 MySQL数据库增量恢复-1
■ 一般恢复
- 将所有备份的二进制日志内容全部恢复
■ 基于位置恢复
- 数据库在某一时间点可能既有错误的操作也有正确的操作
- 可以基于精准的位置跳过错误的操作
■ 基于时间点恢复
- 跳过某个发生错误的时间点实现数据恢复
4.4 MySQL数据库增量恢复-2
■ 增量恢复的方法
- 一般恢复
mysqlbinlog [--no-defaults] 增量备份文件 | mysql -u 用户名 -p
- 基于位置的恢复
恢复数据到指定位置
mysqlbinlog --stop-position=’操作 id’ 二进制日志 |mysql -u 用户名 -p 密码
从指定的位置开始恢复数据
mysqlbinlog --start-position=’操作 id’ 二进制日志 |mysql -u 用户名 -p 密码
4.5 MySQL数据库增量恢复-3
■ 增量恢复的方法
- 基于时间点的恢复
从日志开头截止到某个时间点的恢复
mysqlbinlog [--no-defaults] --stop-datetime=’年-月-日 小时:分钟:秒’ 二进制日志 | mysql -u 用户名 -p 密码
从某个时间点到日志结尾的恢复
mysqlbinlog [--no-defaults] --start-datetime=’年-月-日 小时:分钟:秒’ 二进制日志 | mysql -u 用户名 -p 密码
从某个时间点到某个时间点的恢复
mysqlbinlog [--no-defaults] --start-datetime=’年-月-日 小时:分钟:秒’ --stop-datetime=’年-月-日小时:分钟:秒’ 二进制日志 | mysql -u 用户名 -p 密码
五、企业备份案例-增量备份
1、一般恢复(丢什么数据,找什么数据) [root@localhost opt]# mysql -u root -p Enter password: mysql> create database client; Query OK, 1 row affected (0.01 sec) mysql> use client; mysql> create table user_info(身份证 char(20) not null,姓名 char(20) not null,姓别 char(4),用户ID号 char(10) not null,资费 int(10)); mysql> insert into user_info values('000006','张三','男','016','10'); mysql> insert into user_info values('000007','李四','女','017','91'); mysql> insert into user_info values('000008','王五','女','018','23'); mysql> select * from user_info; mysql> show master logs; ####查看当前数据库binlog文件 +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 1492 | +------------------+-----------+ 1 row in set (0.00 sec)
2、进行一次完全备份 mysql> flush tables with read lock; #####备份前需要将数据库加读锁,防止数据在备份时写入。 Query OK, 0 rows affected (0.01 sec) mysql> exit Bye [root@localhost ~]# mkdir /mysql_bak ###创建/mysql_bak 目录 [root@localhost opt]# mysqldump -u root -p client user_info >/mysql_bak/client_userinfo-$(date +%F).sql ####这边括号中%F 的F必须是大写的 Enter password: [root@localhost ~]# ll /mysql_bak/ 总用量 4 -rw-r--r-- 1 root root 2055 8月 15 05:55 client_userinfo-2018-08-15.sql [root@localhost mysql_bak]# mysqladmin -u root -p flush-logs [root@localhost ~]# ll /usr/local/mysql/data/ 总用量 122928 -rw-r----- 1 mysql mysql 56 8月 9 16:16 auto.cnf drwxr-x--- 2 mysql mysql 62 8月 15 06:04 client -rw-r----- 1 mysql mysql 308 8月 15 06:03 ib_buffer_pool -rw-r----- 1 mysql mysql 12582912 8月 15 06:04 ibdata1 -rw-r----- 1 mysql mysql 50331648 8月 15 06:04 ib_logfile0 -rw-r----- 1 mysql mysql 50331648 8月 9 16:16 ib_logfile1 -rw-r----- 1 mysql mysql 12582912 8月 15 06:05 ibtmp1 drwxr-x--- 2 mysql mysql 4096 8月 9 16:16 mysql -rw-r----- 1 mysql mysql 1539 8月 15 06:05 mysql-bin.000001 -rw-r----- 1 mysql mysql 154 8月 15 06:05 mysql-bin.000002 -rw-r----- 1 mysql mysql 78 8月 15 06:05 mysql-bin.index drwxr-x--- 2 mysql mysql 8192 8月 9 16:16 performance_schema drwxr-x--- 2 mysql mysql 8192 8月 9 16:16 sys
3、继续录入新的内容并进行增量备份 [root@localhost mysql_bak]# mysql -u root -p Enter password: mysql> unlock tables; #######解除表锁。 Query OK, 0 rows affected (0.00 sec) mysql> use client; mysql> insert into user_info values('000009','赵六','男','019','37'); mysql> insert into user_info values('000010','孙七','男','020','36'); mysql> select * from user_info; +-----------+--------+--------+-------------+--------+ | 身份证 | 姓名 | 姓别 | 用户ID号 | 资费 | +-----------+--------+--------+-------------+--------+ | 000006 | 张三 | 男 | 016 | 10 | | 000007 | 李四 | 女 | 017 | 91 | | 000008 | 王五 | 女 | 018 | 23 | | 000009 | 赵六 | 男 | 019 | 37 | | 000010 | 孙七 | 男 | 020 | 36 | +-----------+--------+--------+-------------+--------+ 5 rows in set (0.00 sec) mysql> exit Bye [root@localhost mysql_bak]# mysqladmin -u root -p flush-logs Enter password: [root@localhost ~]# ll /usr/local/mysql/data 总用量 122932 -rw-r----- 1 mysql mysql 56 8月 9 16:16 auto.cnf drwxr-x--- 2 mysql mysql 62 8月 15 06:04 client -rw-r----- 1 mysql mysql 308 8月 15 06:03 ib_buffer_pool -rw-r----- 1 mysql mysql 12582912 8月 15 06:07 ibdata1 -rw-r----- 1 mysql mysql 50331648 8月 15 06:07 ib_logfile0 -rw-r----- 1 mysql mysql 50331648 8月 9 16:16 ib_logfile1 -rw-r----- 1 mysql mysql 12582912 8月 15 06:05 ibtmp1 drwxr-x--- 2 mysql mysql 4096 8月 9 16:16 mysql -rw-r----- 1 mysql mysql 1539 8月 15 06:05 mysql-bin.000001 -rw-r----- 1 mysql mysql 797 8月 15 06:07 mysql-bin.000002 -rw-r----- 1 mysql mysql 154 8月 15 06:07 mysql-bin.000003 -rw-r----- 1 mysql mysql 117 8月 15 06:07 mysql-bin.index drwxr-x--- 2 mysql mysql 8192 8月 9 16:16 performance_schema drwxr-x--- 2 mysql mysql 8192 8月 9 16:16 sys [root@localhost ~]# cp /usr/local/mysql/data/mysql-bin.000002 /mysql_bak/
4、模拟误操作删除 user_info表 [root@localhost mysql_bak]# mysql -u root -p -e 'drop table client.user_info' Enter password: [root@localhost mysql_bak]# mysql -u root -p -e 'select * from client.user_info' Enter password: ERROR 1146 (42S02) at line 1: Table 'client.user_info' doesn't exist
5、恢复操作 [root@localhost mysql_bak]# mysql -u root -p client < /mysql_bak/client_userinfo-2018-08-14.sql Enter password: [root@localhost mysql_bak]# mysql -u root -p -e'select * from client.user_info' Enter password: +-----------+--------+--------+-------------+--------+ | 身份证 | 姓名 | 姓别 | 用户ID号 | 资费 | +-----------+--------+--------+-------------+--------+ | 000006 | 张三 | 男 | 016 | 10 | | 000007 | 李四 | 女 | 017 | 91 | | 000008 | 王五 | 女 | 018 | 23 | +-----------+--------+--------+-------------+--------+ [root@localhost ~]# mysqlbinlog --no-defaults /mysql_bak/mysql-bin.000002 |mysql -u root -p Enter password: [root@localhost ~]# mysql -u root -p -e'select * from client.user_info' Enter password: +-----------+--------+--------+-------------+--------+ | 身份证 | 姓名 | 姓别 | 用户ID号 | 资费 | +-----------+--------+--------+-------------+--------+ | 000006 | 张三 | 男 | 016 | 10 | | 000007 | 李四 | 女 | 017 | 91 | | 000008 | 王五 | 女 | 018 | 23 | | 000009 | 赵六 | 男 | 019 | 37 | | 000010 | 孙七 | 男 | 020 | 36 | +-----------+--------+--------+-------------+--------+
######基于位置恢复##### [root@localhost mysql_bak]# mysql -uroot -p -e 'drop table client.user_info' ### 删除表user_info Enter password: [root@localhost mysql_bak]# mysql -uroot -p -e 'select * from client.user_info' Enter password: ERROR 1146 (42S02) at line 1: Table 'client.user_info' doesn't exist [root@localhost mysql_bak]# mysql -u root -p client < /mysql_bak/client_userinfo-2018-08-14.sql Enter password: [root@localhost ~]# mysql -u root -p -e'select * from client.user_info' Enter password: +-----------+--------+--------+-------------+--------+ | 身份证 | 姓名 | 姓别 | 用户ID号 | 资费 | +-----------+--------+--------+-------------+--------+ | 000006 | 张三 | 男 | 016 | 10 | | 000007 | 李四 | 女 | 017 | 91 | | 000008 | 王五 | 女 | 018 | 23 | +-----------+--------+--------+-------------+--------+ [root@localhost ~]# mysqlbinlog --no-defaults --base64-output=decode-rows -v /mysql_bak/mysql-bin.000002 ####--base64-output=decode-rows 64解码 ### -v 换行显示 /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; # at 4 #180815 6:05:58 server id 1 end_log_pos 123 CRC32 0xba2781ac Start: binlog v 4, server v 5.7.20-log created 180815 6:05:58 # at 123 #180815 6:05:58 server id 1 end_log_pos 154 CRC32 0xa0182e52 Previous-GTIDs # [empty] # at 154 #180815 6:07:34 server id 1 end_log_pos 219 CRC32 0x3d67048b Anonymous_GTID last_committed=0 sequence_number=1 rbr_only=yes /*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/; SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/; # at 219 #180815 6:07:34 server id 1 end_log_pos 293 CRC32 0xae858d22 Query thread_id=7 exec_time=0 error_code=0 SET TIMESTAMP=1534284454/*!*/; SET @@session.pseudo_thread_id=7/*!*/; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; SET @@session.sql_mode=1437073414/*!*/; SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; /*!\C utf8 *//*!*/; SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/; SET @@session.lc_time_names=0/*!*/; SET @@session.collation_database=DEFAULT/*!*/; BEGIN /*!*/; # at 293 #180815 6:07:34 server id 1 end_log_pos 359 CRC32 0x3ccdc62e Table_map: `client`.`user_info` mapped to number 221 # at 359 #180815 6:07:34 server id 1 end_log_pos 421 CRC32 0x55f72453 Write_rows: table id 221 flags: STMT_END_F ### INSERT INTO `client`.`user_info` ### SET ### @1='000009' ### @2='赵六' ### @3='男' ### @4='019' ### @5=37 # at 421 #180815 6:07:34 server id 1 end_log_pos 452 CRC32 0x45fd2af6 Xid = 50 COMMIT/*!*/; # at 452 #180815 6:07:39 server id 1 end_log_pos 517 CRC32 0xa553503b Anonymous_GTID last_committed=1 sequence_number=2 rbr_only=yes /*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/; SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/; # at 517 #180815 6:07:39 server id 1 end_log_pos 591 CRC32 0x02ad5ee9 Query thread_id=7 exec_time=0 error_code=0 SET TIMESTAMP=1534284459/*!*/; BEGIN /*!*/; # at 591 #180815 6:07:39 server id 1 end_log_pos 657 CRC32 0x3f478909 Table_map: `client`.`user_info` mapped to number 221 # at 657 #180815 6:07:39 server id 1 end_log_pos 719 CRC32 0xb478e1c5 Write_rows: table id 221 flags: STMT_END_F ### INSERT INTO `client`.`user_info` ### SET ### @1='000010' ### @2='孙七' ### @3='男' ### @4='020' ### @5=36 # at 719 #180815 6:07:39 server id 1 end_log_pos 750 CRC32 0xe681426b Xid = 51 COMMIT/*!*/; # at 750 #180815 6:07:59 server id 1 end_log_pos 797 CRC32 0xbc922301 Rotate to mysql-bin.000003 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*/; ####### [root@localhost ~]# mysqlbinlog --no-defaults --stop-position='517' /mysql_bak/mysql-bin.000002 |mysql -u root -p ####操作的节点附近即可 [root@localhost ~]# mysql -u root -p -e'select * from client.user_info' Enter password: +-----------+--------+--------+-------------+--------+ | 身份证 | 姓名 | 姓别 | 用户ID号 | 资费 | +-----------+--------+--------+-------------+--------+ | 000006 | 张三 | 男 | 016 | 10 | | 000007 | 李四 | 女 | 017 | 91 | | 000008 | 王五 | 女 | 018 | 23 | | 000009 | 赵六 | 男 | 019 | 37 | +-----------+--------+--------+-------------+--------+ ####### [root@localhost ~]# mysql -u root -p -e 'drop table client.user_info' Enter password: [root@localhost ~]# mysql -u root -p client < /mysql_bak/client_userinfo-2018-08-15.sql Enter password: [root@localhost ~]# mysqlbinlog --no-defaults --start-position='657' /mysql_bak/mysql-bin.000002 |mysql -u root -p ####操作的节点附近即可 Enter password: [root@localhost ~]# mysql -u root -p -e'select * from client.user_info' Enter password: +-----------+--------+--------+-------------+-------- | 身份证 | 姓名 | 姓别 | 用户ID号 | 资费 | +-----------+--------+--------+-------------+--------+ | 000006 | 张三 | 男 | 016 | 10 | | 000007 | 李四 | 女 | 017 | 91 | | 000008 | 王五 | 女 | 018 | 23 | | 000010 | 孙七 | 男 | 020 | 36 | +-----------+--------+--------+-------------+--------+ #######总结## 基于位置恢复的操作,节点不要选择太靠近操作的节点,否则容易恢复失败。
######基于时间恢复##### 20200913 0:01:10 mysqlbinlog --no-defaults --stop-datetime='2018-8-15 6:07:39' /mysql_bak/mysql-bin.000002 |mysql -u root -p ##恢复赵六 mysqlbinlog --no-defaults --start-datetime='2018-8-15 6:07:39' /mysql_bak/mysql-bin.000002 |mysql -u root -p ##恢复孙七 mysqlbinlog --no-defaults --stop-datetime='2020-9-13 0:01:10' /mysql_bak/mysql-bin.000002 |mysql -u root -p ##恢复赵六 mysqlbinlog --no-defaults --start-datetime='2020-9-13 0:01:10' /mysql_bak/mysql-bin.000002 |mysql -u root -p ##恢复孙七 mysqlbinlog --no-defaults --start-datetime='2019-3-13 18:16:30' /mysql_bak/mysql-bin.000003 |mysql -u root -p 18:16:30 ####列子### [root@localhost ~]# mysql -u root -p -e 'drop table client.user_info' Enter password: [root@localhost ~]# mysql -u root -p client < /mysql_bak/client_userinfo-2018-08-15.sql Enter password: [root@localhost ~]# mysqlbinlog --no-defaults --stop-datetime='2018-8-15 6:07:39' /mysql_bak/mysql-bin.000002 |mysql -u root -p ######时间戳不要弄错了 Enter password: [root@localhost ~]# mysql -u root -p -e'select * from client.user_info' Enter password: +-----------+--------+--------+-------------+--------+ | 身份证 | 姓名 | 姓别 | 用户ID号 | 资费 | +-----------+--------+--------+-------------+--------+ | 000006 | 张三 | 男 | 016 | 10 | | 000007 | 李四 | 女 | 017 | 91 | | 000008 | 王五 | 女 | 018 | 23 | | 000009 | 赵六 | 男 | 019 | 37 | +-----------+--------+--------+-------------+--------+ ####列子### [root@localhost ~]# mysql -u root -p -e 'drop table client.user_info' Enter password: [root@localhost ~]# mysql -u root -p client < /mysql_bak/client_userinfo-2018-08-15.sql Enter password: [root@localhost ~]# mysqlbinlog --no-defaults --start-datetime='2018-8-15 15:33:48' /mysql_bak/mysql-bin.000002 |mysql -u root -p ######时间戳不要弄错了,根据的你的日志文件来## Enter password: [root@localhost ~]# mysql -u root -p -e'select * from client.user_info' Enter password: +-----------+--------+--------+-------------+--------+ | 身份证 | 姓名 | 姓别 | 用户ID号 | 资费 | +-----------+--------+--------+-------------+--------+ | 000006 | 张三 | 男 | 016 | 10 | | 000007 | 李四 | 女 | 017 | 91 | | 000008 | 王五 | 女 | 018 | 23 | | 000010 | 孙七 | 男 | 020 | 36 | +-----------+--------+--------+-------------+--------+
#####验证表的锁定是否产生二进制文件#### mysqladmin -u root -p flush-logs [root@localhost ~]# mysql -uroot -p -e 'show master logs' Enter password: +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 1539 | | mysql-bin.000002 | 797 | | mysql-bin.000003 | 9438 | | mysql-bin.000004 | 154 | +------------------+-----------+ mysql> use client; mysql> insert into user_info values('000009','老八','男','025','23'); mysql> select * from user_info; mysql>LOCK TABLES tbl_name READ; mysql> insert into user_info values('000010','赵9','男','030','23'); [root@localhost ~]# mysqladmin -u root -p flush-logs Enter password: [root@localhost ~]# mysql -uroot -p -e 'show master logs' Enter password: +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 1539 | | mysql-bin.000002 | 797 | | mysql-bin.000003 | 9438 | | mysql-bin.000004 | 499 | | mysql-bin.000005 | 154 | +------------------+-----------+ [root@localhost ~]# mysqlbinlog --no-defaults --base64-output=decode-rows -v /mysql_bak/mysql-bin.000004 ####--base64-output=decode-rows 64解码 ### -v 换行显示
-
MySql数据库备份与恢复——使用mysqldump 导入与导出方法总结
2017-08-29 17:03:37MySql数据库备份与恢复——使用mysqldump 导入与导出方法总结 mysqldump客户端可用来转储数据库或搜集数据库进行备份或将数据转移到另一个sql服务器(不一定是一个mysql服务器)。 转储包含创建表和/或装载表的sql... -
oracle数据库备份与恢复之冷备份与冷恢复
2018-11-20 10:28:37ORACLES数据库备份与恢复分为: 1、物理备份与恢复(介质恢复:磁盘或操作系统文件损坏的恢复) (1)冷备份(脱机备份)与冷恢复(脱机恢复) (2)热备份(联机备份)与热恢复(联机恢复) 2、逻辑备份与恢复 ... -
oracle数据库备份与恢复之热备份与热恢复
2018-11-20 17:20:57ORACLE数据库备份与恢复分为: 1、物理备份与恢复(介质恢复:磁盘或操作系统文件损坏的恢复) (1)冷备份(脱机备份)与冷恢复(脱机恢复) (2)热备份(联机备份)与热恢复(联机恢复) 2、逻辑备份与恢复 ... -
GreenPlum备份与恢复
2020-03-25 11:19:18GP备份与恢复GreenPlum备份与恢复背景知识非并行数据备份恢复并行数据备份恢复数据备份gpbackup数据恢复gprestore增量备份并行在线集群间数据迁移逻辑备份通用问题 GreenPlum备份与恢复 背景知识 逻辑备份保证了库... -
MySQL 备份与恢复(完全备份恢复--增量备份恢复+案例演示)
2020-09-13 16:43:03文章目录一、MySQL 完全备份1.1、数据库备份方式精讲1.1.1、数据库备份的重要性1.1.2、数据库备份的分类1.1.3、MySQL 完全备份概念解读1.2、物理冷备份与恢复1.3、mysqldump 备份二、MySQL 完全恢复2.1、恢复整库... -
MySQL备份与恢复策略
2018-07-27 14:12:28MySQL备份与恢复策略 逻辑备份与恢复 什么是数据库逻辑备份? 常用的逻辑备份 逻辑备份恢复方法 物理备份与恢复 什么是数据库物理备份 MySQL物理备份所需文件 各存储引擎常用物理备份方法 ... -
zookeeper备份与恢复
2020-07-13 18:05:00网上也有一些备份与恢复工具,但都不支持权限的备份,无奈自己写了一个python脚本来实现。 代码地址:https://github.com/idealage/TiZkBackupRestore 这是一个zookeeper数据备份与恢复工具,支持权限信息的备份和... -
MySQL备份与恢复实战mysqldump xtrabackup等
2019-06-13 10:20:20本套课程从2个方面讲解了MySQL的备份与恢复:逻辑备份和物理备份,其中逻辑备份工具分别介绍了mysqldump、mysqlpump、mydumper的详细使用,物理备份工具介绍了xtrabackup的详细使用。通过本套课程的学习能够达到快速... -
ClickHouse 备份与恢复
2020-12-03 11:24:10我们评估一款数据库产品,除了稳定性和易用性外,数据安全也十分重要,备份与恢复往往是最后一道安全门。 但如果备份策略不完善、恢复手段无效,一旦发生数据误删除就真的抢救无效-扑街了。 目前Clickhouse的备份... -
sql server 备份与恢复系列八 系统数据库备份与恢复分析
2018-09-01 12:10:57sql server 备份与恢复系列"都是集中在用户数据库上。sql server还维护着一组系统数据库,这些系统数据库对于服务器实例的运行至关重要。在每次进行系统更新后必须备份多个系统数据库。必须备份的系统数据库... -
达梦8备份与恢复
2020-07-15 22:04:18DM8物理备份与恢复 目录 DM8物理备份与恢复 1、联机完全备份与恢复 2、脱机完全备份与恢复 3、联机增量备份与恢复 物理备份:直接扫描数据库文件,找出那些已经分配、使用的数据页,拷贝并保存到备份集中。... -
MysqL备份与恢复
2019-12-27 11:57:37数据库的备份与恢复一直都是 DBA 工作中最为重要的部分之一,也是基本工作之一。任何正式环境的数据库都必须有完整的备份计划和恢复测试,本章内容将主要介绍 MySQL数据库的备份与恢复相关内容。 1、数据库备份使用... -
tidb备份与恢复
2020-07-17 16:45:24tidb备份与恢复备份恢复 备份 备份,报没有权限。用root执行也是报错。用户tidb用户执行。 BR 遇到 Permission denied 错误,即使用 root 运行 BR 也无法解决,该如何处理? 需要确认 TiKV 是否有访问备份目录的权限... -
MongoDB备份与恢复
2019-02-26 10:23:00MongoDB数据文件备份与恢复备份与恢复数据对于管理任何数据存储系统来说都是非常重要的。1、冷备份与恢复——创建数据文件的副本(前提是要停止MongoDB服务器),也就是直接copyMongoDB将所有数据都存储在数据目录下... -
Oracle 11g R2 Rman备份与恢复
2018-06-08 09:49:31备份与恢复的定义及分类 备份的定义及分类: 备份就是把数据库复制到转储设备的过程。其中,转储设备是指用于放置数据库副本的磁带或磁盘。通常也将存放于转储设备中的数据库的副本称为原数据库的备份或转储。... -
Oracle 12c备份与恢复
2020-07-23 10:47:38标题Oracle 12c备份与恢复一、简介二、备份与恢复概述1、需要备份的原因2、备份与恢复的定义与分类(1)备份的定义与分类1)从物理与逻辑角度分类2)从数据库的备份策略角度分类(2)恢复的定义与分类1)实例恢复:2... -
备份与恢复机制
2020-05-12 08:22:08在数据库系统中,由于认为操作或自然灾害等因素可能造成数据丢失或被...oracle数据库提供了备份与恢复机制,从而使用户可以放心地使用,其中备份是将数据信息保存起来,恢复是将原来备份胡数据信息还原到数据库中 ... -
数据库——备份与恢复
2020-03-14 16:38:001 理解备份与恢复的概念 2 SQL Server的备份与恢复机制 3 了解Oracle 备份与恢复机制 备份数据库 数据备份的原因 防止数据丢失(存储介质故障,用户的操作错误,服务器故障,病毒侵害,自然灾害)一旦出现问题,能够... -
gitlab备份与恢复
2017-09-08 09:06:141、gitlab备份与恢复 参考:https://docs.gitlab.com/ce/raketasks/backup_restore.html 创建系统备份 sudo gitlab-rake gitlab:backup:create 备份文件存在/var/opt/gitlab/backups,可编辑/etc/gitlab/... -
Oracle-Oracle数据库备份与恢复
2019-06-21 22:59:31Oracle数据库备份与恢复 下面通过一些简单的例子来了解一下: Oracle数据库各种物理备份的方法。 Oracle数据库各种物理恢复的方法 利用RMAN工具进行数据库的备份与恢复。 数据的导出与导入操作。 (1)关闭... -
MongoDB数据备份与恢复
2020-03-31 10:11:34一.备份背景 针对大数据量的地图数据切图使用mongodb...mongodb数据的备份与恢复,mongodb数据的备份与恢复相对以下两种,经过测试,备份与恢复使用的时间短,而且不存在数据丢失和增加等问题,同时可以跨mongodb... -
Mysql数据库的备份与恢复
2020-12-08 18:00:01Mysql数据库的备份与恢复一、Mysql数据库备份的相关概述二、数据库备份的类型- 从物理和逻辑角度划分- 备份策略的三种角度- 数据备份的方法三、mysql数据库的备份操作(1)物理冷备份与恢复(2)使用mysqldump实现... -
Mongodb备份与恢复
2018-07-13 15:27:38MongoDB的备份与恢复分类: NoSQL,故障解决,其他1.1 MongoDB的常用命令mongoexport / mongoimportmongodump / mongorestore 有以上两组命令在备份与恢复中进行使用。1.1.1 导出工具mongoexportMongodb中的...
-
基于Flink+Hudi构建企业亿级云上实时数据湖教程(PC、移动、小
-
互联网协议套件(TCP/IP)及七层OSI模型
-
光强度对双掺杂LiNbO3:Fe:Ru晶体准非易失性全息的影响
-
C和C++课程
-
LVS + Keepalived 实现 MySQL 负载均衡与高可用
-
web在线网页代理服务器是什么?
-
MySQL 索引
-
落叶松:用于X射线光谱的数据分析工具
-
2021年的应届生福利来啦!学长总结半个月的java实习面经,助你找到满意的工作!
-
基于SSM实现的房屋租赁系统【附源码】(毕设)
-
Pb(Al,Nb)O3的取代对Pb(Zn,Nb)O3-Pb(Zr,Ti)O3固溶体结构和电性能的影响
-
redis探索之熟悉string类型操作
-
Elasticsearch 介绍和安装
-
项目-源码
-
i386-linux-gnu.tar.gz
-
MySQL 性能优化(思路拓展及实操)
-
怎么把京东的视频下载下来
-
大财炒股简述大涨牛市来了吗
-
音阶理论:我对音阶做了很多思考-源码
-
《文本处理 awk sed grep ”三剑客”》