zoukankan      html  css  js  c++  java
  • 备份和恢复

                                                                    节课   数据备份与恢复

    一数据备份相关概念

    1.1数据备份的目的?数据被误删除或设备损害导致数据丢失,是备份文件恢复数据。

    1.2数据备份方式?

    物理备份:指定备份库和表对应的文件

    51

    cp -r /var/lib/mysql/opt/mysql.bak

    cp -r /var/lib/mysql/bbsdb/opt/bbsdb.bak

    rm -rf /var/lib/mysql/bbsdb

    cp -r /opt/bbsdb.bak/var/lib/mysql/bbsdb

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

    systemctl  restart mysqld

    51 scp /opt/mysql.bak  192.168.4.51:/root/

    52 rm -rf /var/lib/mysql

    cp -r /root/mysql.bak  /var/lib/mysql

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

    systemctl restart mysqld

    逻辑备份:在执行备份命令时,根据备份的库表及数据生成对应的sql命令,把sql存储到指定的文件里。

    1.3数据备份策略?

    完全备份备份所有数据(一张表的所有数据一个库的所有数据一台数据库的所有数据)

    备份新产生数据(差异备份和增量备份都备份新产生的数据)

    差异备份备份自完全备份后,所有新产生的数据。

    增量备份备份自上次备份后,所有新产生的数据。

    1.4工作中如何对数据做备份?

    1.4.1选择备份策略:

    完全备份+差异备份

    完全备份+增量备份

    1.4.2数据备份时间数据服务器访问量少的时候执行备份

    1.4.3数据备份频率根据数据产生量,决定备份频率

    1.4.4备份文件的命名库名-日期.sql

    1.4.5备份文件的存储设置准备独立的存储设备存储备份文件

    1.4.6如何执行备份使用周期性计划任务执行本机脚本

    1.5完全备份+差异备份

    06:00 t1 文件名数据

    1完全10 1.sql 10

    2差异3 2.sql 3

    3 5 3.sql 8

    4 2 4.sql 10

    5 7 5.sql 17

    6 4 6.sql 21

    7差异1 7.sql 22

    完全备份+增量备份

    06:00 t1 文件名数据

    1完全10 1.sql 10

    2增量3 2.sql 3

    3 5 3.sql 5

    4 2 4.sql 2

    5 7 5.sql 7

    6 4 6.sql 4

    7增量1 7.sql 1

    +++++++++++++++++++++++++++++


     .完全备份与完全恢复

    2.1完全备份数据

    ]#mkdir -p /mydatabak

    ]#mysqldump -uroot -p654321 studb > /mydatabak/studb.sql

    ]#mysqldump -uroot -p654321 db3 user3 > /mydatabak/db3-user3.sql

    ]#cat /mydatabak/studb.sql

    ]#cat /mydatabak/db3-user3.sql

    2.3完全恢复数据

    ]#mysql -uroot -p654321 studb < /mydatabak/studb.sql

    ]#mysql -uroot -p654321 db3 < /mydatabak/db3-user3.sql

    2.4使用source命令恢复数据

    mysql>create database bbsdb;

    mysql>use bbsdb;

    mysql>source /mydatabak/studb.sql

    每周一晚上18:00备份studb库的所有数据到本机的/dbbak目录下,备份文件名称要求如下日期_库名.sql

    ]#vim /root/bakstudb.sh

    #!/bin/bash

    day=`date+%F`

    if[!-e/dbbak];then

    mkdir/dbbak

    fi

    Mysqldump -uroot -p654321 studb > /dbbak/${day}_studb.sql

    :wq

    ]#chmod +x /root/bakstudb.sh

    ]#/root/bakstudb.sh

    ]#ls /dbbak/*.sql

    ]#crontab -e

    00 18**1/root/bakstudb.sh &> /dev/null

    :wq

    3.1启动mysql数据库服务的binlog日志文件实现实时增量备份

    3.1.1 binlog日志介绍:是mysql数据库服务日志文件的一种,默认没有启用。记录除查询之外的sql命令。

    查询命令例如:select show desc

    写命令例如:insert update delete create drop

    3.1.2启用binlog日志

    ]#vim /etc/my.cnf

    [mysqld]

    server_id=51

    log-bin

    binlog-format="mixed"

    :wq

    ]#systemctl restart mysqld

    ]#ls /var/lib/mysql/主机名-bin.000001

    ]#cat /var/lib/mysql/主机名-bin.index

    3.1.3查看binlog日志文件内容

    ]#mysqlbinlog  /var/lib/mysql/mysql51-bin.000001

    ****可以自定义binlog日志文件存储的位置和文件名称

    ]#mkdir  /mylog

    ]#chown mysql/mylog

    ]#setenforce 0

    ]#vim /etc/my.cnf

    [mysqld]

    server_id=51

    #log-bin

    log-bin=/mylog/plj

    binlog-format="mixed"

    :wq

    ]#systemctl restart mysqld

    ]#ls /mylog/plj.*

    plj.000001 plj.index

    3.1.4手动生成新的日志文件方法

    *默认日志文件大于500M时自动创建新日志文件

    ]#systemctl restart mysqld

    mysql>flush logs;

    ]#mysql -uroot -p密码-e "flush logs" //外部刷新

    ]#mysqldump -uroot -p密码 --flush-logs库名 > 目录/xx.sql

    3.1.5使用一个新的日志文件记录新创建的webdb库的初始操作。

    mysql>flush logs;

    mysql>create database webdb;create table webdb.a(id int);

    mysql>insert into webdb.a values(100);

    mysql>insert into webdb.a values(101);

    mysql>flush logs;

    删除webdb库,使用binlog日志文件恢复webdb库的数据。

    mysql>drop database webdb;

    3.1.6使用binlog日志恢复数据

    ]#mysqlbinlog  /mylog/plj.000008 | mysql -uroot -p654321

    3.1.7删除已有的binlog日志文件

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

    删除指定日志文件之前的日志文件

    mysql>purge master logs to "plj.000005";

    mysql>reset master ;删除所有的日志文件重新生成第一个日志文件

    mysql>show master status;显示当前正在使用的binlog日志信息

    ]#mysqlbinlog日志文件名;

    3.1.8 binlog日志记录sql命令方式

    记录方式有2种:偏移量、记录sql命令执行的时间

    3.1.9指定偏移量范围选项

    --start-position=偏移量的值

    --stop-position=偏移量的值

    3.1.10指定时间范围选项

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

    --stop-position="yyyy-mm-dd hh:mm:ss"

    ++++++++++++++++++++++++

    3.1.11读取日志文件指定范围内的sql命令恢复数据。

    ]#mysqlbinlog  --start-position=293 --stop-position=1450 plj.000001 | mysql-uroot-p654321

    ++++++++++++++++++++++++++++

    ]#mysqldump -uroot -p654321 --flush-logs db3.user3  > /root/user3.sql

    mysql>insert into db3.user3 values("a","b","c");

    mysql>insert into db3.user3 values("aa","b","c");

    mysql>insert into db3.user3 values("ab","b","c");

    mysql>insert into db3.user3 values("ac","b","c");

    mysql>delete from db3.users;

    mysql>select*from db3.user3;

    ]#mysql -uroot -p654321 db3 < /root/user3.sql

    mysql>select *  from db3.user3;

    ]#mysqlbinlog  --start-position=偏移量的值

     --stop-position=偏移量的值日志文件名 |  

                     mysql-uroot-p654321

    mysql>select * from db3.user3;

    +++++++++++++++++++++++++++++++++


    3.2安装第3方软件提供备份命令,对数据做增量备份

    软件介绍Percona开源软件在线热备不锁表适用于生成环境。

    1安装软件

    ]#rpm-ivh libev-4.15-1.el6.rf.x86_64.rpm

    ]#yum-y install perl-DBD-mysql perl-Digest-MD5

    ]#rpm-ivh percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm

    ]#rpm-ql percona-xtrabackup-24

     

    2提供2个备份命令

    /usr/bin/innobackupex命令集成了命令xtrabackup,所以可以支持MYISAM存储引擎

    /usr/bin/xtrabackup命令仅支持InnoDBXtraDB存储引擎的表

    innobackupex备份命令的使用格式?

    ]#innobackupex<选项>

    ]#man innobackupex

    3常用选项?

    --user用户名

    --password密码

    --databases="库名"

    "库名1库名2"

    "库名.表名"

    --no-timestamp不使用时间戳做备份文件的子目录名

    +++++++++++++++innobackupex完全备份与完全恢复

    ]#innobackupex--user root--password 654321 

            --databases="mysql performance_schema sys   gamedb"/allbak  --no-timestamp

    ++++++++++++++完全恢复

    --copy-back

    ]#rm -rf /var/lib/mysql

    ]#mkdir /var/lib/mysql

    ]#innobackupex --user root --password 654321 --copy-back  /allbak

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

    ]#systemctl restart mysqld

    ]#mysql -uroot -p654321

    mysql>show databases;

    mysql>select *  from gmaedb.t1;

    +++++++++++++++++++++++++++++++++++++++++++


    3.3事务日志文件

    LSN日志序列号

    1增量备份的工作过程?

    每一个备份目录下,都有记录当前目录备份信息的配置文件

    ]#cat备份目录名/xtrabackup_checkpoints(记录备份类型和lsn范围)

    • innobackupex增量备份与恢复

    --incremental目录名#增量备份

    --incremental-basedir=目录名#增量备份时,指定上一次备份文件存储的目录名

    2先要有一次完全备份存放目录/fullbak

    ]#innobackupex--user root--password 654321

    --databases="gamedb mysql performance_schema sys"

    /fullbak --no-timestamp

    3插入新记录,执行增量备份存放目录/new1bak

    • mysql>insert into gamedb.t1 values(8080),(8080);

    ]#innobackupex --user root --password 654321

    --databases="gamedb mysql performance_schema sys"

    --incremental /new1dir --incremental-basedir=/fullbak --no-timestamp

    4插入新记录,执行增量备份存放目录/new2bak

    mysql>insert into gamedb.t1 values(8099),(8099);

    ]#innobackupex --user root --password 654321

    --databases="gamedb mysql performance_schema sys"

    --incremental/new2dir --incremental-basedir=/new1dir --no-timestamp

    增量恢复

    --apply-log准备恢复数据

    --redo-only合并日志

    --incremental-dir=目录名#增量恢复数据时,指定备份目录名称

    --copy-back恢复数据

    5清空数据库目录

    ]#rm -rf  /var/lib/mysql

    ]#mkdir /var/lib/mysql

    6准备恢复数据

    ]#innobackupex  --user root --password 654321 

    --databases="gamedb mysql performance_schema sys" 

    --apply-log  --redo-only  /fullbak

    7合并日志

    ]#innobackupex --user root--password 654321 

    --databases="gamedb mysql performance_schema sys "

    --apply-log --redo-only/fullbak --incremental-dir=/new1dir

    ]#innobackupex --user root --password 654321 

    --databases="gamedb mysql performance_schema sys" 

    --apply-log --redo-only/fullbak --incremental-dir=/new2dir

    8拷贝备份文件到数据库目录

    ]#innobackupex --user root --password 654321 

    --databases="gamedb mysql performance_schema sys" 

    --copy-back  /fullbak

    ]#ls /var/lib/mysql -l

    9修改文件的所有者/mysql

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

    10重启数据库服务

    ]#systemctl restart mysqld

    ]#mysql -uroot -p654321

    使用完全备份文件恢复单个表

    --export导出表信息

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

    mysql>alter table.import tablespace;导入表空间

    1完全备份

    ]#innobackupex --user root --password 654321

    --databases="studb" /allbakstudb  --no-timestamp

    2查看备份目录文件列表

    ]#ls /allbakstudb

    ]#ls /allbakstudb/studb

    3误删除a:mysql>drop table studb.a;

    4使用完全备份文件恢复单个表

    按照备份时的表结构创建删除的表

    create table studb.a(name char(10));

    4.2删除创建表的表空间文件

    mysql>alter table studb.a discard tablespace;

    4.3使用备份文件导出表信息

    ]#innobackupex --user root --password 654321

    --databases="studb" --apply-log --export /allbakstudb

    4.4把导出的表信息文件,拷贝到对应的数据库目录下,并修改所有者和组为mysql

    ]#cp /allbakstudb/studb/a.{cfg,exp,ibd} /var/lib/mysql/studb/

    ]#chown mysql:mysql /var/lib/mysql/studb/a.*

    4.5导入表空间

    mysql>alter table studb.a import tablespace;

    [root@mysql51~]#rm -rf /var/lib/mysql/studb/a.cfg

    [root@mysql51~]#rm -rf /var/lib/mysql/studb/a.exp

    4.6查看记录

    mysql>select*from studb.a;


                                                                           节课    总结

    内容总结

    3.1启动mysql数据库服务的binlog日志文件实现实时增量备份

    3.1.1 binlog日志介绍

    3.1.2启用binlog日志

    3.1.3查看binlog日志文件内容

    3.1.4手动生成新的日志文件方法

    3.1.5删除已有的binlog日志文件

    3.1.6 binlog日志记录sql命令方式

    3.2使用binlog日志恢复数据

    命令格式

    ]#mysqlbinlog日志文件名|mysql-uroot-p密码

    ]#mysqlbinlog[选项]日志文件名|mysql-uroot-p密码

    指定偏移量范围选项

    指定时间范围选项

    3.3安装第3方软件提供备份命令,对数据做增量备份

    软件介绍

    安装软件

    备份命令的使用格式

    完全备份与恢复

    增量备份与恢复

    增量备份的工作过程

    恢复完全备份中的当表

    数据备份

    *************************************************************************

    3.4增量备份与增量恢复

    [root@host50~]#vim /root/databasea.sh

    #!/bin/bash

    day=`date+%F`

    Mysqldump -uroot -p123456 -A > /databak/$day.sql

    [root@host50~]#crontab -e

    */n****/root/databasea.sh& > /dev/null

    1)输出

    [root@host50~]#mysql -uroot -p123456 < /databak/$day.sql

    ************************************************************************

    3.5增量备份

    ****可以自定义binlog日志文件存储的位置和文件名称

    ]#mkdir /mylog

    ]#chown mysql/mylog

    ]#setenforce 0

    ]#vim /etc/my.cnf

    [mysqld]

    server_id=51

    #log-bin

    log-bin=/mylog/plj

    binlog-format="mixed"

    :wq

    ]#systemctl restart mysqld

    ]#ls /mylog/plj.*

    plj.000001 plj.index

    1)改表数据

    mysql>insert into学生表1 values("王者","北京");

    2)查询

    [root@host50 mysql]#mysqlbinlog /mylog/plj.000001 | grep insert

          insert into学生表1 values("王者","北京")

    [root@host50 mysql]#mysqlbinlog  /mylog/plj.000001 | grep use

    **********************************************************************

    3.6恢复:全部数据

    [root@host50 mysql]#mysql -uroot -p123456 < /databak/all.sql

    恢复:更新数据

    mysql>delete from学生表2;

    [root@host50 mysql]#mysqlbinlog  /mylog/plj.000001

    #at 833729

    #180529 16:15:56 server id 50 end_log_pos 833837 CRC32 0xaff31d8b   Query thread_id=20 exec_time=0 error_code=0

    SET TIMESTAMP=1527581756/*!*/;

    delete from学生表2

    /*!*/;

    [root@host50mysql]#mysqlbinlog  --start-position=833729  --stop-position=833837 /mylog/plj.000001 | mysql -uroot -p123456

    **********************************************************************

    3.7增量备份恢复最新数据

    [root@host50~]#ls /mylog/plj.*

    plj.000001 plj.index

    mysql>create database webdb;create table webdb.a(id int);

    mysql>insert into webdb.a values(100);

    mysql>insert into webdb.a values(101);

    mysql>flush logs;

    [root@host50~]#ls  /mylog/plj.*

    plj.000001 plj.000002 plj.index

    [root@host50~]#mysqlbinlog /mylog/plj.000002 | mysql -uroot -p123456

    ***********************************************************************

    在线热备份工具

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

    –由专业组织Percona提供(改进MySQL分支)

    •主要含两个组件

    xtrabackup:C程序,支持InnoDB/XtraDB

    innobackupex:Perl脚本封装xtrabackup,还支持MyISAM

    •物理备份缺点

    –跨平台性差

    –备份时间长、冗余备份、浪费存储空间

    mysqldump备份缺点

    –效率较低,备份和还原速度慢

    –备份过程中,数据插入和更新操作会被挂起增量备份的工作过程?

    1)安装软件包

    [root@host50~]#yum-y install libev-4.15-1.el6.rf.x86_64.rpm

    [root@host50~]#yum -y install    percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm

    •每一个备份目录下,都有记录当前目录备份信息的配置文件

    ]#cat备份目录名/xtrabackup_checkpoints(记录备份类型和lsn范围)

    1.innobackupex完全备份与完全恢复

    [root@host50new1dir]#innobackupex --user root --password 123456  --databases="mysql performance_schema sys user" /fullbak --no-timestamp

    完全恢复

    --copy-back

    ]#rm -rf /var/lib/mysql

    ]#mkdir /var/lib/mysql

    1)合并日志

    [root@host50new1dir]#innobackupex --user root --password 123456  --databases="mysql performance_schema sys user" --apply-log /fullbak

    2)恢复数据

    ]#innobackupex --user root --password 654321 --copy-back /allbak

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

    ]#systemctl restart mysqld

    ]#mysql -uroot -p654321

    mysql>show databases;

    mysql>select * from gmaedb.t1;

    ********************************************************************

    2》.插入新记录,执行增量备份存放目录/new1bak

    innobackupex增量备份与恢复

    --incremental目录名#增量备份

    --incremental-basedir=目录名#增量备份时,指定上一次备份文件存储的目录名

    [root@host50new1dir]#innobackupex --user root --password 123456  --databases="mysql performance_schema sys user"  --incremental/new2dir --incremental-basedir=/new1dir --no-timestamp

    增量恢复

    --apply-log准备恢复数据

    --redo-only合并日志

    --incremental-dir=目录名#增量恢复数据时,指定备份目录名称

    --copy-back恢复数据

    1)删除数据

    ]#rm-rf/var/lib/mysq

    2)准备恢复数据

    [root@host50 new1dir]#innobackupex --user root --password 123456  --databases="mysql performance_schema sysuser"  --apply-log --redo-only /fullbak

    2)合并日志

    [root@host50 new1dir]#innobackupex --user root --password 123456 --databases="mysql performance_schema sys user" --apply-log   --redo-only/fullbak  --incremental-dir=/new1dir

    3)恢复数据

    [root@host50 new1dir]#innobackupex --user root --password 123456 --databases="mysql performance_schema sys user" --copy-back /fullbak

    [root@host50 new1dir]#ls /var/lib/mysql-l

    [root@host50 new1dir]#chown -R mysql:mysql /var/lib/mysql

    [root@host50 new1dir]#systemctl restart mysqld

    [root@host50]#rm -rf /new1dir

    --export导出表信息

    使用完全备份文件恢复单个表

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

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

    1完全备份

    ]#innobackupex --user root --password 654321

    --databases="studb" /allbakstudb --no-timestamp

    2查看备份目录文件列表

    ]#ls /allbakstudb

    ]#ls /allbakstudb/studb

    3误删除a表:mysql>drop table studb.a;

    4使用完全备份文件恢复单个表

    4.1按照备份时的表结构创建删除的表

    create table studb.a(name char(10));

    4.2删除创建表的表空间文件

    mysql>alter table studb.a discard tablespace;

    4.3使用备份文件导出表信息

    ]#innobackupex --user root --password 654321

    --databases="studb" --apply-log --export /allbakstudb

    4.4把导出的表信息文件,拷贝到对应的数据库目录下,并修改所有者和组为mysql

    ]#cp /allbakstudb/studb/a.{cfg,exp,ibd} /var/lib/mysql/studb/

    ]#chown mysql:mysql /var/lib/mysql/studb/a.*

    4.5导入表空间

    mysql>alter table studb.a import tablespace;

    [root@mysql51~]#rm -rf /var/lib/mysql/studb/a.cfg

    [root@mysql51~]#rm -rf /var/lib/mysql/studb/a.exp

    4.6查看记录

    mysql>select * from studb.a;

  • 相关阅读:
    GDB 运行PYTHON 脚本+python 转换GDB调用栈到流程图
    GDB-Dashboard-GDB可视化界面
    使用gdb调试Python进程
    从底层理解Python的执行
    python 用pdb调试
    GDB反向调试 + 指令记录+函数历史记录
    linux 0.11 源码学习+ IO模型
    LINUX系统全部参数 sysctl -a + 网络参数设置
    Linux Kernel 排程機制介紹
    linux 系统调优2
  • 原文地址:https://www.cnblogs.com/qingbai/p/12015149.html
Copyright © 2011-2022 走看看