mysql数据库备份

物理备份

    cp    -rp    /var/lib/mysql/数据库    备份目录/文件名

    tar    -zcvf    xxx.tar.gz    /var/lib/mysql/数据库/*

恢复操作

    cp    -rp    备份目录/文件名    /var/lib/mysql/

    tar    -zxvf    xxx.tar.gz    -C    /var/lib/mysql/数据库名/

逻辑备份(需要验证用户授权)

    mysqldump    -uroot    -p密码    库名    >    路径/xxx.sql

    mysql    -uroot    -p密码    库名    <    路径/xxx.sql

库名表示方式

    -A或--all-databases            所有库

    -数据库名                          单个库

    -数据库名    表名               单张表

    -B   数据库1    数据库2      多个库

例:mysqldump    -uroot    -p    --all-databases    >    alldb.sql

Binlog日志概述

1)采用binlog日志的好处

    记录除查询之外的所有SQL命令

    可用于数据恢复

    配置mysql主从同步的必要条件

 

2)启用binlog

    vim    /etc/my.cnf    

    添加:log_bin[=dir/name]

             server_id=数字            //每个数据库服务器的id都需要不一样

             max_binlog_size=大小(带单位)

             binlog_formart="mixed"        //binlog的记录格式

    binlog记录格式:

        statement:每一条修改数据的sql命令都会记录在binlog日志中(记录修改命令)

        row:不记录sql语句上下文相关信息,仅保存哪条记录被修改(记录修改内容)

        mixed:以上两种格式的混合使用

    systemctl    start    mysqld

3)手动生成新的日志文件(先清空生成一个新的)

    -mysql>flush    logs;

    -mysqldump    --flush-logs

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

4)删除早于指定版本的binlog日志

    mysql>purge    master    logs    to    "binlog文件名"

5)删除所有binlog日志,重建新日志

    mysql>reset    master

6)分析binlog日志(使用mysqlbinlog工具)

    mysqlbinlog    选项    binlog日志文件名(master1.000001)

    常用选项

    --start-datetime="yyyy-mm-dd    hh:mm:ss"

    --stop-datetime="yyyy-mm-dd    hh:mm:ss"    //通过时间戳选择

    --start-position=数字    --stop-position=数字    //通过偏移量选择

利用binlog数据恢复

    思路:使用mysqlbinlog提取历史sql操作

              通过管道交给mysql命令执行

    cd    /var/lib/mysql

    mysqlbinlog    master1.000001    |    mysql    -uroot    -p123456

XtraBackup工具

    特点:备份过程中不锁库表,适合生产环境

    主要组件:

            xtrabackup:C程序,支持InnoDB/XtraDB

            innobackupex:以perl脚本封装xtrabackup,还支持myisam

    安装xtrabackup

innobackup备份/恢复

    物理备份的缺点:跨平台性差,备份时间长,浪费存储空间

    mysqldump缺点:效率较低,备份过程中数据插入和更新操作会被挂起

innobackupex基本选项

    --host                               //主机名

    --user                               //用户名

    --port                               //端口号

    --password                        //密码

    --databases                       //数据库名

    --no-timestamp                  //不使用时间戳命名

    --databases="库名"            //单个库

    --databases="库1  库2"       //多个库

    --databases="库.表"           //单个表

    --redo-only                        //日志合并

    --apply-log                        //准备还原(回滚日志)

        **在数据恢复的时候使用

    --copy-back                       //恢复数据

    --incremental    目录名        //增量备份

    --incremental-basedir=目录名    //增量备份时,指定上一次备份数据存储的目录名

    --incremental-dir=目录名    //准备恢复数据时,指定增量备份数据存储的目录名

    --export                            //导出表信息

    import                              //导入表空间

innobackupex应用

   1.完全备份

    1)将数据库完全备份到/backup

    innobackupex    --user    root    --password    123456    /backup    --no-timestamp

    2)准备恢复数据

    innobackupex    --user    root    --password    123456    --apply-log    /backup

    rm    -rf    /var/lib/mysql/*        //恢复时要求空的库目录

    3)恢复数据

    innobackupex    --user    root    --password    123456    --copy-back    /backup

    4)将数据库目录的属主更改为mysql

    chown    -R    mysql:mysql    /var/lib/mysql

    systemctl    restart    mysqld

    2.增量备份与恢复(必须要有一次备份,通常是完全备份)

    1)完全备份某库

    innobackupex    --user    root    --password    123456    --database="库名"    /fullback    --no-timestamp

    2)第一次增量备份

    innobackupex    --user    root    --password    123456    --incremental    /new1    --incremental-basedir="/fullback"    --no-timestamp    

    3)第二次增量备份

    innobackupex    --user    root    --password    123456    --incremental    /new2    --incremental-basedir="/new1"    --no-timestamp

    4)清空数据库目录

    rm    -rf    /var/lib/mysql/*

    5)恢复准备

    innobackupex    --user    root    --password    123456    --databases="库名列表"    --apply-log    --redo-only    /fullback

    6)恢复增量1

    innobackupex    --user    root    --password    123456    --database="库名列表"    --apply-log    --redo-only    /fullback    --incremental-dir="/new1"

    7) 恢复增量2

    innobackupex    --user    root    --password    123456    --database="库名列表"    --apply-log    --redo-only    /fullback    --incremental-dir="/new2"

    8)恢复数据

    innobackupex    --user    root    --password    123456    --database="库名列表"    --copy-back    /fullback

    9)将恢复的数据库属主更改

    chown    -R    mysql:mysql    /var/lib/mysql/

    systemctl    restart    mysqld

3.在完全备份文件中恢复单个表

    1)导出表信息

    innobackupex    --user    root    --password    123456    --database="gamedb"    /allbak    --no-timestamp

    mysql>drop    table    gamedb.a;        //将表删除

    innobackupex    --user    root    --password    123456    --database="gamedb"    --apply-log    --export    /allbak                //导出表信息

    mysql>create    table    gamedb.a(id    int);    //创建表

    mysql>alter    table    gamedb.a    discard    tablespace;        //删除表空间

    cp    /allbak/gamedb.a/a.{ibd,cfg,exp}    /var/lib/mysql/gamedb    //拷贝表信息文件

    chown    mysql:mysql    /var/lib/mysql/bbsdb/a.*            //修改所有者

    mysql>alter    table    gamedb.a    import    tablespace        //导入表空间,恢复表空间​

    select    *    from    gamedb.a;        //查看原表数据,恢复表成功

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值