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

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所对应的position0:表示在使用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/sdb3VG Name               PV Size               100.00 GiBAllocatable           NOPE Size               0   Total PE              0Free PE               0Allocated PE          0PV UUID               zYUBTH-Eqfa-ZYf7-q8pZ-gWBQ-UtUL-qeZzyd
6.[root@localhost ~]# vgcreate test3vg /dev/sdb3                                             #创建vgVolume group "test3vg" successfully created
7.[root@localhost ~]# lvcreate -L 99G -n testlv3 test3vg                                    #创建lvLogical 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.pidsocket=/test3/mysql.sockwsrep_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

转载于:https://www.cnblogs.com/renyz/p/11483066.html

mysql基础之数据库备份和恢复实操相关推荐

  1. mysql中更改数据库名字_【实操篇】_MySQL如何更改数据库名字?

    [前言] 来了一需求,开发组前项目前期开发时创建了一个测试库,存储引擎使用的是innodb:此库DataBase/Schema存放了一些表和索引,并无存储过程.视图.触发器.函数等:因名字和生产库名称 ...

  2. mysql 恢复数据库 source_mysql数据库备份及恢复命令 mysqldump,source的用法 | 很文博客...

    mysql数据库备份及恢复命令 mysqldump,source的用法,需要的朋友可以参考下. 还原一个数据库:mysql -h localhost -u root -p123456 www d:\w ...

  3. java写的MySQL数据库备份和恢复代码:

    1.MySQL数据库备份和恢复,java代码实现:详情见下面: package com.spring.util; import java.io.BufferedReader; import java. ...

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

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

  5. ASP中怎么实现SQL数据库备份、恢复!

    选择自 hanghwp 的 Blog 1.ASP中怎么实现SQL数据库备份.恢复! 答:asp在线备份sql server数据库: 1.备份 <% SQL="backup databa ...

  6. Oracle数据库备份和恢复配置详解

    本文Oracle讲述了数据库备份和恢复配置的详解过程,可能的失败及其解决方法. 失败类型 遇到的失败或错误分为两大类:物理和逻辑.物理错误一般是硬件错误或使用数据库的应用程序中的软件错误,而逻辑错误一 ...

  7. 案例:Oracle dul数据挖掘 没有数据库备份非常规恢复truncate删除的数据表

    Oracle数据库在没有备份情况下在对表中的某数据表进行truncate删除后,通过oracle dul进行非常规恢复 1.准备oracle dul测试环境 SQL> select count( ...

  8. linux postgresql 恢复数据库,PostgreSQL数据库备份和恢复

    一.备份 1.cmd到PostgreSQL安装目录bin下 2.备份命令 pg_dump -h 192.168.100.23 -U postgres postgres > D:\postgres ...

  9. Android数据库备份和恢复

    一定要加上权限,否则不能在sdcard中创建文件      <!--在sdcard中创建/删除文件的权限 -->       <uses-permission android:nam ...

  10. oracle dul误删数据,案例:Oracle dul数据挖掘 没有数据库备份非常规恢复truncate删除的数据表...

    Oracle数据库在没有备份情况下在对表中的某数据表进行truncate删除后,通过oracle dul进行非常规恢复 1.准备oracle dul测试环境SQL> select count(* ...

最新文章

  1. exec不同文件l怎么汇总_ABAQUS常见问题汇总 - 2.0版.doc
  2. Android Studio快捷键——编辑篇
  3. 站点某些网页想显示母版页内的用户控件,某些网页不想显示,怎样实现
  4. XP中怎样让批处理文件运行后,不关闭dos窗口
  5. java中Map有哪些实现类
  6. Linux 命令之 userdel -- 用于删除给定的用户以及与用户相关的文件
  7. Eclipse直接运行算法第4版例子(重定向和读取指定路径文件)
  8. VMware vSAN6.7 设计和优化 vSAN 主机 vSAN 6.5带来七大更新 解读VMware超融合增长秘诀
  9. Python基础(10) Python创建list
  10. [Hadoop]Hive r0.9.0中文文档(二)之联表查询Join
  11. 强化学习总结(1)--EE问题
  12. 2021级研究生人工智能高级语言程序设计考试说明
  13. 金蝶K3系统与防火墙集成部署方案
  14. 今天终于知道了!阿里巴巴 P8、P9 及以上到底是什么水平?
  15. Ubuntu18.04 + win10 双系统,grub引导配置,美化
  16. ios13.5.1降级_四条重磅消息,iOS 13.5.1 也能降级 iOS 13.4.1
  17. 求生之路2服务器模式修改参数,求生之路2参数修改控制台命令_求生之路2参数修改控制台命令方法_牛游戏网...
  18. 语音识别技术的前世今生【前世篇】
  19. GALIL运动控制卡维修控制器维修DMC-1840
  20. 天池精准医疗大赛——人工智能辅助糖尿病遗传风险预测

热门文章

  1. CN域名调查报告称青少年成个人CN域名主要注册群
  2. 推荐2款在线Ascii画图工具
  3. 《面向模式的软件体系结构2-用于并发和网络化对象模式》读书笔记(10)--- 接受器 - 连接器...
  4. 「leetcode」941. 有效的山脉数组:【双指针】详解
  5. git 操作 中文文件名的时候,显示乱码 ,解决方法
  6. 如何在 Mac 上设置和使用快捷方式?
  7. splunk VS elasticsearch
  8. Unity WebGL与IIS小坑
  9. Mysql实现企业级数据库主从复制架构实战
  10. 8086汇编语言入门-HelloWorld