MySQLデータベース(mysqldumpを、LVMのスナップショット、バックアップを選択し、xtrabackup)のバックアップと復元

バックアップタイプ:

    ホットバックアップ:読み込みと書き込み影響を受けていません

    ウォームスタンバイ:バックアップを実行するだけ読んで

    コールドバックアップ:オフラインバックアップ、読み取りと書き込みが実行できない、バックアップのシャットダウン

論理的および物理的なバックアップのバックアップ

    物理バックアップ:コピー・データ・ファイル、速いです。

    論理バックアップ:必要に応じて、彼をバック復元するために、テキストファイルにデータをエクスポートします。

フルバックアップ、増分バックアップ、差分バックアップ

    フルバックアップ:バックアップすべてのデータ

    データのバックアップは、最後のフルバックアップ以降に変更されます。増分バックアップを

    差分バックアップ:データを変更した後、最後のバックアップまたは増分バックアップをバックアップします

どのようなバックアップ?データ、設定ファイル、バイナリログ、トランザクションログ、 - +

 

MyISAMテーブル:論理ボリュームと、ホットバックアップをサポートしていません(LV) または唯一のウォームバックアップと。

InnoDBは:ホットバックアップをサポートするいくつかのツールを使用する必要があります(mysqldummp / xtrabackup オープンソースを

 

mysqldumpを:論理バックアップツール、MyISAMテーブル(温度InnoDBの(ホットスペア

mysqlhotcopy:物理バックアップツール、バックアップ暖かい/ コールドバックアップ

CP:コールドバックアップ

LV:論理ボリュームのスナップショット機能、ほとんどのホットバックアップ

   

 

mysqldumpをバックアップ

原理:一括挿入文の挿入のためのテーブル全体のデータのバックアップ

バックアップデータは、保護措置の前に行う必要があります

:同期するためのハードディスク、ロックテーブルにバッファメモリ内の1、データテーブルと同一面にリードロック

図2に示すように、ロックを解除する:表のUNLOCK

3、近いバイナリログ:SE T SQL_LOG_BIN = 0。

4、ローリングログ:FLUSH LOGS。

  コマンドオプション:

            --masterデータ= {0 | 1 | 2}

              0:バイナリログファイルとそのパスを記録しないでください。

              1:へchnageマスター記録された位置は、回復のために直接使用可能なサーバから出発します

              2:へchnageマスター通常、デフォルトはコメントしているように記録された位置、

 

Ionndbホットバックアップ

               トランザクション---単一--->ホットスタンバイ開始点

               データベース---すべて  --->すべてのライブラリをバックアップします

               ライブラリ名、ライブラリ名--databases  --->バックアップ指定のライブラリを

 

MyISAMのウォームスタンバイ

   すべての-tabls ---ロック  温度を実行する--->バックアップ

   テーブルは---ロック    ---> 1つのテーブルのみをバックアップします

バックアップライブラリまたはテーブル

[ルート@ PC2〜]#mysqldumpを-uroot -p jiaowu    jij  > /ルート/ jiaowu.sql            

                关键字      选项     库名    表名      导出的路径     备份后的文件名

还原库 或者表

还原之前必须得先创建一个新库(sun)

[root@pc2 ~]# mysql  -uroot  -p  -hlocalhost  sun          <           biao.sql ;

                                       指定库名   导入的路径     备份的文件名

备份策略

每周完全备份+每日增量备份

完全备份:mysqldump

增量备份:备份二进制文件文件(备份之前flush  logs)

 

当我们把整所有库都删掉时,要先去初始化数据库

若启动不起来:killall   mysqld

 

逻辑备份

  1、浮点数据丢失精度

  2、备份出的数据更占用存储空间,压缩后可 大大节省空间

  3、不适合对大数据做完全备份

select备份

备份:select   *   into   outfile  '/tmp/ss.txt'     from   courses;

还原的时候注意:要恢复的表格式要事先创建好,然后才能还原。

还原  load  data  infile  '/tmp/sss.txt'  into  table   表名

使用LVM快照进行数据库备份

set  sql_log_bin=0;  --->关闭记录二进制文件,开启=1

show  master  status; --->查看当前二进制日志

SHOW BINLOG  EVENTS  IN  '日志名'; --->查看二进制日志中的事件

 

 

前提:

1、数据文件在逻辑卷上

2、此逻辑卷所在卷组必须有足够的空间够快照卷使用

3、数据文件和事务日志要在同一个逻辑卷中

 

过程

1、启动一个事务:start  transaction;

2、在一个表中插入数据:insert into tutors (Tname) values ('stu001');

3、提交事务:commit;

4、刷新表并且给所有表加锁:flush  tables  with  read  lock;  并且执行一次flush  logs,滚动日志

5、通过另外一个终端保留二进制日志文件及相关位置信息

   mysql  -urooot  -p   -hlocalhost   -e  'show master  status\G'  > /路径/master.info

6、创建快照卷

    lvcreate   -L 大小 -s  -p  -r  -n名称  lv名称    卷组路径

7、释放锁  mysql>  unlock  tables;

8、挂载快照卷,备份

mount  、  cp  -a

9、删除快照卷

10、增量备份二进制日志

 

 

二进制日志相关的几个选项

 

若进不去mysql字符界面:

[client]

socket=/tmp/mysql.sock

 

xtrabackup数据库备份

下载xtrabackup这个工具:www.percona.com

安装之前会有依赖包:libev-4.15-1.el6.rf.i686.rpm

          perl-DBD-MySQL

使用rpm安装xtrabackup rpm -ivh percona-xtrabackup-2.3.4-1.el6.i686.rpm

 

xtrabackup  

            --defaults-file=     //mysql主配置文件

            --user=root           //mysql 用户

            --password='oracle'    //mysql密码

            --socket=/var/lib/mysql/mysql.sock /data/mysql/backup/full     //mysqlsock文件,可选!

备份

innobackupex  --user=root   /usr   备份整个数据库,备份文件放在/usr/下面

 备份完成之后,他会在/usr/目录下创建一个以当前时间命令的文件夹!

在这个文件夹里面都有

   xtrabackup_binlog_info:二进制文件信息

   xtrabackup_logfile :纯数据文件,

   xtrabackup_checkpoints :检查点,

   backup-my.cnf :备份命令用到的配置选项信息

 

现在模拟mysql数据库损坏,service  mysqld    stop   ,然后把/mydata/data目录下的所有数据删除!

 

在备份之后需要做一些准备操作,在能进行还原

1、将那些已经提交的事务同步到数据文件,从日志文件同步到数据文件。

2、将那些尚未提交的事务给他做回滚

 

使用--apply-log实现回滚,将那些已经提交的事务同步到数据文件

准备操作

innobackupex   --appli-log   /usr/2016-05-16_16-57-49/

  关键字         选项       指定备份目录

当出现completed OK时,你的准备操作已经完成!

当准备操作完成之后又出现新的数据怎么办?

做即时点还原

首先在mysql中做滚动日志,flush  logs

然后把数据目录中的二进制文件读取出来拷贝到另一个地方,以后可以拿来用就可以了!

cp  mysql-bin.000005    /root/   (当前位置在/mydata/data)

 

还原

还原前要保证数据目录中必须是空的!

要想在一个完全备份中恢复数据,只需要使用--copy-back

innobackupex   --copy-back    /usr/2016-05-16_16-57-49/

                选项            备份文件路径

当出现completed  OK!时,还原成功!

然后修改数据目录的权限  chown  -R  mysql:mysql   /mydata/data/ 

然后再进行即时还原,把我们原先cp出去的那个二进制日志文件制作成sql脚本,导入到mysql中!把mysql还原到崩溃的那一刻。

找到cp出去的那个二进制日志文件,读取那个文件并保存为sql脚本

mysqlbinlog  /tmp/mysql-bin.000002    >  /tmp/sd.sql

进入mysql页面中:

set sql_log_bin=0

source  /tmp/sd.sql;  :执行这个cp出去的sql脚本。

set sql_log__bin=1; :还原回设置

 

这就是xtrabackup +二进制日志进行备份!

 

xtrabackup支持对Innodb存储引擎做增量备份。

 

使用xtrabackup实现增量备份

先进行一次完全备份!

要想实现增量备份,加一个选项 --incermental-dir

第一次增量备份:innobackupex  --incremental   /存放路径   --incremental-basedir  完全备份文件路径

第二次增量备份:innobackupex  --incremental   /存放路径   --incremental-basedir  上一次增量备份文件的路径

 

准备操作!

innobackupex  --apply-log  --redo-only   完全备份文件夹位置

对第一次增量备份合并到完全备份中去

innobackupex  --apply-log   --redo-only  指定完全备份文件位置   --incremental-dir=第一次增量备份文件位置

对第二次增量本分合并到完全备份中去

innobackupex  --apply-log  --redo-only   指定完全备份文件位置   --incremental-dir=第二次增量备份文件位置

现在还原的时候,只还原完全备份就可以了,因为,所有的redo操作都已经合并到完全备份中去了。

使用xtrabackup实现增量备份还原

破坏mysql,把数据目录中的文件都删了!

innobackupex   --copy-back   指定完全备份位置

おすすめ

転載: www.cnblogs.com/linux-s/p/11290043.html