设为首页 收藏本站
查看: 1949|回复: 0

[经验分享] [Linux] PHP程序员玩转Linux系列-备份还原MySQL

[复制链接]

尚未签到

发表于 2017-12-30 20:56:16 | 显示全部楼层 |阅读模式
  1.PHP程序员玩转Linux系列-怎么安装使用CentOS
  2.PHP程序员玩转Linux系列-lnmp环境的搭建
  3.PHP程序员玩转Linux系列-搭建FTP代码开发环境
  前几天有个新闻,说是gitlab的工程师把数据文件给误删了,搞了个大事件,很多人都去围观了.备份工作应该在最开始的时候就要做,否则就会失去最佳时机,为了保证我的数据是安全的,因此我要搞备份了.备份分为逻辑备份和物理备份,逻辑备份是导sql,物理备份是基于文件的,这两种我都搞一下.
  开启binlog
  首先第一件事是打开binlog日志,编辑mysql配置文件开启一下,默认是关闭的.编辑 /etc/my.cnf , log-bin=mysqlbinlog =号后面的是binlog日志的名字,默认生成在数据目录里面,重启一下mysql服务 , service mysqld restart
DSC0000.png

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

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

#建库  

create database entmail charset=utf8;  
#建表,存储引擎选用innodb
  

create table user(>
#插记录  

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

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

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

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

DSC0002.png

  小数据量使用mysqldump逻辑备份
  第一想到的备份方式是使用mysqldump,导出sql语句,恢复的时候就再次导入sql语句.
  针对我的数据库,用户名root 密码空,我放sql文件的位置是/home/shihan1/mysql/sqls/ ,备份所有数据库, 我的导出命令是下面这句
  

mysqldump -uroot    

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

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

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

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

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

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

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

  前往这个地址下载rpm包,里面可以选择版本,我最开始选的最新版2.4.6,结果报这个错误:Error: Built-in InnoDB in MySQL 5.1 is not supported in this>  https://www.percona.com/downloads/XtraBackup/
  

#下载rpm  

wget 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
  

  开始备份了
  当前数据:
DSC0007.png

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

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

DSC0008.png

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

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

DSC0009.png

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

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

DSC00010.png

DSC00011.png

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

DSC00013.png

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

DSC00015.png

  下一篇定时执行备份脚本

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-430116-1-1.html 上篇帖子: PHP环境配置与优化(Ubuntu16.04/PHP7) 下篇帖子: 阿里云提示Discuz uc.key泄露导致代码注入漏洞uc.php的解决方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表