MySQL逻辑备份

来源:互联网 发布:最新网络对唱歌曲大全 编辑:程序博客网 时间:2024/05/17 08:29
逻辑备份

逻辑备份一般用于增量备份

先看一下差量备份增量备份的区别

差量备份:                差量备份也叫差异备份。    概述: 只记录自上次完整数据库备份(完全备份)后更改的数据(他针对的是上次的完全备份)此完全备份称为“差异基准”。                               差异数据库备份比完整数据库备份更小、更快。这会缩短备份时间,但将增加复杂程度。                对于大型数据库,差异备份的间隔可以比完全备份的间隔更短。这将降低工作丢失风险。 

对于大型数据库,完整数据库备份需要大量磁盘空间。为了节省时间和磁盘空间,

可以在一次完整数据库备份后安排多次差异备份。每次连续的差异数据库备份都大于前一次备份,

这就需要更长的备份时间、还原时间和更大的空间。因此,建议您定期执行新的完整备份以提供新的差异基准。

原则:1. 在每次完整数据库备份后,定期安排差异数据库备份。例如,可以每四小时执行一次差异数据库备份, 对于活动性较高的系统,此频率可以更高。 2. 在确保差异备份不会太大的情况下,定期安排新的完整数据库备份。例如,可以每周备份一次完整数据库。 优点1.如果数据库的某个子集比该数据库的其余部分修改得更为频繁,则差异数据库备份特别有用。   在这些情况下,使用差异数据库备份,您可以频繁执行备份,并且不会产生完整数据库备份的开销。  2.与创建完整备份相比,创建差异备份的速度可能非常快。 差异备份只记录自差异备份所基于的完整备份后更改的数据。 这有助于频繁地进行数据备份,减少数据丢失的风险。但是,在还原差异备份之前,必须先还原其基准。
                 然后再还原基于该完整备份的最新差异备份即可将数据库前滚到创建差异备份的时间,                从差异备份进行还原必然要比从完整备份进行还原需要更多的步骤和时间,因为这需要两个备份文件
3.在完整恢复模式下,使用差异备份可以减少必须还原的日志备份的数量。
    注意:在完整恢复模式下,还必须安排事务日志备份。建议日志备份的频率高于差异数据库备份。有关详细信息,请参阅使用事务日志备份 差异数据库备份策略(简单恢复模式):              在简单恢复模式下,备份之间的工作丢失风险随着时间的推移而增加。下图阐释的备份策略通过使用由差异数据库备份补充的数据库备份,              将减少工作丢失的风险。在第一个数据库备份完成后,会接着进行 3 个差异备份。第三个差异备份已经足够大,              所以下一个备份为完整数据库备份。此数据库备份将生成新的差异基准。                        https://i-msdn.sec.s-msft.com/dynimg/IC69819.gif     
   差异数据库备份策略(完整恢复模式):

  在完整恢复模式和大容量日志恢复模式下,差异数据库备份将最大限度地减少在还原数据库时前滚事务日志备份所需的时间。
差异数据库备份可将数据库还原到差异备份完成的时间。

增量备份:只备份上次备份以后有变化的数据.(他才不管是那种类型的备份,有变化的数据就备份,他会清除存档属性)。


逻辑备份一般分为两种


(1):生成 INSERT 语句备份

想数据库中的数据一致,那么只有两种情况下可以做到。

1:同一时刻取出所以数据用于备份;2:数据库中的数据处于静止状态用于备份


     第一种:同一时刻取出所以数据:

        1.备份整个数据库
             mysqldump -h192.168.0.30 -uroot -phello1234 --single-transaction db_name > /tmp/backup.sql
        2.备份一张表
             mysqldump -h191.168.0.30 -uroot -phello1234 --single-transaction db_name poster>/tmp/poster.sql
        3.备份多张表

           mysqldump -h192.168.0.30 -uroot -phello1234 --single-transaction db_name poster customer...>

          /tmp/double_table.sql


         4.只dump数据库结构:
             mysqldump -h192.168.0.30 -uroot -phello1234 --no-data db_name>/tmp/no_data.sql
         5.不dump数据库结构:

            mysqldump -h192.168.0.30 -uroot -phello1234 --no-create-info db_name>/tmp/no_create_info.sql


            通过控制将整个备份过程控制在同一个事务中,来达到备份数据的一致性和完整性,而且 mysqldump 程序

            也给我 们提供了相关的

            参数选项来支持该功能,就是通过 “--single-transaction”选项,可以不影响数据库的任何正常服务

            (直接用于InnoDB和BDB存储引擎)



     第二种:数据库中的数据处于静止状态:(对表加锁)
         1.备份一张表
             mysqldump -h192.168.0.30 -uroot -phello1234 --lock-tables db_name table_name>/tmp/poster.sql
         2.备份多张表

            mysqldump -h192.168.0.30 -uroot -phello1234 --lock-tables db_name table_name1 table_name2...>

            /tmp/double_table.sql

              3.备份所有表 

                    mysqldump -h192.168.0.30 -uroot -phello1234 --lock-all-tables db_name >/tmp/all_backup.sql

(2):生成特定格式的纯文本备份数据文件备份

                优点:与insert命令文件相比,所需存储空间更小,数据更加清晰明确,编辑方便,

           缺点:同一个备份文件不能存在多张表的数据,没有数据库的重建命令,对于备份集多个文件,

                      使我们维护和恢复成本增加,但基本上可以通过简单脚步实现。


          在 MySQL 中一般都使用以下两种方法来获得可以自定义分隔符的纯文本备份文件。
          1、通过执行 SELECT ... TO OUTFILE FROM ...命令来实现

              mysql> SELECT * INTO OUTFILE 'outfile_backup.text'

                          FIELDS TERMINATED BY ','

                          OPTIONALLY ENCLOSED BY '"'

                          LINES TERMINATED BY '\n' from customer limit 100;
                     Query OK, 56 rows affected (0.00 sec)

      mysql>exit

查看生成的文本文件

                 jason@jason-Inspiron-3542:~$ sudo gedit /var/lib/mysql/x/outfile_backup.text    

96,5,"积极力量",\N,"95","263;",\N,\N,"1422346610625",121,\N,0,1,2,0
97,5,"积极力量",\N,"96","264;",\N,\N,"1422346723262",122,\N,0,1,2,1
98,4,"草莓草莓",\N,"97","265;",\N,\N,"1422347390240",123,\N,0,1,1,1
99,4,"来来来吧",\N,"98","265",\N,\N,"1422442056805",124,\N,0,2,0

           注释:(1). FIELDS TERMINATED BY ',' 

                      两个字段之间用逗号分割‘,’

                  (2).OPTIONALLY ENCLOSED BY ' " '

                     使用OPTIONALLY 参数时,数字类型的数据不会被指定字符“包装”(这里指定字符用的‘ ” ’)

                     不使用OPTIONALLY参数时,所有数据类型都会被指定字符封装。

                  (3).LINES TERMINATED BY '\n'

                     每条记录结束的时候需要添加字符(这里结束后添加“\n”,用于换行)

2、通过 mysqldump 导出
        可能我们都知道 mysqldump 可以将数据库中的数据以 INSERT 语句的形式生成相关备份
文件,其实除了生成 INSERT 语句之外,mysqldump 还同样能实现上面 “SELECT ... TO
OUTFILE FROM ...”所实现的功能,而且同时还会生成一个相关数据库结构对应的创建脚本 。

    如以下示例:
root@jason-Inspiron-3542:~# ls -l /tmp/mysqldump
total 0
root@jason-Inspiron-3542:~# sudo  mysqldump -uroot -T/tmp/mysqldump db_name table_name_outfile 

--fields-enclosed-by=\" --fields-terminated-by=,

执行完成后会创建两个文件,一个 *.sql数据表结构文件,一个 *.txt文本文件
root@jason-Inspiron-3542:~#  ls -l /tmp/mysqldump
total 8table_name_outfile
-rw-r--r-- 1 root root 1346 2008-10-14 22:18table_name_outfile.sql
-rw-rw-rw- 1 mysql mysql 2521 2008-10-14 22:18table_name_outfile.txt

root@jason-Inspiron-3542:~cat /tmp/mysqldump/table_name_outfile.txt
350021,21,"A","abcd"
350022,22,"B","abcd"
350023,23,"C","abcd"
350024,24,"D","abcd"
350025,25,"A","abcd"
... ...

root@sky:~# cat /tmp/mysqldump/table_name_outfile.sql
-- MySQL dump 10.11
--
-- Host: localhost
Database: db_name
-- ------------------------------------------------------
-- Server version 5.0.51a-log
/*!40101
/*!40101
/*!40101
/*!40101
/*!40103
/*!40103
/*!40101
/*!40111
SET
SET
SET
SET
SET
SET
SET
SET
@OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
@OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
@OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
NAMES utf8 */;
@OLD_TIME_ZONE=@@TIME_ZONE */;
TIME_ZONE='+00:00' */;
@OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
@OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `test_outfile`
--
DROP TABLE IF EXISTS `test_outfile`;
SET @saved_cs_client
= @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE `test_outfile` (
`id` int(11) NOT NULL default '0',
`t_id` int(11) default NULL,
`a` char(1) default NULL,
`mid` varchar(32) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
SET character_set_client = @saved_cs_client;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101
/*!40101
/*!40101
/*!40101
SET
SET
SET
SET
SQL_MODE=@OLD_SQL_MODE */;
CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


0 0
原创粉丝点击