一、基于二进制文件的恢复***

1、算好要恢复数据的时间段,重定向输入到bin.sql文件中

[root@ren7 mysql]# mysqlbinlog --start-datetime="2019-09-07 20:07:32" --stop-datetime="2019-09-07 20:12:00" mysql-bin.000001 > bin.sql
[root@ren7 mysql]# chown mysql.mysql bin.sql

执行bin.sql文件还原(sql语句下)

MariaDB [ren]> source /var/lib/mysql/bin.sql

2、根据最后所处的位置恢复

MariaDB [ren]> delete from test where id is null;
Query OK, 1 row affected (0.00 sec)
MariaDB [ren]> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 | 690 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
[root@ren7 mysql]# mysqlbinlog /var/lib/mysql/mysql-bin.000002 --stop-position=518 | mysql -uroot -proot

二、基于备份工具mariabackup进行备份***

1、简介(针对事务日志备份和恢复)

  Mariabackup是MariaDB提供的一个开源工具,用于对InnoDB,Aria和MyISAM表进行物理在线备份。这个工具是基于Percona的XtraBackup(版本2.3.8)的解决方案。
  这里有一点需要注意,在MariaDB10.3.x及以上的版本用Percona XtraBackup工具会有问题。原因可能是MariaDB10.3以上版本的redo日志格式和之前不同了。

  Percona的官方文档:https://www.percona.com/doc/percona-xtrabackup/2.4/index.html
  Mariabackup的官方文档:https://mariadb.com/kb/en/library/mariabackup-overview/

2、常用选项

  安装方法:yum install MariaDB-backup

--语法格式:
mariabackup [--defaults-file=#] [--backup | --prepare | --copy-back | --move-back] [OPTIONS]
--target-dir=name            <<目标目录
--backup            <<备份到目标目录--prepare             <<准备备份数据--copy-back            <<还原数据--incremental-basedir=name <<仅适用于backup,增量备份目录
--incremental-dir=name <<仅适用于prepare,恢复指定目录下的.delta文件和日志文件
--apply-log-only             <<(做增量备份时必须要加的参数,这个参数是为了防止增量备份合并的时候回滚事务,这个参数是为了保留未提交的事务,因为有可能在下一次增量的时候提交)
--xtrabackupd的选项:
--apply-log <<从备份恢复。
--redo-only <<该选项强制跳过rollback阶段,只进行redo。这是有必要使用的,如果备份后,要使用增量改变的。

3、全备+恢复

(1)全量备份

[root@ren7 ~]# mariabackup --backup --target-dir=/root/fullbackup --user=root --password=root
[00] 2019-09-08 09:33:37 Connecting to MySQL server host: localhost, user: root, password: set, port: not set, socket: not set
...
[00] 2019-09-08 09:33:39 completed OK!
--查看现有数据库
MariaDB [ren]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| ren |
| test1 |
| test2 |
+--------------------+
6 rows in set (0.00 sec)
--模拟故障
MariaDB [ren]> drop database ren;
Query OK, 11 rows affected (0.04 sec) MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test1 |
| test2 |
+--------------------+
5 rows in set (0.01 sec)

(2)准备全备数据

[root@ren7 ~]# mariabackup --prepare --target-dir=/root/fullbackup --user=root --password=root
mariabackup based on MariaDB server 10.2.26-MariaDB Linux (x86_64)
[00] 2019-09-08 09:38:15 cd to /root/fullbackup/
...
[00] 2019-09-08 09:38:15 completed OK!

(3)还原数据(确保数据目录为空)

MariaDB [(none)]> quit
Bye
[root@ren7 ~]# systemctl stop mariadb  #可以不手动关闭
[root@ren7 ~]# ss -tnl |grep 3306
[root@ren7 ~]# rm -rf /var/lib/mysql/*
[root@ren7 ~]# ls -ltr /var/lib/mysql  #删除数据库文件内容
总用量 0
[root@ren7 ~]# mariabackup --copy-back --target-dir=/root/fullbackup --user=root --password=root
mariabackup based on MariaDB server 10.2.26-MariaDB Linux (x86_64)
[01] 2019-09-08 09:43:15 Copying ibdata1 to /var/lib/mysql/ibdata1
[00] 2019-09-08 09:43:16 completed OK!

(4)修改属主和属组

[root@ren7 ~]# ls -tlr /var/lib/mysql
总用量 77860
-rw-r-----. 1 root root 79691776 9月 8 09:43 ibdata1
drwx------. 2 root root 4096 9月 8 09:43 mysql
drwx------. 2 root root 4096 9月 8 09:43 ren
drwx------. 2 root root 20 9月 8 09:43 performance_schema
drwx------. 2 root root 20 9月 8 09:43 test1
drwx------. 2 root root 20 9月 8 09:43 test2
-rw-r-----. 1 root root 52 9月 8 09:43 aria_log_control
-rw-r-----. 1 root root 16384 9月 8 09:43 aria_log.00000001
-rw-r-----. 1 root root 529 9月 8 09:43 xtrabackup_info
-rw-r-----. 1 root root 2539 9月 8 09:43 ib_buffer_pool
[root@ren7 ~]# chown -R mysql.mysql /var/lib/mysql/
[root@ren7 ~]# service mariadb restart
Redirecting to /bin/systemctl restart mariadb.service

4、全备+增量+二进制-->恢复

(1)全量备份

[root@ren7 ~]# mariabackup --backup --target-dir=/root/fullbackup --user=root --password=root

(2)新增数据库

MariaDB [(none)]> create database yang character set utf8;
Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> use yang
Database changed
MariaDB [yang]> create table qinqin(id int primary key ,name varchar(20));Query OK, 0 rows affected (0.00 sec) MariaDB [yang]> insert into qinqin values(0,'任彦忠');
Query OK, 1 row affected (0.00 sec) MariaDB [yang]> select * from qinqin;
+----+-----------+
| id | name |
+----+-----------+
| 0 | 任彦忠 |
+----+-----------+
1 row in set (0.00 sec)

(3)增量备份

[root@ren7 ~]# mariabackup --backup --target-dir=/root/increase --incremental-basedir=/root/fullbackup --user=root --password=root
[00] 2019-09-08 10:08:20 Connecting to MySQL server host: localhost, user: root, password: set, port: not set, socket: not set
...
[00] 2019-09-08 10:08:22 completed OK!

(4)模拟损坏

MariaDB [yang]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| ren |
| test1 |
| test2 |
| yang |
+--------------------+
7 rows in set (0.00 sec) MariaDB [yang]> drop database yang;
Query OK, 1 row affected (0.01 sec) MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| ren |
| test1 |
| test2 |
+--------------------+
6 rows in set (0.00 sec)

(5)准备全备数据

[root@ren7 ~]# mariabackup --prepare --target-dir=/root/fullbackup --user=root --password=root

(6)增量和全量备份数据合并

[root@ren7 ~]# mariabackup --prepare --target-dir=/root/fullbackup --user=root --password=root --incremental-dir=/root/increase --apply-log-only
mariabackup based on MariaDB server 10.2.26-MariaDB Linux (x86_64)
[00] 2019-09-08 10:15:22 incremental backup from 2210550 is enabled.
...
[00] 2019-09-08 10:15:23 completed OK!

(7)恢复数据

[root@ren7 ~]# rm -rf /var/lib/mysql/*
[root@ren7 ~]# ls -tlr /var/lib/mysql
总用量 0
[root@ren7 ~]# mariabackup --copy-back --target-dir=/root/fullbackup --user=root --password=root
mariabackup based on MariaDB server 10.2.26-MariaDB Linux (x86_64)
[01] 2019-09-08 10:19:18 Copying ibdata1 to /var/lib/mysql/ibdata1
...
[00] 2019-09-08 10:19:19 completed OK!

(8)修改属组和属主

[root@ren7 ~]# ls -tlr /var/lib/mysql
总用量 77860
-rw-r-----. 1 root root 79691776 9月 8 10:19 ibdata1
drwx------. 2 root root 4096 9月 8 10:19 mysql
drwx------. 2 root root 4096 9月 8 10:19 ren
drwx------. 2 root root 20 9月 8 10:19 test2
drwx------. 2 root root 20 9月 8 10:19 test1
drwx------. 2 root root 20 9月 8 10:19 performance_schema
-rw-r-----. 1 root root 52 9月 8 10:19 aria_log_control
-rw-r-----. 1 root root 16384 9月 8 10:19 aria_log.00000001
-rw-r-----. 1 root root 2539 9月 8 10:19 ib_buffer_pool
drwx------. 2 root root 56 9月 8 10:19 yang
-rw-r-----. 1 root root 573 9月 8 10:19 xtrabackup_info
[root@ren7 ~]# chown -R mysql.mysql /var/lib/mysql/
[root@ren7 ~]# ls -tlr /var/lib/mysql
总用量 77860
-rw-r-----. 1 mysql mysql 79691776 9月 8 10:19 ibdata1
drwx------. 2 mysql mysql 4096 9月 8 10:19 mysql
drwx------. 2 mysql mysql 4096 9月 8 10:19 ren
drwx------. 2 mysql mysql 20 9月 8 10:19 test2
drwx------. 2 mysql mysql 20 9月 8 10:19 test1
drwx------. 2 mysql mysql 20 9月 8 10:19 performance_schema
-rw-r-----. 1 mysql mysql 52 9月 8 10:19 aria_log_control
-rw-r-----. 1 mysql mysql 16384 9月 8 10:19 aria_log.00000001
-rw-r-----. 1 mysql mysql 2539 9月 8 10:19 ib_buffer_pool
drwx------. 2 mysql mysql 56 9月 8 10:19 yang
-rw-r-----. 1 mysql mysql 573 9月 8 10:19 xtrabackup_info

三、基于mysqldump工具进行备份(逻辑备份工具)***

#备份testdb数据库(-l代表备份单个数据库时锁定该库的所有表;-x当对所有数据库备份时锁定所有数据库的所有表)
mysqldump -uroot -proot -l --databases testdb > testdb.sql
#备份所有数据库
mysqldump -uroot -proot --all-databases > all_databases.sql
#备份testdb数据库下的students表
mysqldump -uroot -proot testdb students > students.sql
#备份testdb数据库下的students表和classes表
mysqldump -uroot -proot testdb students classes > both_tables.sql
#还原数据(sql命令行下)
source testdb.sql
其它常用选项:
--master-data: 表示标记备份开始时的binlog所对应的position
0:表示在使用mysqldump进行备份时,不记录对应二进制日志文件位置,将此值显式的设置为0与不使用此选项的效果相同
1:表示在使用mysqldump进行备份时,记录对应二进制日志文件位置,此值为默认值;使用--master-data与使用--master-data=1的效果相同;如果将此选项的值设置为1,则会在备份文件中生成对应的“CHANGE MASTER TO”语句,此语句中标明了备份开始时二进制日志的前缀名以及其所处的position,生成此语句的目的是,在主从复制结构中的“从服务器”中通过备份sql还原数据以后,告诉“从库”,从“主库”的二进制日志文件中的哪个位置开始“同步”。
2:表示在使用mysqldump进行备份时,记录对应二进制日志文件的位置,此值为2时,也会生成“CHENGE MASTER TO”语句,但是该语句会被注释,而此值为1时,该语句不会被注释;所以,如果只是单纯的为了记录备份时的二进制日志文件位置,那么将此值设置为2即可。
--flush-logs:    表示备份开始时,就会滚动一次二进制日志
--routines: 表示备份时,存储过程和存储函数也会被备份
--triggers: 表示备份时,触发器会被备份
--events: 表示备份时,事件表会被备份

四、基于lvm2的备份

  因为mariadb的默认数据文件位置是/var/lib/mysql目录里,并不是文件系统,因此这里用新加磁盘来创建文件系统测试

--开始配置:
1.添加磁盘
2.重启服务器识别硬盘
3.[root@localhost ~]#fdisk /dev/sdb #分区
4.[root@localhost ~]#pvcreate /dev/sdb3 #创建pv
5.[root@localhost ~]#pvdisplay #查看pv
"/dev/sdb3" is a new physical volume of "100.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb3
VG Name
PV Size 100.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID zYUBTH-Eqfa-ZYf7-q8pZ-gWBQ-UtUL-qeZzyd
6.[root@localhost ~]# vgcreate test3vg /dev/sdb3 #创建vg
Volume group "test3vg" successfully created
7.[root@localhost ~]# lvcreate -L 99G -n testlv3 test3vg #创建lv
Logical volume "testlv3" created.
8.[root@localhost ~]# mkfs.ext4 /dev/test3vg/testlv3 #格式化lv
9.[root@localhost ~]# mkdir /test3 #根目录下创建一个test3目录
10.[root@localhost ~]# mount /dev/test3vg/testlv3 /test3/ #挂在刚才所创建的目录
11.如果是yum安装默认数据目录在/var/lib/mysql,如果需要更改
vim /etc/my.cnf.d/server.cnf
[mysqld]
datadir=/test3/
pid_file=/test3/localhost.pid
socket=/test3/mysql.sock
wsrep_data_home_dir=/test3/
log-bin=mysql-bin
[client]
socket=/test3/mysql.sock
12.[root@localhost ~]#chown -R mysql.mysql /test3 #修改目录下面所有文件的权限,必须为mysql不然数据库起不来
13.[root@localhost ~]#service mariadb restart #重启数据库
14.MariaDB [(none)]> flush tables with read lock; #将所有表锁住(只能读,不能写)
15.[root@localhost ~]# lvcreate -L 100G -s -p r -n snap_test3 /dev/test3vg/testlv3 #创建快照lv(这里要注意,test3vg中必须有足够的空间,不然创建lv会失败)
备注:
-L: --size
-s: --snap
-p: --permission rw|r
-n: --name
16.MariaDB [(none)]> unlock tables; #释放锁
17.[root@localhost testvg]# mkdir /snap_test3 #创建快照目录
18.[root@localhost ~]# mount /dev/testvg/snap_test3 /snap_test3/ #挂载快照lv
19.这时候你就可以在快照目录下看到跟源文件系统一模一样的内容了,此时就可以用cp拷贝了!
note:
还原的时候确保属组和属主是mysql:mysql

mysql基础之数据库备份和恢复实操的更多相关文章

  1. mysql基础之数据库备份和恢复的基础知识

    备份数据的最终目的是为了在出现一些意外情况时,能够通过备份将数据还原,所以单单的备份数据往往是无法满足还原时的需求的,所以在备份数据库时,除了要备份数据本身,还要备份相关的数据库环境,如配置文件,定时 ...

  2. 达梦产品技术支持培训-day8-DM8数据库备份与还原-实操

    1.DM8的备份还原方法 Disql 工具:联机数据备份与还原,包括库备份.表空间备份与还原.表备份与还原:  DMRMAN 工具:脱机数据库备份还原与恢复: 客户端工具 MANAGER和CONSOL ...

  3. mysql用mysqldump数据库备份和恢复

    备份: 用mysqldump命令把数据库被分成sql文件:(注意是在cmd里,不用进入数据库,输入之后会提示输入密码) mysqldump -hlocalhost -uroot -p testdb & ...

  4. mysql数据库-备份与还原实操

    目录 备份工具 1 基于 LVM 的快照备份(几乎热备) 2 数据库冷备份和还原 3 mysqldump备份工具 3.1 实战备份策略 3.1.1 全备份 3.1.2 分库分表备份 3.2 mysql ...

  5. 小型网站MYSQL问题二:Percona Xtrabackup实现数据库备份和恢复

    1.安装软件仓库(不要问我为什么不用源码安装,好吧,其实我懒.) 1 2 3 4 5 6 7 8 wget https://www.percona.com/downloads/percona-rele ...

  6. Sql Server数据库备份和恢复:原理篇

    本文与您探讨为什么Sql Server有完整备份.差异备份和事务日志备份三种备份方式,以及为什么数据库又有简单模式.完整模式和大容量日志模式这三种恢复模式.本文内容适用于2005以上所有版本的Sql ...

  7. 第五章 MySQL事务,视图,索引,备份和恢复

    第五章 MySQL事务,视图,索引,备份和恢复 一.事务 1.什么是事务 事务是一种机制,一个操作序列,它包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求.要么都执行 ...

  8. 使用exp&imp工具进行数据库备份及恢复

    使用exp&imp工具进行数据库备份及恢复1.exp/imp使用方法介绍exp/imp为一种数据库备份恢复工具,也可以作为不同数据库之间传递数据的工具,两个数据库所在的操作系统可以不同.exp ...

  9. MongoDB学习总结(六) —— 数据库备份和恢复

    我们都知道数据库数据经常备份是多么的重要,MongoDB作为一个数据库系统,自然提供了完善,丰富而且好用的备份与恢复机制. 以下介绍三种数据库备份和恢复的方式 > 数据目录直接拷贝 数据库目录直 ...

随机推荐

  1. AutoAssign源码分析

    目录 AutoAssign源码分析 一. 简介 二. 论文理论 2.1 联合表示 2.2 正样本权重 2.3 负样本权重 2.4 总的loss 2.5 补充loss 三. 论文代码 四. 总结 五. ...

  2. 2020 OO 第一单元总结 表达式求导

    title: BUAA-OO 第一单元总结 date: 2020-03-19 20:53:41 tags: OO categories: 学习 OO第一单元通过三次递进式的作业让我们实现表达式求导,在 ...

  3. MySQL提升笔记(2):存储引擎盘点

    在前面我们了解了server层调用存储引擎层接口来完成sql的执行,使用存储引擎的好处是:每个存储引擎都有各自的特点,能够根据具体的应用建立不同存储引擎表. 需要注意的是,存储引擎是基于表的,而不是数 ...

  4. c++ 实现向量去重操作

    去重的时候要考虑线性表或链表是否是有序 1.1.无序线性表 对于向量[1,5,3,7,2,4,7,3], 从头开始扫描vector内的元素, 对于表中r处的元素a[r], 检查数组0至r-1区间内是否 ...

  5. 【CTF】图片隐写术 · 盲水印

    前言 盲水印同样是CTF Misc中极小的一个知识点,刚刚做到一题涉及到这个考点的题目. 感觉还挺有意思的,就顺便去了解了下盲水印技术. 数字水印 数字水印(Digital Watermark)一种应 ...

  6. JVM经典垃圾收集器

      这个关系不是一成不变的,由于维护和兼容性测试的成本,在JDK 8时将Serial+CMS. ParNew+Serial Old这两个组合声明为废弃(JEP 173),并在JDK 9中完全取消了这些 ...

  7. 解决Linux无法读写U盘中的NTFS问题

    1 问题描述 由于笔者因为某些需要把Windows装在了U盘上面(在这里建议一下如果有需要请使用固态U盘),在Linux下挂载时,能读取但并不能写. 2 尝试的解决方案 2.1 remount 一开始 ...

  8. 07_利用pytorch的nn工具箱实现LeNet网络

    07_利用pytorch的nn工具箱实现LeNet网络 目录 一.引言 二.定义网络 三.损失函数 四.优化器 五.数据加载和预处理 六.Hub模块简介 七.总结 pytorch完整教程目录:http ...

  9. 【学习底层原理系列】重读spring源码3-加载beanDefinition的方法obtainFreshBeanFactory

    obtainFreshBeanFactory()方法概述 定义BeanFactory,并加载以下两种bean的定义,装配到BeanFactory: 1.配置文件中定义的bean 2.通过<con ...

  10. addslashes,htmlspecialchars,htmlentities转换或者转义php特殊字符防止xss攻击以及sql注入

    一.转义或者转换的目的 1. 转义或者转换字符串防止sql注入 2. 转义或者转换字符防止html非过滤引起页面布局变化 3. 转义或者转换可以阻止javascript等脚本的xss攻击,避免出现类似 ...