linux php mysql 备份_[Linux] PHP程序员玩转Linux系列-备份还原MySQL_FasterThanMind的博客-程序员秘密

技术标签: linux php mysql 备份  

前几天有个新闻,说是gitlab的工程师把数据文件给误删了,搞了个大事件,很多人都去围观了.备份工作应该在最开始的时候就要做,否则就会失去最佳时机,为了保证我的数据是安全的,因此我要搞备份了.备份分为逻辑备份和物理备份,逻辑备份是导sql,物理备份是基于文件的,这两种我都搞一下.

开启binlog

首先第一件事是打开binlog日志,编辑mysql配置文件开启一下,默认是关闭的.编辑 /etc/my.cnf , log-bin=mysqlbinlog =号后面的是binlog日志的名字,默认生成在数据目录里面,重启一下mysql服务 , service mysqld restart

ef6b68aa16aee5ac269693f450872a7f.png

查看mysql的数据目录 , /var/lib/mysql ,mysqlbinlog.000001等文件就是binlog日志文件.

75063fe870317294211420b64c2c3277.png

添加一些测试数据

建数据库,建表和插入一些记录,用于测试,表的存储引擎选择innodb,因为这个引擎容易测出来问题

#建库create database entmail charset=utf8;

#建表,存储引擎选用innodbcreate table user( id int auto_increment primary key, name varchar(100) not null default '' ) engine=innodb;

#插记录insert into user values(null,'shihan');insert into user values(null,'shihan1');insert into user values(null,'shihan2');insert into user values(null,'shihan3');

d23d3c13428fc4657754235d7eb1a907.png

小数据量使用mysqldump逻辑备份

第一想到的备份方式是使用mysqldump,导出sql语句,恢复的时候就再次导入sql语句.

针对我的数据库,用户名root 密码空,我放sql文件的位置是/home/shihan1/mysql/sqls/ ,备份所有数据库, 我的导出命令是下面这句

mysqldump -uroot --all-databases > /home/shihan1/mysql/sqls/all.sql

此时,我误删了数据库entmail , drop database entmail

837e0d8c5d78c59d4e93780af0ea8727.png

不着急,马上进行恢复,执行以下导入命令,数据库立刻就回来了,注意一个是mysqldump命令,一个是mysql命令

mysql -uroot < /home/shihan1/mysql/sqls/all.sql

为啥不能用拷贝数据目录的方式备份

有的同学会使用直接拷贝数据目录的方式备份,我也测试了一下,实际证明这种方式是不正确的.我用tar命令把数据目录整个打包搬走,然后删除整个数据目录,再搬回来.

c31583c579fdbee34db1f0acc7cd3cef.png

因为我把mysql的那几张用户表啥的都删了,mysql会进行重新初始化

bcb9a447c42e98ad7a2e36e39a5f9738.png

我把数据文件再搬回来,然后进mysql看看,结果是这样的,告诉我user表不存在了,这张表是innodb引擎的,所以不能使用这种方式,幸亏我有前面的逻辑备份,从新导一下,数据又回来了.

mysql -uroot < /home/shihan1/mysql/sqls/all.sql

70c71b6724c68af84db8d1cd5517117f.png

使用第三方软件percona-xtrabackup实现物理备份

可以实现物理备份的软件与很多,mysql也有企业版备份工具,但是貌似是收费的,percona-xtrabackup这个开源软件可以很好的实现全量备份和增量备份.

前往这个地址下载rpm包,里面可以选择版本,我最开始选的最新版2.4.6,结果报这个错误:Error: Built-in InnoDB in MySQL 5.1 is not supported in this release. You can either use Percona XtraBackup 2.0, or upgrade to InnoDB plugin.然后从新下了个2.0.0版是可以的.

https://www.percona.com/downloads/XtraBackup/

#下载rpmwget https://www.percona.com/downloads/XtraBackup/XtraBackup-2.0.0/RPM/rhel6/x86_64/percona-xtrabackup-2.0.0-417.rhel6.x86_64.rpm

#安装rpm

rpm-i percona-xtrabackup-2.0.0-417.rhel6.x86_64.rpm

#安装需要的依赖yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL perl-MD5 rsync libev numactl

开始备份了

当前数据:

acca51ce0299678103c9c4b7ffda48af.png

1. 我先把所有数据全量备份一次,后面那个目录是备份保存的目录,执行完成后出现innobackupex: completed OK!代表成功,生成的备份文件2017-02-24_17-47-55

innobackupex --user=root /home/shihan1/mysql/backups/

2f2b798fca38e8c528d8febc13008620.png

2. 添加几条新数据进去,现在的数据情况

insert into user values(null,'shihan4');

insert into user values(null,'shihan5');

9f7e30140f888eb177b823361ae3a1ea.png

3. 增量备份一次,就多了一个参数--incremental , 增量备份生成的文件是 2017-02-24_17-51-32 , 数据的大小也是不一样的

innobackupex --user=root --incremental /home/shihan1/mysql/backups/

b85e28b9b08d5ecad94a17a5ba498ecc.png

6096d931fc25966cd16697b07e2de766.png

4. 此时发生灾变,我把数据目录给删了!  rm -rf /var/lib/mysql/* ,mysql已经连不上了

00f7735434289b425097473fcdc10855.png

5. 抓紧恢复数据 , 准备全量备份文件 , 合并增量备份文件 , 执行恢复

#准备全量备份文件

innobackupex--apply-log --redo-only /home/shihan1/mysql/backups/2017-02-24_17-47-55/#合并增量备份文件,注意看目录名

#如果有多次增量备份,就多次执行 innobackupex --apply-log --redo-only 增量目录 --incremental-dir 增量目录

innobackupex--apply-log --redo-only /home/shihan1/mysql/backups/2017-02-24_17-47-55/ --incremental-dir /home/shihan1/mysql/backups/2017-02-24_17-51-32/#执行恢复

innobackupex--copy-back /home/shihan1/mysql/backups/2017-02-24_17-47-55

ee5fd44cb0d9f1149352c33c8af85336.png

6. 数据已经回来了,重新修改一下数据文件的属组和属主 chown mysql:mysql -R /var/lib/mysql/* , 重启一下mysql ,数据全部恢复

e924246dcb0ce6f524dd8369904f35bb.png

40dbd7906ce4255aa500314bc0215b83.png

下一篇定时执行备份脚本

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34535286/article/details/113232535

智能推荐

大数据数据仓库-简介_大数据数据仓库简介_wer0735的博客-程序员秘密

人类正从IT时代走向DT时代,数据变得越来越多,其重要性不言而喻,管理大量数据的数据仓库也显得更重要。接下的日子里,本人会根据自己所学的知识和实战经验,编写多年心得与大家一起学习探头。

Velodyne VLP-32C/VLP-16在ROS下的数据获取、显示及录制_I-am-Unique的博客-程序员秘密

“不要急着让生活给予所有的答案,有时我们需要耐心的等待。相信过程,坦然前行,不负生活,生活也必不负你。” 原来人都会离开……愿天堂不再受罪·愿好人一生平安~ 激光雷达可能是短时间内无人驾驶当中最受追捧、不可缺少的传感器了,当然作为Lidar领域的大哥Velodyne,一共有一下几种:单线、4线、16线、32线、64线等,接下来就说一说如何在ROS下初级使用该传感器:...

并发编程——彻底掌握CountDownLatch,CyclicBarrier和Semaphore_山鸡哥w的博客-程序员秘密

这里写目录标题一级目录二级目录三级目录CountDownLatchCyclicBarrier 作用代码实例演示实现原理解析Semaphore代码示例演示一级目录二级目录三级目录CountDownLatch见前一篇:并发编程——一文看尽CountDownLatch原理CyclicBarrier 作用CountDownLatch是某个线程A执行的过程中,等待其他的一个或多个线程全部执行完毕,线程A再继续执行当前的流程,起到一个同步等待的作用。CyclicBarrier(循环壁垒)同样起到一个同步

Android ListView实现上拉到底部的时候自动刷新数据_roll圈圈的博客-程序员秘密

在最近的项目中,为了提高用户的体验,需要实现ListView在滑动到底部的时候进行数据的自动加载,当看到这个需求的时候,我的第一个想法是ListView不是有HeadView和FooterView么,就可以直接拿来用了,最终也的确是用的这个方法,但是在实现的过程中,遇到了很多坑。        首先,先简单写下ListView的FooterView,就是一个简单的一个进度条加上一个文本

HttpSession 和 HttpSession_weixin_34413802的博客-程序员秘密

说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。

随便推点

CentOS 7 部署saltstack服务_shaonbean的博客-程序员秘密

SaltStack 简介Salt,,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯。salt底层采用动态的连接总线, 使其可以用于编配, 远程执行, 配置管理等等.SaltStack 官网:https://saltstack.com/SaltStack 官方文档:https://docs.saltstack.com/e

POI,HSSF,XSSF对excel单元格格式设置_weixin_33800463的博客-程序员秘密

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

hdu 1556 Color the ball (树状数组)_阿柟的小星星的博客-程序员秘密

Problem DescriptionN个气球排成一排,从左到右依次编号为1,2,3….N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽”牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗?Input每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行

计算机科学中最重要的32个算法_计算机科学, 算法_atupal的博客-程序员秘密

计算机科学中最重要的32个算法分类: 经典转载2012-12-26 21:10 431人阅读 评论(5) 收藏 举报英文原址:http://www.risc.jku.at/people/ckoutsch/stuff/e_algorithms.html     奥地利符号计算研究所(Research Institute for Sy

CSS——CSS基础(一篇就够用)_ZeFei-Yin的博客-程序员秘密

最全的CSS基础干活总结一.CSS概述1.什么是css2.作用3.css和html属性的使用原则二.CSS语法规范1.css的使用方式①行内样式,内联样式②内部样式③外部样式2.css的样式特性①继承性②堆叠性③优先级④调整优先级三.基础选择器1.通用选择器2.元素选择器3.ID选择器4.类选择器类选择器的其它用法①.多类选择器②.分类选择器③.类名的定义规范5.群组选择器6.后代选择器7.子代选择器8.伪类选择器9. 选择器权值四.尺寸和边框1.尺寸2.页面中允许设置尺寸的元素有哪些3.溢出处理4.边框①

java 注解实现机制_java干货系列之java注解的实现原理_十七卷的博客-程序员秘密

前言java反射和注解在java里面很重要,但是很多人对这方面的知识理解不是很好,我来说说我自己对java反射和注解的理解,这两块内容本来应该出在一个博客文章里面讲解,但是由于我的java反射说的内容有点小多,然后我就分开将讲解一下。目录注解的概念注解的类别注解用法通过反射获取注解反射注解一起使用拼写SQL语句实战演练注解的概念java注解:比较官方的说法:从JDK5开始,Java增加对元数据的支...

推荐文章

热门文章

相关标签