Linux九阴真经之九阴白骨爪残卷14(备份和恢复)
备份还原案例
前提: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(备份和恢复)相关推荐
- Linux九阴真经之九阴白骨爪残卷13(LVM的备份还原,恢复最新状态)
一.备份策略 1.备份的类型 类型1: 热备份:读写不受影响(MyISAM不支持热备,InnoDB支持热备) 温备份:仅可以执行读操作 冷备份:离线备份,读写操作均中止 类型2: 物理备份:复制数据文 ...
- Linux九阴真经之九阴白骨爪残卷2(SSH)
SSH ssh:安全的远程登录 两种方式的用户登录认证 基于passwork 基于key 客户端 常见的客户端工具有:Windows版的putty.securecrt.xshell:linux中有ss ...
- Linux九阴真经之九阴白骨爪残卷12(日志功能)
一.事务日志 transaction log:事务型存储引擎自行管理和使用 在一个事务提交后还没有存到磁盘的情况下会记录到事务日志,这个时候如果系统断电,再次开机后会自动将已提交的事务重做(redo ...
- Linux九阴真经之九阴白骨爪残卷15
一.MySQL复制相关概念 1.主从复制:主节点将数据同步到多个从节点 2.级联复制:主节点将数据同步到一个从节点,其他的从节点在向从节点复制数据 3.同步复制:将数据从主节点全部同步到从节点时才返回 ...
- Linux九阴真经之九阴白骨爪残卷7(Mariadb的三种安装方法)
Mariadb 的安装方法 一.yum安装 二.编译安装 三.二进制安装 一.yum安装方法 1.yum直接安装,也可以登录官网,指定新版(10.2)安装 https://downloads.mari ...
- Linux九阴真经之九阴白骨爪残卷3(自动化运维之系统安装)
安装程序 CentOS系统安装 系统启动流程: bootloader-->kernel(initramfs)-->rootfs-->/sbin/init anaconda: 系统安装 ...
- Linux九阴真经之九阴白骨爪残卷11(并发访问控制和事务Transactions)
一.并发访问控制 实现的并发访问的控制技术是基于锁: 锁分为表级锁和行级锁,MyISAM存储引擎不支持行级锁:InnoDB支持表级锁和行级锁: 锁的分类有读锁和写锁,读锁也被称为共享锁,加读锁的时候其 ...
- Linux九阴真经之九阴白骨爪残卷4(自动化运维之ansible用法一)
ansible是什么? ansible是什么? 它是一个配置管理工具,也是一个自动化运维工具. ansible能做什么? ansible 可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工 ...
- Linux九阴真经之九阴白骨爪残卷5(ansible用法二之Playbook和YAML语法)
playbook是由一个或多个"play"组成的列表 play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色.从根本上来讲,所谓task无 ...
最新文章
- 如何利用计算机计算天数,计算机如何计算两个日期之间的天数
- [BZOJ 2038][2009国家集训队]小Z的袜子(hose)(莫队)
- 单例设计模式介绍||单例设计模式八种方式——1) 饿汉式(静态常量) 2) 饿汉式(静态代码块) 3) 懒汉式(线程不安全) 4) 懒汉式(线程安全,同步方法)
- linux uid 内核,Linux内核学习笔记: uid之ruid,euid,suid
- boost::math模块使用根查找的示例
- cpu核心数的线程数
- ObjectFactory对象工厂类
- 无规则弹窗自动点击插件_vscode 插件会了吧,英语不好的赶紧下载 自动分析源码中的陌生单词、点击朗读单词...
- 渲染上下文Rendering Context
- bzoj1639[Usaco2007 Mar]Monthly Expense 月度开支*
- xss绕过字符过滤_XSS绕过实战练习
- SQLite数据库损坏修复
- jsp连接Sql Server 2000数据库
- UEditor 百度Web编辑器 - JSP版本的使用
- verilog教程——initial语句和always语句
- VS2008下easyMule-VeryCD源代码的编译
- 360搜索核心算法,被K后如何恢复?
- postgres 判断null_postgresql基础:null的那些坑
- 用angular Material 做统计表格
- opencv 识别长方形_使用OpenCV检测图像中的矩形