备份

一、关于备份:

      备份的原因:丢,删

    备份目标:数据的一致性,服务的可用性

    备份技术: 

  1. 物理备份/冷备

不能恢复不同的mysql版本

优点拷贝数据快,缺点是服务需要停止

     2. 逻辑备份/热备

备份是建库建表插入等操作

速率较低

     备份种类:

  1. 完全备份:完整性
  2. 增量备份:上一次的增量
  3. 差异备份:完全备份的增量

  备份准备:安装percona需要的mysql

  1. 若已经安装数据库5.7

         防止与percona包冲突,安装插件

         #yum  -y  install  mysql-community-lib-compat    

         进入percona官网下载percona包

         官网网址:http://www.percona.com

        备份

备份

备份

备份

YUM安装percona-xtrabackup:yum -y install percona-xtrabackup-24.x86_64

查询安装结果:rpm -ql percona-xtrabackup-24

若是上传percona压缩包,解压压缩包,进入解压文件中,#yum  -y   install  *

  1. 未安装数据库或者安装是8.0版本数据库

mysql官方源:yum install -y  https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm

yum工具:yum install -y yum-utils

查看mysql可用版本:yum repolist all | grep mysql

禁用80:yum-config-manager --disable mysql80-community

启用57:yum-config-manager --enable mysql57-community

安装数据库包:yum  install mysql-community-libs-compat -y(避免安装percona包出错)

        同上安装percona包

     打开二进制日志   vim  /etc/my.cnf

                 Log_bin

                 Server-id=2

      完全备份:

1.连接数据库开始备份

#innobackupex   --user=root  --password=’[email protected]’  /xtrabackup/full

#ls  /xtrabackup/full    查看备份目录

保证数据库中有数据

2.停止数据库systemctl  stop  mysqld

  模拟破坏:rm  -rf  /var/lib/mysql/*

           #rm  -rf  /var/log/mysqld.log

  查看:ls  /var/lib/mysql

3.还原:

生成回滚文件:innobackupex  --apply-log  /xtrabackup/full/生成的文件

恢复文件:innobackupex     --copy-back  /xtrabackup/full/生成的文件

4.登录验证

   #ls  /var/lib/mysql   查看会有内容

   #chown  -R     mysql.mysql   /var/lib/mysql

   #systemctl  restart    mysqld

   #mysql  -uroot  -p‘[email protected]

        增量备份

  准备工作:使用指定数据库

#create  database  testdb

#use   testdb

#create  table  test  (id  int)

#insert  into  testdb.test  values(1)

  1. 首先进行完整备份(备份周一)

删除之前的备份文件,避免混淆

 #rm  -rf  /xtrabackup/*

#date  09010000

#innobackupex   --user=root  --password=’[email protected]’  /xtrabackup

  1. 备份周二

#date  09020000

#mysql  -uroot  -p’[email protected]’  -e “insert   into  testdb.test   values(2)”

#innobackupex   --user=root   --password=’[email protected]’  --incremental  /xtrabackup/           --incremental-basedir=/xtrabackup/周一备份的文件

  1. 备份周三

#date   09030000

#mysql  -uroot  -p’[email protected]’  -e “insert   into  testdb.test   values(3)”

#innobackupex   --user=root   --password=’[email protected]’  --incremental  /xtrabackup/           --incremental-basedir=/xtrabackup/周二备份的文件

  1. 查看生成的文件

#ls  /xtrabackup

       增量恢复流程

  1. 停止数据库  #systemctl  stop  mysqld
  2. 清理环境#rm  -rf  /var/lib/mysql/*
  3. 生成回滚日志(一次性恢复周一到周三)

周一:innobackupex  --apply-log  --redo-only  /xtrabackup/周一备份文件

周二:innobackup  --apply-log  --redo-only     /xtrabackup/周一备份文件

      --incremental-dir=/xtrabackup/周二备份文件

周三:innobackup  --apply-log  --redo-only   /xrabackup/周一备份的文件

      --incremental-dir=/xtrabackup/周三备份的文件

          恢复周一即可

            #innobackupex  --copy-back   /xtrabackup/周一的备份文件

          查看#ls  /var/lib/mysql

              #chown  -R  mysql.mysql   /var/lib/mysql

              #sysemctl   restart  mysqld

              #mysql  -uroot  -p’[email protected]

            差异备份

    备份:周一:完全备份

          周二:基于周一备份

          周三:基于周一备份

生成回滚日志:

      周一:innobackup  --apply-log  --redo-only  /xtrabackup/周一备份文件

      周三:innobackup  --apply-log  --redo-only  /xtrabackup/周一备份文件

           --incremental-dir=/xtrabackup/周三文件

 恢复周一:

#innobackupex  --copy-back   /xtrabackup/周一的文件

周三的信息即可恢复

 

 

 

 

 

 

                                                                         mysqldump和binlog

1、语法格式:mysqldump -h 服务器  -u  用户名  -p密码  数据库名> 备份文件名

   备份实战

      准备两套root密码:[email protected]

                         [email protected]

      创造新库test,库里创造新表t1,插入数据1,2,3

  #create  database  test;

#create  table  test.t1   (id  int);

#insert  into test.t1   values  (1),(2),(3) ;

   执行备份

#mkdir  /backup

#mysqldump  -uroot  -p’[email protected]

 --all-databases    所有的数据库

--single-transaction    innodb 一致性,服务性

--master-data=2       该选项将会记录binlog的日志位置与文件名并追加到文件中,或添加注释

--flush-logs       备份之前刷新日志,截断日志。备份之后新binlog。

>/backup/`date  +%F-%H`-mysq-all.sql     

锁表机制:1、mysqldump  在备份每个数据的时候先把表的写功能关闭,(加锁),保持读功能  2、mysqldump  快速拷贝数据表以后再把写功能打开

  恢复实战

  1. 备份二进制日志

cp   /var/lib/mysql/*bin*   ~

  1. 停止数据库

Systemctl  stop  mysqld

  1. 清理环境

rm  -rf  /var/lib/mysqld

  1. 启动数据库

#systemctl  start  mysqld

  1. 过滤密码

#grep  password   /var/log/mysqld.log   有临时密码

#mysqladmin  -uroot  -p’临时的密码’    password   ’[email protected]

  1. mysql  恢复数据

mysql  -uroot  -p’[email protected]  <  /backup/备份文件

mysql  -uroot  -p’[email protected]’  -e  ‘flush   privileges’

     mysql  -uroot  -p’[email protected]’  会发现进不去数据库,密码恢复为原密码

  1. 二进制日志恢复(备份点到灾难点

观察二进制截取记录(第22行)-------查看开始位置节点

  #vim  /backup/备份文件

  #mysqlbinlog   localhost-bin.000002  localhost-bin.000003 …… 

--start-position=154   |  mysql  -p”[email protected]

思考误删除文件

#mysqlbinlog  localhost-bin.000004   localhost-bin.000005 ……  >1.txt

#vim   1.txt    删除1.txt中不需要的at

#cat  1.txt   |   mysql  -p”[email protected]