mysql基础之数据库备份和恢复实操
一、基于二进制文件的恢复***
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基础之数据库备份和恢复实操的更多相关文章
- mysql基础之数据库备份和恢复的基础知识
备份数据的最终目的是为了在出现一些意外情况时,能够通过备份将数据还原,所以单单的备份数据往往是无法满足还原时的需求的,所以在备份数据库时,除了要备份数据本身,还要备份相关的数据库环境,如配置文件,定时 ...
- 达梦产品技术支持培训-day8-DM8数据库备份与还原-实操
1.DM8的备份还原方法 Disql 工具:联机数据备份与还原,包括库备份.表空间备份与还原.表备份与还原: DMRMAN 工具:脱机数据库备份还原与恢复: 客户端工具 MANAGER和CONSOL ...
- mysql用mysqldump数据库备份和恢复
备份: 用mysqldump命令把数据库被分成sql文件:(注意是在cmd里,不用进入数据库,输入之后会提示输入密码) mysqldump -hlocalhost -uroot -p testdb & ...
- mysql数据库-备份与还原实操
目录 备份工具 1 基于 LVM 的快照备份(几乎热备) 2 数据库冷备份和还原 3 mysqldump备份工具 3.1 实战备份策略 3.1.1 全备份 3.1.2 分库分表备份 3.2 mysql ...
- 小型网站MYSQL问题二:Percona Xtrabackup实现数据库备份和恢复
1.安装软件仓库(不要问我为什么不用源码安装,好吧,其实我懒.) 1 2 3 4 5 6 7 8 wget https://www.percona.com/downloads/percona-rele ...
- Sql Server数据库备份和恢复:原理篇
本文与您探讨为什么Sql Server有完整备份.差异备份和事务日志备份三种备份方式,以及为什么数据库又有简单模式.完整模式和大容量日志模式这三种恢复模式.本文内容适用于2005以上所有版本的Sql ...
- 第五章 MySQL事务,视图,索引,备份和恢复
第五章 MySQL事务,视图,索引,备份和恢复 一.事务 1.什么是事务 事务是一种机制,一个操作序列,它包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求.要么都执行 ...
- 使用exp&imp工具进行数据库备份及恢复
使用exp&imp工具进行数据库备份及恢复1.exp/imp使用方法介绍exp/imp为一种数据库备份恢复工具,也可以作为不同数据库之间传递数据的工具,两个数据库所在的操作系统可以不同.exp ...
- MongoDB学习总结(六) —— 数据库备份和恢复
我们都知道数据库数据经常备份是多么的重要,MongoDB作为一个数据库系统,自然提供了完善,丰富而且好用的备份与恢复机制. 以下介绍三种数据库备份和恢复的方式 > 数据目录直接拷贝 数据库目录直 ...
随机推荐
- AutoAssign源码分析
目录 AutoAssign源码分析 一. 简介 二. 论文理论 2.1 联合表示 2.2 正样本权重 2.3 负样本权重 2.4 总的loss 2.5 补充loss 三. 论文代码 四. 总结 五. ...
- 2020 OO 第一单元总结 表达式求导
title: BUAA-OO 第一单元总结 date: 2020-03-19 20:53:41 tags: OO categories: 学习 OO第一单元通过三次递进式的作业让我们实现表达式求导,在 ...
- MySQL提升笔记(2):存储引擎盘点
在前面我们了解了server层调用存储引擎层接口来完成sql的执行,使用存储引擎的好处是:每个存储引擎都有各自的特点,能够根据具体的应用建立不同存储引擎表. 需要注意的是,存储引擎是基于表的,而不是数 ...
- c++ 实现向量去重操作
去重的时候要考虑线性表或链表是否是有序 1.1.无序线性表 对于向量[1,5,3,7,2,4,7,3], 从头开始扫描vector内的元素, 对于表中r处的元素a[r], 检查数组0至r-1区间内是否 ...
- 【CTF】图片隐写术 · 盲水印
前言 盲水印同样是CTF Misc中极小的一个知识点,刚刚做到一题涉及到这个考点的题目. 感觉还挺有意思的,就顺便去了解了下盲水印技术. 数字水印 数字水印(Digital Watermark)一种应 ...
- JVM经典垃圾收集器
这个关系不是一成不变的,由于维护和兼容性测试的成本,在JDK 8时将Serial+CMS. ParNew+Serial Old这两个组合声明为废弃(JEP 173),并在JDK 9中完全取消了这些 ...
- 解决Linux无法读写U盘中的NTFS问题
1 问题描述 由于笔者因为某些需要把Windows装在了U盘上面(在这里建议一下如果有需要请使用固态U盘),在Linux下挂载时,能读取但并不能写. 2 尝试的解决方案 2.1 remount 一开始 ...
- 07_利用pytorch的nn工具箱实现LeNet网络
07_利用pytorch的nn工具箱实现LeNet网络 目录 一.引言 二.定义网络 三.损失函数 四.优化器 五.数据加载和预处理 六.Hub模块简介 七.总结 pytorch完整教程目录:http ...
- 【学习底层原理系列】重读spring源码3-加载beanDefinition的方法obtainFreshBeanFactory
obtainFreshBeanFactory()方法概述 定义BeanFactory,并加载以下两种bean的定义,装配到BeanFactory: 1.配置文件中定义的bean 2.通过<con ...
- addslashes,htmlspecialchars,htmlentities转换或者转义php特殊字符防止xss攻击以及sql注入
一.转义或者转换的目的 1. 转义或者转换字符串防止sql注入 2. 转义或者转换字符防止html非过滤引起页面布局变化 3. 转义或者转换可以阻止javascript等脚本的xss攻击,避免出现类似 ...