备份还原案例

前提:log_bin=ON

一、早上上班后误删数据库,如何恢复最新状态

1、假设早上已经完成备份 (开启二进制),然后在students表里新增了一条数据

[root@centos7 ~]#mysqldump -A -F --single-transaction --master-data=2 > /backup/full.sqlMariaDB [hellodb]> insert students values (26,'laobai',30,'M',7,2);

2、然后在10点时,误删数据库 ;用户在访问 students表 的时候 提示错误,表找不到,然后其他用户又新增一个表

MariaDB [hellodb]> drop table students;

MariaDB [hellodb]> insert teachers values(5,'mht','46','M');

MariaDB [hellodb]> select * from students;
ERROR 1146 (42S02): Table 'hellodb.students' doesn't exist

3、为了防止问题继续扩大,我们先上个只读锁,禁止用户修改。

MariaDB [(none)]> flush table with read lock;

4、我们先查看此时的日志文件

MariaDB [(none)]> show master logs;

+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 30343 |
| mysql-bin.000002 | 1038814 |
| mysql-bin.000003 | 7698 |
| mysql-bin.000004 | 773 |
+------------------+-----------+

5、为了区分新旧日志,我们刷新一下日志

MariaDB [(none)]> flush logs;

Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 30343 |
| mysql-bin.000002 | 1038814 |
| mysql-bin.000003 | 7698 |
| mysql-bin.000004 | 816 |

6、我们查看一下二进制文件,确认是第四个文件且编号为245的文件 ,然后将文件导入至backup目录下

[root@centos7 ~]#less /backup/full.sql -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=245;

[root@centos7 ~]#mysqlbinlog --start-position=245 /date/binlog/mysql-bin.000004 > /backup/bin.sql

7、上部操作是将全部备份 加上 出故障之间的备份文件导了出来,我们还需要找到删除表的记录并删除,然后利用二进制文件进行恢复 ,发现表已经全部恢复。

[root@centos7 backup]#vim /backup/bin.sql         #将删除表的指令删除
[root@centos7 backup]#rm -rf /date/mysql/*        #删库(删之前一定要确认有备份)
[root@centos7 backup]#systemctl restart mariadb
[root@centos7 backup]#mysql < /backup/full.sql    #将全备份还原
[root@centos7 backup]#mysql < /backup/bin.sql     #将修改过的文件还原
[root@centos7 backup]#mysqlDatabase changed
MariaDB [hellodb]> select * from teachers-> ;
+-----+---------------+-----+--------+
| TID | Name          | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang    |  45 | M      |
|   2 | Zhang Sanfeng |  94 | M      |
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
|   5 | mht           |  46 | M      |
+-----+---------------+-----+--------+MariaDB [hellodb]> select * from students;
+-------+---------------+-----+--------+---------+-----------+
| StuID | Name          | Age | Gender | ClassID | TeacherID |
+-------+---------------+-----+--------+---------+-----------+
|     1 | Shi Zhongyu   |  22 | M      |       2 |         3 |
|     2 | Shi Potian    |  22 | M      |       1 |         7 |
|     3 | Xie Yanke     |  53 | M      |       2 |        16 |
|     4 | Ding Dian     |  32 | M      |       4 |         4 |
|     5 | Yu Yutong     |  26 | M      |       3 |         1 |
|     6 | Shi Qing      |  46 | M      |       5 |      NULL |
|     7 | Xi Ren        |  19 | F      |       3 |      NULL |
|     8 | Lin Daiyu     |  17 | F      |       7 |      NULL |
|     9 | Ren Yingying  |  20 | F      |       6 |      NULL |
|    10 | Yue Lingshan  |  19 | F      |       3 |      NULL |
|    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |
|    12 | Wen Qingqing  |  19 | F      |       1 |      NULL |
|    13 | Tian Boguang  |  33 | M      |       2 |      NULL |
|    14 | Lu Wushuang   |  17 | F      |       3 |      NULL |
|    15 | Duan Yu       |  19 | M      |       4 |      NULL |
|    16 | Xu Zhu        |  21 | M      |       1 |      NULL |
|    17 | Lin Chong     |  25 | M      |       4 |      NULL |
|    18 | Hua Rong      |  23 | M      |       7 |      NULL |
|    19 | Xue Baochai   |  18 | F      |       6 |      NULL |
|    20 | Diao Chan     |  19 | F      |       7 |      NULL |
|    21 | Huang Yueying |  22 | F      |       6 |      NULL |
|    22 | Xiao Qiao     |  20 | F      |       1 |      NULL |
|    23 | Ma Chao       |  23 | M      |       4 |      NULL |
|    24 | Xu Xian       |  27 | M      |    NULL |      NULL |
|    25 | Sun Dasheng   | 100 | M      |    NULL |      NULL |
|    26 | laobai        |  30 | M      |       7 |         2 |
+-------+---------------+-----+--------+---------+-----------+

二、Xtrabackup + InnoDB == 完全热备 + 增量备份

1、修改配置文件

[root@centos7 backup]#vim /etc/my.cnf[mysqld]
log_bin                                   # 开启二进制
datadir=/var/lib/mysql                    # 指定数据库目录
socket=/var/lib/mysql/mysql.sock
innodb_file_per_table                     # 每个数据库和表都是独立文件
skip_name_resolve=ON                      # 不做反向名词解析                                                                        

2、完全备份

[root@centos7 ~]#innobackupex --user=root /backup/   # 这里省略了密码

3、完全备份数据库,将备份数据复制到其他主机 并整理数据

[root@centos7 backup]#scp -r /backup/ 192.168.95.3:/                     #将完全备份复制到远程主机上 ,由于备份的是文件夹,要加 -r

[root@laobai ~#innobackupex --apply-log /backup/2018-06-17_23-05-18/     # 在远程主机整理数据,将已经提交的事物redo ,未提交的事物撤销操作

4、清空默认安装路径下的文件,重启服务,查看数据库,发现数据库只有默认的几个。

[root@laobai ~#rm -rf /var/lin/mysql/*[root@laobai ~#rm -rf /data/mysqldb/*     #centos6 的系统删除路径

MariaDB [(none)]> show databases;
  +--------------------+
  | Database |
  +--------------------+
  | information_schema |
  | laobai |
  | mysql |
  | performance_schema |
  +--------------------+
  4 rows in set (0.00 sec)

5、停止mysql服务 ,开始整理数据(将已经提交的事物 redo,未提交的事物撤销)

[root@laobai ~#innobackupex --apply-log /backup/2018-06-17_23-05-18/     #整理数据

6、将整理过后的数据复制到默认的数据库目录内 ,并给与所有者和所有组权限。

[root@laobai /data/mysqldb#innobackupex --copy-back /backup/2018-06-17_23-05-18/

[root@laobai /data/mysqldb#chown -R mysql.mysql /data/mysqldb/
  [root@laobai /data/mysqldb#ll /data/mysqldb/

7、重启数据库服务,检查数据库 ,发现已经还原

[root@laobai /data/mysqldb#service mysqld startMariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| hellodb            |
| information_schema |
| laobai             |
| mysql              |
| performance_schema |
+--------------------+

 三、完全热备+增量备份和还原

1、完全备份

[root@centos7 ~]#innobackupex --user=root /backup/     # 这里省略了密码

2、修改数据

MariaDB [(none)]> create database hei;   #创建一个数据库

3、创建增量备份的目录 ,完成第一次增量备份

[root@centos7 ~]#mkdir /backup/inc{1,2}

[root@centos7 ~]#innobackupex --incremental /backup/inc1/ --incremental-basedir=/backup/2018-06-17_23-05-18/

4、接着我们又对数据进行修改

MariaDB [hellodb]> insert students values (27,'mht',45,'M',4,5);   #在students表了增加一条数据
MariaDB [(none)]> drop database bai;                               #删除一个数据库

5、第二次增量备份

[root@centos7 ~]#innobackupex --incremental /backup/inc2/ --incremental-basedir=/backup/inc1/2018-06-18_18-04-17/

6、备份到远程主机

切换到远程主机

[root@laobai ~]#rm -rf /backup/    # 清空原有备份文件
[root@laobai ~]#rm -rf /var/lib/mysql/*   #清空原有数据库文件
[root@laobai ~]#service mysqld stop     # 停止数据库服务
Stopping mysqld:                                           [  OK  ][root@centos7 ~]#scp -r /backup/ 192.168.95.3:/   #在原主机将备份文件拷贝至远程主机

7、恢复

[root@laobai /backup]#innobackupex --apply-log --redo-only /backup/2018-06-17_23-05-18/   #整理完全备份的数据,将已提交的事物日志整合到数据库文件内,保留未提交事物;所以一定要记得加"--redo-only"选项

[root@laobai /backup]#innobackupex --apply-log --redo-only /backup/2018-06-17_23-05-18/ --incremental-dir=/backup/inc1/2018-06-18_18-04-17/   #在完全备份的基础上将增量备份导入到一块,这里是最新的增量备份

[root@laobai /backup]#innobackupex --apply-log --redo-only /backup/2018-06-17_23-05-18/ --incremental-dir=/backup/inc2/2018-06-18_20-15-24/   #将第二次增量备份整合到一块

8、复制数据库到默认目录内,并给与mysql权限

[root@laobai ~]#innobackupex --copy-back /backup/2018-06-18_22-14-17/   [root@laobai ~]#chown -R mysql.mysql /var/lib/mysql/*
[root@laobai ~]#service mysqld restart
Stopping mysqld:                                           [  OK  ]
Starting mysqld:                                           [  OK  ]

9、测试是否恢复成功

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hei                |   #第一次新建的hei已经恢复
| hellodb            |
| laobai             |
| mysql              |
| performance_schema |
+--------------------+

mysql> select * from students;|    19 | Xue Baochai   |  18 | F      |       6 |      NULL |
|    20 | Diao Chan     |  19 | F      |       7 |      NULL |
|    21 | Huang Yueying |  22 | F      |       6 |      NULL |
|    22 | Xiao Qiao     |  20 | F      |       1 |      NULL |
|    23 | Ma Chao       |  23 | M      |       4 |      NULL |
|    24 | Xu Xian       |  27 | M      |    NULL |      NULL |
|    25 | Sun Dasheng   | 100 | M      |    NULL |      NULL |
|    27 | mht           |  45 | M      |       4 |         5 |   #第二次插入的数据也恢复了
+-------+---------------+-----+--------+---------+-----------+

四、使用Xtrabackup实现表单备份(必须在mariadb12.15版本才能使用)

1、备份单表

~]# innobackupex --include="testdb.testlog" /backup  #备份表数据
~]# mysql -e 'SHOW CREATE TABLE testdb.testlog' > /backup/desc_testdb_testlog.sql  #备份表空间
~]# mysql -e 'DROP TABLE testdb.testlog'  #模拟故障,删除testlog表

 

​ 2、还原单表

~]# innobackupex --apply-log --export /backup/2018-06-14_17-47-02/  #整理表数据
~]# vim /backup/desc_testdb_testlog.sql  #编辑创建表空间的语句,删除以下字段Table   Create Tabletestlog
~]# mysql testdb < /backup/desc_testdb_testlog.sql  #导入表空间
~]# mysql testdb -e 'DESC testlog'  #查看是否导入成功
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| id    | int(11)  | NO   | PRI | NULL    | auto_increment |
| name  | char(30) | YES  |     | NULL    |                |
| age   | int(11)  | YES  |     | 20      |                |
+-------+----------+------+-----+---------+----------------+
~]# mysql -e 'ALTER TABLE testdb.testlog DISCARD TABLESPACE'  #清除表空间
~]# cd /backup/2018-06-14_17-47-02/testdb/
testdb]# cp testlog.cfg testlog.exp testlog.ibd /var/lib/mysql/testdb/  #将表数据复制到库目录
~]# chown -R mysql:mysql /var/lib/mysql/testdb/  #修改所属者和所属组
~]# mysql -e 'ALTER TABLE testdb.testlog IMPORT TABLESPACE'  #导入表空间

 

转载于:https://www.cnblogs.com/huxiaojun/p/9193806.html

Linux九阴真经之九阴白骨爪残卷14(备份和恢复)相关推荐

  1. Linux九阴真经之九阴白骨爪残卷13(LVM的备份还原,恢复最新状态)

    一.备份策略 1.备份的类型 类型1: 热备份:读写不受影响(MyISAM不支持热备,InnoDB支持热备) 温备份:仅可以执行读操作 冷备份:离线备份,读写操作均中止 类型2: 物理备份:复制数据文 ...

  2. Linux九阴真经之九阴白骨爪残卷2(SSH)

    SSH ssh:安全的远程登录 两种方式的用户登录认证 基于passwork 基于key 客户端 常见的客户端工具有:Windows版的putty.securecrt.xshell:linux中有ss ...

  3. Linux九阴真经之九阴白骨爪残卷12(日志功能)

    一.事务日志 transaction log:事务型存储引擎自行管理和使用 在一个事务提交后还没有存到磁盘的情况下会记录到事务日志,这个时候如果系统断电,再次开机后会自动将已提交的事务重做(redo ...

  4. Linux九阴真经之九阴白骨爪残卷15

    一.MySQL复制相关概念 1.主从复制:主节点将数据同步到多个从节点 2.级联复制:主节点将数据同步到一个从节点,其他的从节点在向从节点复制数据 3.同步复制:将数据从主节点全部同步到从节点时才返回 ...

  5. Linux九阴真经之九阴白骨爪残卷7(Mariadb的三种安装方法)

    Mariadb 的安装方法 一.yum安装 二.编译安装 三.二进制安装 一.yum安装方法 1.yum直接安装,也可以登录官网,指定新版(10.2)安装 https://downloads.mari ...

  6. Linux九阴真经之九阴白骨爪残卷3(自动化运维之系统安装)

    安装程序 CentOS系统安装 系统启动流程: bootloader-->kernel(initramfs)-->rootfs-->/sbin/init anaconda: 系统安装 ...

  7. Linux九阴真经之九阴白骨爪残卷11(并发访问控制和事务Transactions)

    一.并发访问控制 实现的并发访问的控制技术是基于锁: 锁分为表级锁和行级锁,MyISAM存储引擎不支持行级锁:InnoDB支持表级锁和行级锁: 锁的分类有读锁和写锁,读锁也被称为共享锁,加读锁的时候其 ...

  8. Linux九阴真经之九阴白骨爪残卷4(自动化运维之ansible用法一)

    ansible是什么?   ansible是什么? 它是一个配置管理工具,也是一个自动化运维工具. ansible能做什么? ansible 可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工 ...

  9. Linux九阴真经之九阴白骨爪残卷5(ansible用法二之Playbook和YAML语法)

    playbook是由一个或多个"play"组成的列表 play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色.从根本上来讲,所谓task无 ...

最新文章

  1. 如何利用计算机计算天数,计算机如何计算两个日期之间的天数
  2. [BZOJ 2038][2009国家集训队]小Z的袜子(hose)(莫队)
  3. 单例设计模式介绍||单例设计模式八种方式——1) 饿汉式(静态常量) 2) 饿汉式(静态代码块) 3) 懒汉式(线程不安全) 4) 懒汉式(线程安全,同步方法)
  4. linux uid 内核,Linux内核学习笔记: uid之ruid,euid,suid
  5. boost::math模块使用根查找的示例
  6. cpu核心数的线程数
  7. ObjectFactory对象工厂类
  8. 无规则弹窗自动点击插件_vscode 插件会了吧,英语不好的赶紧下载 自动分析源码中的陌生单词、点击朗读单词...
  9. 渲染上下文Rendering Context
  10. bzoj1639[Usaco2007 Mar]Monthly Expense 月度开支*
  11. xss绕过字符过滤_XSS绕过实战练习
  12. SQLite数据库损坏修复
  13. jsp连接Sql Server 2000数据库
  14. UEditor 百度Web编辑器 - JSP版本的使用
  15. verilog教程——initial语句和always语句
  16. VS2008下easyMule-VeryCD源代码的编译
  17. 360搜索核心算法,被K后如何恢复?
  18. postgres 判断null_postgresql基础:null的那些坑
  19. 用angular Material 做统计表格
  20. opencv 识别长方形_使用OpenCV检测图像中的矩形

热门文章

  1. 天之痕——Tacke竹桑
  2. 大行bya412和java513_实情爆料大行bya412真的好吗?怎么样呢?老司机指教诉说
  3. 一觉醒来钱没啦!短信验证码真的安全么
  4. python 本月天数
  5. linux服务器有电信和网通,linux双线路双ip,设置电信和网通走不同的路由。
  6. 使用CEGUI读取Torchlight(火炬之光)的UI资源
  7. 分享本周所学——Unreal Engine 5(UE5/虚幻引擎5)安装以及创建项目的常见问题
  8. 自然语言处理NLP快速入门
  9. 微服务监控中心springboot-admin 配置登录密码
  10. Linux硬盘分区步骤详解