zoukankan      html  css  js  c++  java
  • Mysql1.5(binlog增量备份与恢复,innobackupex)

    目录:一,增量备份与恢复

            二,mysql主从同步

    一增量备份与增量恢复:

    1启用Mysql服务的binlog日志文件,实现对数据的实时增量备份

         (1)binlog日志介绍

         (2)启用binlog日志

         (3)手动生成新的binlog日志文件

         (4)删除已有的binlog日志文件

         (5)使用binlog日志恢复数据

    (1)binlog日志介绍:

    mysql数据库服务日志文件的一种,记录用户连接

    数据库服务器之后,执行的除查询之外的sql命令.

    (2)启用binlog日志:

    1,vim  /etc/my.cnf  (配置主配置文件)

    [mysqld]

    server_id=51 //定义主机编号
    log_bin     //启动binlog日志
    binlog_format="mixed"   //定义日志记录格式
    记录格式:statement:记录每条修改数据的sql命令

                    row :不记录sql语句安全上下文,仅保存哪条记录被修改
                    mixed:以上两者的混合,记录sql命令并且记录安全上下文,和被修改的记录
    2, systemctl restart mysqld  (重起服务)

    日志文件默认的存储位置:

    cd /var/lib/mysql/ 

    主机名-bin.index  日志索引文件(记录当前已有的binlog日志文件名)

    可以用cat查看它

    主机名-bin.编号 记录sql命令的日志文件(里面存放的是二进制的执行码)

    查看方式:

    mysqlbinlog  [选项]   mysql51-bin.000001 

    mysqlbinlog mysql51-bin.000001  | grep -i insert 

    选项有:

    --start-datetime="yyyy-mm-dd hh:mm:ss"  //开始日期时间

    --stop-datetime="yyyy-mm-dd hh:mm:ss" //结束日期时间

    --start-position=数字   --stop-position=数字

    定义日志文件名字存储位置:

    1,mkdir   /logdir   ; chown  mysql  /logidr

    2,vim  /etc/my.cnf 

    [mysqld]
    server_id=51
    log_bin="/logdir/hcy"
    binlog_format="mixed"

    3,systemctl restart mysqld

    注:配置好后原先的日志文件就无效了,新生成的命令都是存在/logdir/下面.

    (3)手动生成新的binlog日志文件

     为什么要手动生成新的binlog的日志文件?

    系统默认的日志文件只有大于500M才会生成新的日志文件,且无法

    对单独库单独表去记录日志文件.

    1,在登陆状态下:

    执行mysql->flush logs;

    2在操作界面下:

    执行mysql  -uroot  -p密码   -e 'flush logs'  

    或者:mysqldump  -uroot -p密码  --fulsh-logs  库名 > xxx.sql 

    3,重起mysqld服务也会新生成日志文件(生产环境下不会用这种)

    (4)删除已有的binlog日志文件

    使用系统命令删除rm(索引文件不会同步更新)

    使用sql命令删除:

    mysql->reset  master;删除所有的日志文件重新初始化日志文件

    mysql->purge  master  logs to "日志名";删除指定编号之前的日志文件

    (5)使用binlog日志恢复数据  的命令格式

    mysqlbinlog  【选项】 日志文件名   | mysql  -uroot  -p密码

    指定偏移量的选项:

    --start-position=数字   --stop-position=数字

    指定时间的选项:

    --start-datetime="yyyy-mm-dd hh:mm:ss"  //开始日期时间

    --stop-datetime="yyyy-mm-dd hh:mm:ss" //结束日期时间

    2,使用第3方软件提供命令innobackupex

    1,找资源安装软件包:

    percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm

    rpm -Uvh 查看依赖包,且安装依赖包,才能安装主包。

    perl-DBD-mysql      perl-Digest-MD5

    libev-4.15-1.el6.rf.x86_64.rpm 

    rpm -qa | grep percona // 列出包名

    rpm -ql percona-xtrabackup-24   //列出软件包提供的文件

    /usr/bin/innobackupex (集成xtrabackup支持innodb 和 xtradb以及myisam)

    /usr/bin/xtrabackup (只能备份innodb,和xtradb

    2,使用innobackupex命令做备份要求?

     (1)确保数据库中的所有库,存储引擎是innodb。

    (2)第一次要进行完全备份,备份3个主库

    以上操作为必须项,主要为软件搭建环境。

    注意:使用innobackupex命令去备份恢复的时候,要求/var/lib/mysql必须为空的 rm -rf /var/lib/mysql/*

    3,innobackupex命令的语法格式

    innobackupex   <选项>

    --user用户   --password 密码  --databases  数据库名列表

    --incremental 目录名   --incremental-basedir  目录名

    innobackupex  --user root --password  123456  --databases="

    mysql  performance_schema  sys  " 备份目录名  --no-timestamp(完全备份)

    4,增量备份

    innobackupex  --user root --password  123456  --databases="

    mysql  performance_schema  sys  gamedb"   --incremental  目录名  

     --incremental-basedir=上一次备份数据存储的目录名  (增量备份)

    注意事项:指定的备份的目录必须为空。

    5,完全恢复

    innobackupex --user root --password 123456 --databases="

    mysql performance_schema sys gamedb" --apply-log --redo-only  完全备份目录

    增量恢复:

     innobackupex --user root --password 123456 --databases="

     mysql performance_schema sys gamedb"   --apply-log  --redo-only   完全备份目录

     --incremental-dir=目录名

    注意:指定目录名的时候要绝对路径,尽量加“”引号。

    日志回滚完成后要先删除清空/var/lib/mysql/目录下的所有文件,然后载拷贝文件。

    并且要chown -R mysql:mysql 给/var/lib/mysql/* 

    拷贝文件:

    innobackupex --user root --password 123456 --databases="

    mysql performance_schema sys gamedb" --copy-back 存储完全备份数据的目录

     

    备份配置文件说明:

    cat xtrabackup_checkpoints (记录sql命令操作序列号)

    backup_type = full-backuped  //备份类型(完全备份)

    from_lsn = 0   //日志序列号

    to_lsn = 4624642  //日志序列号

    last_lsn = 4624651 //日志序列号
    compact = 0
    recover_binlog_info = 0

    xtrabackup_logfile(存放记录sql命令与xtrabackup_checkpoints的序列号对应关系

    库目录:(存放sql命令执行后所产生的数据)

     使用  innobackupex完全备份恢复单个表

    完全备份:

    innobackupex  --user root --password 888888 --databases="gamedb" /gamedball --no-timestamp

    模拟误删:mysql -> drop table 库.表;

    然后创建回来:mysql -> create table 库.表(字段,约束条件)

    注意:要求要和原来的字段,宽度,约束条件一样。

    删除表空间:alter table  库.表  discard  tablespace;

    导出表信息:innobackupex  --user root --password 密码  

    --databases="gamedb.b"  --apply-log --export  /gamedball

    拷贝表信息文件到数据库目录下并修改用户和组:

    cp  /gamedball/gamedb/b.{cfg,exp,ibd}     /var/lib/mysql/gamedb/

    chown  mysql:mysql  /var/lib/mysql/gamedb/b.*

    最后一步骤:导入表空间.!

    import  导入表空间  alter  table 库.表  import   tablespace;

     

        

  • 相关阅读:
    JavaScript知识点总结
    Python错误:ImportError: No module named 'requests'
    The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class
    Html重点知识
    使用Gson中的JsonElement所遇到的坑
    AndroidStudio:The number of method references in a .dex file cannot exceed 64K错误
    使用TextUtils.isEmpty()遇到的坑
    Gson常用方法
    AndroidStudio——java.lang.UnsatisfiedLinkError错误
    RecyclerView点击,移动到中间位置
  • 原文地址:https://www.cnblogs.com/yunsshcy/p/8683446.html
Copyright © 2011-2022 走看看