精华内容
下载资源
问答
  • 数据库备份种类按照数据库大小备份,有四种类型,分别应用于不同场合。本文将MySQL 数据库备份种类以及常用备份工具进行汇总,方便大家学习。
  • 数据库备份

    2013-10-21 17:23:45
    bak是备份文件,根据备份的方式来决定它的大小按照备份数据库的大小数据库备份有四种类型,分别应用于不同的场合,下面简要介绍一下。 1、完全备份 这是大多数人常用的方式,它可以备份整个数据库,包含用户表、...
    bak是备份文件,根据备份的方式来决定它的大小按照备份数据库的大小数据库备份有四种类型,分别应用于不同的场合,下面简要介绍一下。  1、完全备份  这是大多数人常用的方式,它可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。但它需要花费更多的时间和空间,所以,一般推荐一周做一次完全备份。  2、事务日志备份  事务日志是一个单独的文件,它记录数据库的改变,备份的时候只需要复制自上次备份以来对数据库所做的改变,所以只需要很少的时间。为了使数据库具有鲁棒性,推荐每小时甚至更频繁的备份事务日志。  3、差异备份  也叫增量备份。它是只备份数据库一部分的另一种方法,它不使用事务日志,相反,它使用整个数据库的一种新映象。它比最初的完全备份小,因为它只包含自上次完全备份以来所改变的数据库。它的优点是存储和恢复速度快。推荐每天做一次差异备份。  4、文件备份  数据库可以由硬盘上的许多文件构成。如果这个数据库非常大,并且一个晚上也不能将它备份完,那么可以使用文件备份每晚备份数据库的一部分。由于一般情况下数据库不会大到必须使用多个文件存储,所以这种备份不是很常用。  按照数据库的状态可分为三种:  1.冷备份,此时数据库处于关闭状态,能够较好的保证数据库的完整性。  2.热备份,数据库正处于运行状态,这种方法依赖于数据库的日志文件进行备份。  3.逻辑备份,使用软件从数据库中提取数据并将结果写到一个文件上。
    
    展开全文
  • 遇到在一台Linux数据库服务器上备份数据库,手动执行脚本能成功备份,但crontab定时任务自动执行脚本后备份文件的大小都是1024kb,未成功备份。有大神知道是什么原因吗?脚本中mysqldump...
  • 1,数据库备份种类 按照数据库大小备份,有四种类型,分别应用于不同场合,下面简要介绍一下: 1.1完全备份 这是大多数人常用的方式,它可...
        

     


    1,数据库备份种类

    按照数据库大小备份,有四种类型,分别应用于不同场合,下面简要介绍一下:

    1.1完全备份

    这是大多数人常用的方式,它可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。但它需要花费更多的时间和空间,所以,一般推荐一周做一次完全备份。

     

    1.2事务日志备份

    事务日志是一个单独的文件,它记录数据库的改变,备份的时候只需要复制自上次备份以来对数据库所做的改变,所以只需要很少的时间。为了使数据库具有鲁棒性,推荐每小时甚至更频繁的备份事务日志。

     

    1.3差异备份

    也叫增量备份。它是只备份数据库一部分的另一种方法,它不使用事务日志,相反,它使用整个数据库的一种新映象。它比最初的完全备份小,因为它只包含自上次完全备份以来所改变的数据库。它的优点是存储和恢复速度快。推荐每天做一次差异备份。

     

    1.4文件备份

    数据库可以由硬盘上的许多文件构成。如果这个数据库非常大,并且一个晚上也不能将它备份完,那么可以使用文件备份每晚备份数据库的一部分。由于一般情况下数据库不会大到必须使用多个文件存储,所以这种备份不是很常用。

    按照数据库的状态可分为三种:

    1.冷备份,此时数据库处于关闭状态,能够较好的保证数据库的完整性。

    2.热备份,数据库正处于运行状态,这种方法依赖于数据库的[1] 日志文件进行备份。

    3.逻辑备份,使用软件从数据库中提取数据并将结果写到一个文件上。

     

    2,备份工具简介

    mysql按照备份恢复方式分为逻辑备份和物理备份。逻辑备份是备份sql语句,在恢复的时候执行备份的sql语句实现数据库数据的重现,物理备份就是备份数据文件了,比较形象点就是cp下数据文件,但真正备份的时候自然不是的cp这么简单。

     

    这2种备份各有优劣,一般来说,物理备份恢复速度比较快,占用空间比较大,逻辑备份速度比较慢,占用空间比较小。

    官方地址:http://dev.mysql.com/doc/refman/5.6/en/backup-and-recovery.html

    2.1 mysqldump工具

    Mysqldump是mysql自带的备份工具,目录在bin目录下面:/usr/local/mysql/bin/mysqldump,支持基于innodb的热备份。但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景。Mysqldump完全备份+二进制日志可以实现基于时间点的恢复。

     

    对myisam存储引擎的表,只能使用温备份,这个时候要防止数据的写入,所以先加上读锁。这个时候也可以进入数据库手动加读锁,不过这样比较麻烦,可以在mysqldump工具中直接有一个加锁的选择,就是 --lock-all-tables ,例如mysqldump --databases test --lock-all-tables --flush-logs > /tmp/backup_test_`date+%F-%H-%M`.sql。

     如果是备份单张表,直接在库名字test后面加上表名字即可。

     

    对于innodb存储引擎表,可以热备,不必对数据库进行加锁的操作,加一个选项可以进行热备份,--single-transaction,例如:mysqldump --databases test --single-transaction --flush-logs--master-data=2> /tmp/backup_test_`date +%F-%H-%M`.sql。

     

    PS:注意点,恢复的时候记得关闭二进制日志:

    mysql> set sql_log_bin=0;

    因为这是基于逻辑备份方式,所以执行sql会插入数据,会记录到二进制日志里面去,因为这事恢复,所以插入的二进制日志基本没有啥意思,可以关闭掉,缩短恢复时间。

     

    2.2 基于LVM快照备份

    在物理备份中,有基于文件系统的物理备份(LVM的快照),也可以直接用tar之类的命令对整个数据库目录进行打包备份,但是这些只能进行泠备份,不同的存储引擎备份的也不一样,myisam自动备份到表级别,而innodb不开启独立表空间的话只能备份整个数据库。

     

    下面就介绍下使用LVM的快照功能进行备份为了安全,首先在数据库上施加读锁

    mysql>FLUSH TABLES WITH READ LOCK;

     

    刷新一下二进制日志,便于做时间点恢复

    mysql>FLUSH LOGS;

     

    然后创建快照卷

    lvcreate –L 1G –s –n data-snap –p –r/dev/myvg/mydata

     

    最后进入数据库释放读锁

    UNLOCK TABLES;

     

    挂载快照卷进行备份

    mount –r /dev/myvg/data-snap /mnt/snap

     

    然后对/mnt/snap下的文件进行打包备份

    还原的时候,关闭mysqld,然后备份二进制日志后将原来备份的文件还原进去,然后通过二进制日志还原到出错的时间点(通过二进制还原时间点的时候不要忘了暂时关闭二进制日志)

     

    在2010年到2012年之间,mysql数据库部署在亚马逊的云环境中,他们提供了LVM快照,蛮方便快捷的,使用lvm快照,在亚马逊的万兆网络下,恢复起来也迅速无比。

     

    2.3 tar包备份

    0,准备从库第一次数据备份,临时锁所有表,开启窗口1

    mysql> flush tables with read lock; 

    Query OK, 0 rows affected (0.00 sec) 

     

    mysql> show master status;          

    +------------------+----------+--------------+------------------+ 

    | File             | Position | Binlog_Do_DB |Binlog_Ignore_DB | 

    +------------------+----------+--------------+------------------+ 

    | mysql-bin.000003 |   194554 |              |                  | 

    +------------------+----------+--------------+------------------+ 

    1 row in set (0.00 sec) 

    PS:这个窗口不能exit,要一直保持知道tar完包为止。

    --重新开一个shell窗口,去数据文件目录tar包
    开启窗口2
    [root@myfstv_21_11 data]# tar -zcvf mysqla1.tar.gz mysqla
    tar -zcvf mysqla1.tar.gz mysqla  压缩完毕

    切换到窗口1,执行解锁命令
    mysql> unlocktables;              
    Query OK, 0 rows affected (0.00 sec)

    mysql>

    copy tar包到另外一个mysql库服务器上面,覆盖data目录,然后重启mysql数据库服务。

     

    2.4 percona提供的xtrabackup工具

    支持innodb的物理热备份,支持完全备份,增量备份,而且速度非常快,支持innodb存储引起的数据在不同数据库之间迁移,支持复制模式下的从机备份恢复备份恢复

    ,为了让xtrabackup支持更多的功能扩展,可以设立独立表空间,打开 innodb_file_per_table功能,启用之后可以支持单独的表备份。

    下载地址为:http://www.percona.com/software/percona-xtrabackup

    参考文章地址:http://blog.csdn.net/mchdba/article/details/11563027

     

    支持在线热备与恢复

    大数据量的时候,备份恢复都比较快快

     

    xtrabackup可以实现完全备份,增量备份,以及部分备份。

     

    xtrabackup备份原理 

     xtraBackup基于InnoDB的crash-recovery功能。它会复制innodb的data file,由于不锁表,复制出来的数据是不一致的,在恢复的时候使用crash-recovery,使得数据恢复一致。 

     

     InnoDB维护了一个redo log,又称为transaction log,事务日志,它包含了innodb数据的所有改动情况。当InnoDB启动的时候,它会先去检查data file和transaction log,并且会做二步操作:

     

      xtraBackup在备份的时候, 一页一页地复制innodb的数据,而且不锁定表,与此同时,XtraBackup还有另外一个线程监视着transactions log,一旦log发生变化,就把变化过的log pages复制走。为什么要急着复制走呢?因为transactions log文件大小有限,写满之后,就会从头再开始写,所以新数据可能会覆盖到旧的数据。 

      在prepare过程中,XtraBackup使用复制到的transactionslog对备份出来的innodb data file进行crash recovery。 

     

     

     ----------------------------------------------------------------------------------------------------------------

    原博客地址:    http://blog.itpub.net/26230597/viewspace-1460065/
    原作者:黄杉(mchdba)
    ----------------------------------------------------------------------------------------------------------------

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-1460921/,如需转载,请注明出处,否则将追究法律责任。

    展开全文
  • 织梦数据库备份还原

    2019-09-23 23:17:40
    [应用实例]进入数据库备份还原操作界面备份:这里可以全选或选择部分表进行备份,指定备份数据格式我们一般为默认,分卷大小一般为2048,备份表结构信息默认打勾,如只需要备份数据时,可以不选择。我们点击提交按钮...

    [功能描述]
    系统数据库备份还原。
    [操作说明]
    后台登陆-系统-数据库备份/还原。
    [应用实例]
    进入数据库备份还原操作界面
    备份:

    这里可以全选或选择部分表进行备份,指定备份数据格式我们一般为默认,分卷大小一般为2048,备份表结构信息默认打勾,如只需要备份数据时,可以不选择。我们点击提交按钮。

    这里显示备份进度,备份完成后会提示“完成所有数据备份”!我们可以点击数据还原进行查看。
    恢复:
    进入备份还原操作界面,点击数据还原,出现我们备份的数据信息

    这里我们同样可以还原某一个表或全部,我们点开始还原数据。

    这时还原数据库开始,值到出现成功还原所有的文件数据!,此时备份还原成功。
    [相关内容]
    我们在使用备份工具备份数据库后,默认存放在data/backupdata目录中,我们可以利用ftp下载到本地。

    转载于:https://www.cnblogs.com/onlylove2015/p/4391723.html

    展开全文
  • 数据库备份(导出)------------------------------------------------------------ //分别是主机,用户名,密码,数据库名,数据库编码 $db = new DBManage ( ‘localhost’, ‘root’, ‘root’, ‘test’, ‘utf...
    • ------1. 数据库备份(导出)------------------------------------------------------------
      //分别是主机,用户名,密码,数据库名,数据库编码
      $db = new DBManage ( ‘localhost’, ‘root’, ‘root’, ‘test’, ‘utf8’ );
      // 参数:备份哪个表(可选),备份目录(可选,默认为backup),分卷大小(可选,默认2000,即2M)
      $db->backup ();
    • ------2. 数据库恢复(导入)------------------------------------------------------------
      //分别是主机,用户名,密码,数据库名,数据库编码
      $db = new DBManage ( ‘localhost’, ‘root’, ‘root’, ‘test’, ‘utf8’ );
      //参数:sql文件
      $db->restore ( ‘./backup/20120516211738_all_v1.sql’);
      *----------------------------------------------------------------
    <?php
    /**
     * 说明:分卷文件是以_v1.sql为结尾
     * 功能:实现mysql数据库分卷备份,选择表进行备份,实现单个sql文件及分卷sql导入
     * 使用方法:
     *
     * ------1. 数据库备份(导出)------------------------------------------------------------
    //分别是主机,用户名,密码,数据库名,数据库编码
    $db = new DBManage ( 'localhost', 'root', 'root', 'test', 'utf8' );
    // 参数:备份哪个表(可选),备份目录(可选,默认为backup),分卷大小(可选,默认2000,即2M)
    $db->backup ();
     * ------2. 数据库恢复(导入)------------------------------------------------------------
    //分别是主机,用户名,密码,数据库名,数据库编码
    $db = new DBManage ( 'localhost', 'root', 'root', 'test', 'utf8' );
    //参数:sql文件
    $db->restore ( './backup/20120516211738_all_v1.sql');
     *----------------------------------------------------------------------
     */
    class DBManage
    {
      var $db; // 数据库连接
      var $database; // 所用数据库
      var $sqldir; // 数据库备份文件夹
      var $record;
      // 换行符
      private $ds = "n";
      // 存储SQL的变量
      public $sqlContent = "";
      // 每条sql语句的结尾符
      public $sqlEnd = ";";
      /**
       * 初始化
       *
       * @param string $host
       * @param string $username
       * @param string $password
       * @param string $thisatabase
       * @param string $charset
       */
      function __construct($host = 'localhost', $username = 'root', $password = '', $thisatabase = 'test', $charset = 'utf8')
      {
        $this->host = $host;
        $this->username = $username;
        $this->password = $password;
        $this->database = $thisatabase;
        $this->charset = $charset;
        // 连接数据库
        $this->db = mysql_connect ( $this->host, $this->username, $this->password ) or die ( "数据库连接失败." );
        // 选择使用哪个数据库
        mysql_select_db ( $this->database, $this->db ) or die ( "无法打开数据库" );
        // 数据库编码方式
        mysql_query ( 'SET NAMES ' . $this->charset, $this->db );
      }
    
      /*
        * ------------------------------------------数据库备份start----------------------------------------------------------
        */
    
      /**
       * 数据库备份
       * 参数:备份哪个表(可选),备份目录(可选,默认为backup),分卷大小(可选,默认2000,即2M)
       *
       * @param $string $dir
       * @param int $size
       * @param $string $tablename
       */
      function backup($tablename = '', $dir = '', $size = 2000)
      {
        //$dir = $dir ? $dir : 'backup/';
        //$size = $size ? $size : 2000;
        $sql = '';
        // 只备份某个表
        if (! emptyempty ( $tablename ))
        {
          echo '正在备份表' . $tablename . '<br />';
          // 插入dump信息
          $sql = $this->_retrieve();
          // 插入表结构信息
          $sql .= $this->_insert_table_structure ( $tablename );
          // 插入数据
          $data = mysql_query ( "select * from " . $tablename );
          // 文件名前面部分
          $filename = date ( 'YmdHis' ) . "_" . $tablename;
          // 字段数量
          $num_fields = mysql_num_fields ( $data );
          // 第几分卷
          $p = 1;
          // 循环每条记录
          while ( $record = mysql_fetch_array ( $data ) )
          {
            // 单条记录
            $sql .= $this->_insert_record ( $tablename, $num_fields, $record );
            // 如果大于分卷大小,则写入文件
            if (strlen ( $sql ) >= $size * 1000)
            {
              $file = $filename . "_v" . $p . ".sql";
              if ($this->_write_file ( $sql, $file, $dir ))
              {
                echo "表-" . $tablename . "-卷-" . $p . "-数据备份完成,生成备份文件 <span style='color:#f00;'>$dir$filename</span><br />";
              }
              else
              {
                echo "备份表-" . $tablename . "-失败<br />";
              }
              // 下一个分卷
              $p ++;
              // 重置$sql变量为空,重新计算该变量大小
              $sql = "";
            }
          }
          // sql大小不够分卷大小
          if ($sql != "")
          {
            $filename .= "_v" . $p . ".sql";
            if ($this->_write_file ( $sql, $filename, $dir ))
            {
              echo "表-" . $tablename . "-卷-" . $p . "-数据备份完成,生成备份文件 <span style='color:#f00;'>$dir$filename</span><br />";
            }
            else
            {
              echo "备份卷-" . $p . "-失败<br />";
            }
          }
        }
        else
        { // 备份全部表
          if ($tables = mysql_query ( "show table status from " . $this->database ))
          {
            echo "读取数据库结构成功!<br />";
          }
          else
          {
            exit ( "读取数据库结构成功!<br />" );
          }
          // 插入dump信息
          $sql .= $this->_retrieve();
          // 文件名前面部分
          $filename = date ( 'YmdHis' ) . "_all";
          // 查出所有表
          $tables = mysql_query ( 'SHOW TABLES' );
          // 第几分卷
          $p = 1;
          // 循环所有表
          while ( $table = mysql_fetch_array ( $tables ) )
          {
            // 获取表名
            $tablename = $table [0];
            // 获取表结构
            $sql .= $this->_insert_table_structure ( $tablename );
            $data = mysql_query ( "select * from " . $tablename );
            $num_fields = mysql_num_fields ( $data );
    
            // 循环每条记录
            while ( $record = mysql_fetch_array ( $data ) )
            {
              // 单条记录
              $sql .= $this->_insert_record ( $tablename, $num_fields, $record );
              // 如果大于分卷大小,则写入文件
              if (strlen ( $sql ) >= $size * 1000)
              {
    
                $file = $filename . "_v" . $p . ".sql";
                // 写入文件
                if ($this->_write_file ( $sql, $file, $dir ))
                {
                  echo "-卷-" . $p . "-数据备份完成,生成备份文件<span style='color:#f00;'>$dir$file</span><br />";
                }
                else
                {
                  echo "备份卷-" . $p . "-失败<br />";
                }
                // 下一个分卷
                $p ++;
                // 重置$sql变量为空,重新计算该变量大小
                $sql = "";
              }
            }
          }
          // sql大小不够分卷大小
          if ($sql != "")
          {
            $filename .= "_v" . $p . ".sql";
            if ($this->_write_file ( $sql, $filename, $dir ))
            {
              echo "-卷-" . $p . "-数据备份完成,生成备份文件 <span style='color:#f00;'>$dir$filename<br />";
            }
            else
            {
              echo "备份卷-" . $p . "-失败<br />";
            }
          }
        }
      }
    
      /**
       * 插入数据库备份基础信息
       *
       * @return string
       */
      private function _retrieve() {
        $value = '';
        $value .= '--' . $this->ds;
        $value .= '-- MySQL database dump' . $this->ds;
        $value .= '-- Created by DBManage class, Power By yanue. ' . $this->ds;
        $value .= '-- http://yanue.net ' . $this->ds;
        $value .= '--' . $this->ds;
        $value .= '-- 主机: ' . $this->host . $this->ds;
        $value .= '-- 生成日期: ' . date ( 'Y' ) . ' 年  ' . date ( 'm' ) . ' 月 ' . date ( 'd' ) . ' 日 ' . date ( 'H:i' ) . $this->ds;
        $value .= '-- MySQL版本: ' . mysql_get_server_info () . $this->ds;
        $value .= '-- PHP 版本: ' . phpversion () . $this->ds;
        $value .= $this->ds;
        $value .= '--' . $this->ds;
        $value .= '-- 数据库: `' . $this->database . '`' . $this->ds;
        $value .= '--' . $this->ds . $this->ds;
        $value .= '-- -------------------------------------------------------';
        $value .= $this->ds . $this->ds;
        return $value;
      }
    
      /**
       * 插入表结构
       *
       * @param unknown_type $table
       * @return string
       */
      private function _insert_table_structure($table) {
        $sql = '';
        $sql .= "--" . $this->ds;
        $sql .= "-- 表的结构" . $table . $this->ds;
        $sql .= "--" . $this->ds . $this->ds;
    
        // 如果存在则删除表
        $sql .= "DROP TABLE IF EXISTS `" . $table . '`' . $this->sqlEnd . $this->ds;
        // 获取详细表信息
        $res = mysql_query ( 'SHOW CREATE TABLE `' . $table . '`' );
        $row = mysql_fetch_array ( $res );
        $sql .= $row [1];
        $sql .= $this->sqlEnd . $this->ds;
        // 加上
        $sql .= $this->ds;
        $sql .= "--" . $this->ds;
        $sql .= "-- 转存表中的数据 " . $table . $this->ds;
        $sql .= "--" . $this->ds;
        $sql .= $this->ds;
        return $sql;
      }
    
      /**
       * 插入单条记录
       *
       * @param string $table
       * @param int $num_fields
       * @param array $record
       * @return string
       */
      private function _insert_record($table, $num_fields, $record) {
        // sql字段逗号分割
        $insert = $comma = "";
        $insert .= "INSERT INTO `" . $table . "` VALUES(";
        // 循环每个子段下面的内容
        for($i = 0; $i < $num_fields; $i ++) {
          $insert .= ($comma . "'" .mysql_real_escape_string ( $record [$i] ) . "'");
          $comma = ",";
        }
        $insert .= ");" . $this->ds;
        return $insert;
      }
    
      /**
       * 写入文件
       *
       * @param string $sql
       * @param string $filename
       * @param string $dir
       * @return boolean
       */
      private function _write_file($sql, $filename, $dir) {
        $dir = $dir ? $dir : './backup/';
        // 不存在文件夹则创建
        if (! file_exists ( $dir )) {
          mkdir ( $dir );
        }
        $re = true;
        if (! @$fp = fopen ( $dir . $filename, "w+" )) {
          $re = false;
          echo "打开文件失败!";
        }
        if (! @fwrite ( $fp, $sql )) {
          $re = false;
          echo "写入文件失败,请文件是否可写";
        }
        if (! @fclose ( $fp )) {
          $re = false;
          echo "关闭文件失败!";
        }
        return $re;
      }
    
      /*
        *
        * -------------------------------上:数据库导出-----------分割线----------下:数据库导入--------------------------------
        */
    
      /**
       * 导入备份数据
       * 说明:分卷文件格式20120516211738_all_v1.sql
       * 参数:文件路径(必填)
       *
       * @param string $sqlfile
       */
      function restore($sqlfile)
      {
        // 检测文件是否存在
        if (! file_exists ( $sqlfile ))
        {
          exit ( "文件不存在!请检查" );
        }
        $this->lock ( $this->database );
        // 获取数据库存储位置
        $sqlpath = pathinfo ( $sqlfile );
        $this->sqldir = $sqlpath ['dirname'];
        // 检测是否包含分卷,将类似20120516211738_all_v1.sql从_v分开,有则说明有分卷
        $volume = explode ( "_v", $sqlfile );
        $volume_path = $volume [0];
        echo "请勿刷新及关闭浏览器以防止程序被中止,如有不慎!将导致数据库结构受损<br />";
        echo "正在导入备份数据,请稍等!<br />";
        if (emptyempty ( $volume [1] ))
        {
          echo "正在导入sql:<span style='color:#f00;'>" . $sqlfile . '</span><br />';
          // 没有分卷
          if ($this->_import ( $sqlfile )) {
            echo "数据库导入成功!";
          }
          else
          {
            exit ( '数据库导入失败!' );
          }
        }
        else
        {
          //$volume_id = array();
          // 存在分卷,则获取当前是第几分卷,循环执行余下分卷
          $volume_id = explode ( ".sq", $volume [1] );
          // 当前分卷为$volume_id
          $volume_id = intval ( $volume_id [0] );
          while ( $volume_id )
          {
            $tmpfile = $volume_path . "_v" . $volume_id . ".sql";
            // 存在其他分卷,继续执行
            if (file_exists ( $tmpfile )) {
              // 执行导入方法
              echo "正在导入分卷<span style='color:#f00;'>" . $tmpfile . '</span><br />';
              if ($this->_import ( $tmpfile ))
              {
    
              }
              else
              {
                exit ( "导入分卷<span style='color:#f00;'>" . $tmpfile . '</span>失败!可能是数据库结构已损坏!请尝试从分卷1开始导入' );
              }
            }
            else
            {
              echo "此分卷备份全部导入成功!<br />";
              return;
            }
            $volume_id++;
          }
        }
      }
    
      /**
       * 将sql导入到数据库(普通导入)
       *
       * @param string $sqlfile
       * @return boolean
       */
      private function _import($sqlfile) {
        // sql文件包含的sql语句数组
        $sqls = array ();
        $f = fopen ( $sqlfile, "rb" );
        // 创建表缓冲变量
        $create = '';
        while ( ! feof ( $f ) ) {
          // 读取每一行sql
          $line = fgets ( $f );
          // 如果包含'-- '等注释,或为空白行,则跳过
          if (trim ( $line ) == '' || preg_match ( '/--*?/', $line, $match )) {
            continue;
          }
          // 如果结尾包含';'(即为一个完整的sql语句,这里是插入语句),并且不包含'ENGINE='(即创建表的最后一句),
          if (! preg_match ( '/;/', $line, $match ) || preg_match ( '/ENGINE=/', $line, $match )) {
            // 将本次sql语句与创建表sql连接存起来
            $create .= $line;
            // 如果包含了创建表的最后一句
            if (preg_match ( '/ENGINE=/', $create, $match )) {
              // 则将其合并到sql数组
              $sqls [] = $create;
              // 清空当前,准备下一个表的创建
              $create = '';
            }
            // 跳过本次
            continue;
          }
          $sqls [] = $line;
        }
        fclose ( $f );
        // 循环sql语句数组,分别执行
        foreach ( $sqls as $sql ) {
          str_replace ( "n", "", $sql );
          if (! mysql_query ( trim ( $sql ) )) {
            echo mysql_error ();
            return false;
          }
        }
        return true;
      }
    
      /*
        * -------------------------------数据库导入end---------------------------------
        */
    
      // 关闭数据库连接
      private function close() {
        mysql_close ( $this->db );
      }
    
      // 锁定数据库,以免备份或导入时出错
      private function lock($tablename, $op = "WRITE") {
        if (mysql_query ( "lock tables " . $tablename . " " . $op ))
          return true;
        else
          return false;
      }
    
      // 解锁
      private function unlock() {
        if (mysql_query ( "unlock tables" ))
          return true;
        else
          return false;
      }
    
      // 析构
      function __destruct() {
        mysql_query ( "unlock tables", $this->db );
        mysql_close ( $this->db );
      }
    }
    
    $db = new DBManage ( 'localhost', 'root', '', 'tao', 'gbk' );
    //$db->backup ('tao_admin');
    $db->restore ( './backup/20140228222713_tao_admin_v1.sql');
    ?>
    
    展开全文
  • MySQL数据库备份详解

    2018-06-05 22:35:54
    1.2 优化备份文件大小减少输出注释(debug调试) 1.3压缩备份(推荐) 1.4 备份单个数据库小结 2 mysqldump备份 2.1 mysqldump工作原理 2.2 多库备份 2.3 分库备份 2.4 单表备份 2.5 分表备份 3 mysqldump参数 3.1...
  • Oracle 数据库备份与恢复 一、Oracle 数据库备份 exp方式导出 (cmd命令行操作) 相关参数项如下: 关键字 说明 默认 USERID 用户名/口令 FULL 导出整个文件 (N) BUFFER 数据缓冲区的大小 OWNER ...
  • Mysql数据库链接 ... 1.文件同步 rsync -avz --delete root@(需要同步的文件的服务器地址:文件的路劲) 同步后的路劲 ...2.查看文件的大小 ...3.数据库备份 mysqldump -u root -p 数据库>备份路劲 ...
  • 11.3 - 执行数据库备份

    2019-09-03 23:21:11
    11.3 执行数据库备份 OSB可以备份非数据库文件。OSB增加了备份到磁带功能和操作系统文件备份。 alter tablespace tbs begin backup; alter tablespace tbs end backup; 使用备份集时,不会存储空数据块,...
  • DB2数据库备份是学习DB2数据库过程中的基础知识,下面就为您介绍DB2数据库备份的方法,希望对您能够有所帮助。 数据库备份创建了数据库的时间点映象,它是灾难恢复解决方案的基本组件。DB2 提供了几种备份,包括...
  •  进入DedeCms后台 -> 系统 -> 数据库备份/还原 备份文件在\data\backupdata   这里可以全选或选择部分表进行备份,指定备份数据格式我们一般为默认,分卷大小一般为2048,备份表结构信息默认打勾,如只...
  • 今天做的项目遇到数据备份还有需要输出备份文件大小的问题,总结了一下记录下来。...数据库备份文件  */ public class beifen {  public static boolean exportDatabaseTool(String hostIP, String userName,...
  • 1、数据库备份种类 MySQL按照数据库大小备份,有四种类型,分别应用于不同场合,下面简要介绍一下: 1.1 完全备份 这是大多数人常用的方式,它可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等...
  • 1、数据库安装完成后需要配置归档,才可以进行备份: 首先关闭数据库实例: cd /opt/dmdbms/bin 执行: ./DmServiceDMSERVER stop 归档类型: ...3、备份的粒度大小:库备份、表空间备份、归档备份和表备
  • 数据库备份种类依照数据库大小备份,有四种类型,分别应用于不同场合,以下简要介绍一下:1.1全然备份这是大多数人经常使用的方式,它能够备份整个数据库,包括用户表、系统表、索引、视图和存储过程等全部数据库...
  • 1.mysqldump 逻辑备份mysql数据库。 mysqldump的原理:mysqldump命令备份数据的过程,实际上就是把数据从mysql库里以逻辑的sql语句的形式直接输出或者生成...--compact 优化备份文件大小减少输出注释,主要用于...
  • 不少新手朋友在网站备份或者是网站搬家中都会为备份数据库为难,不知道怎么备份或者是因数据库比较大而备份失败,今天飘仙就为新手朋友介绍一款 免费、开源的mysql数据库备份工具——帝国备份王,有了这个工具不管...
  • 说到差异备份,因为微软的差异备份记录的是上一次全备份以来发生的变化,所以,如果数据库的改动很频繁的话,没过多久,差异备份就会和全备份大小接近,因此这种情况下就不合适了。因此,全备份+日志备份的方案...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,141
精华内容 856
关键字:

数据库备份大小