Home Backend Development PHP Tutorial MySQL database backup function implemented by ThinkPHP framework

MySQL database backup function implemented by ThinkPHP framework

Jun 01, 2018 am 10:42 AM
mysql php thinkphp

这篇文章主要介绍了ThinkPHP框架实现的MySQL数据库备份功能,结合实例形式分析了thinkPHP导出mysql数据库相关操作实现与使用技巧,需要的朋友可以参考下

本文实例讲述了ThinkPHP框架实现的MySQL数据库备份功能。分享给大家供大家参考,具体如下:

1、缘由

自从2010年开始试用ThinkPHP以来,的确带来了许多方便。的确给我带来了许多方便。此次应为数据频繁备份需要,而每次远程连接到服务器颇为不便。变萌生了写个ThinkPHP数据库备份SQL生成类的念头。

2、介绍

由于在数据库中有使用触发器。因此也需要一并备份。并且为了插入数据的时候不会受到触发器影响而破坏先前插入的数据,在插入数据之前生成了删除触发器的代码。 本类并不能生成数据表的创建和删除代码,因此在使用中请注意保证两端表结构的一致。

做WEB开发,一直以来,都采用 Navicat For Mysql 将本地数据库同步到服务器上。前些天,突然心血来潮,将本地数据库升级到了 Mysql 5.5版本,再次将数据同步的时候却发生了错误。想起之前写过的 ThinkPHP 实现Mysql数据库备份 只有备份数据的功能,而没有导出表结构的功能。于是想到了升级一下。让其更完整。

本次升级 增加了 备份表结构、视图功能。导出数据增加了类型判断,insert 语句当字段为空的时候会输出 NULL,当为数字 的时候则不会带上 单引号。

<?php
/**
 * 描述:基于ThinkPHP框架的Mysql数据库导出类
 * 日期:2012-07-15
 * 作者:龚辟愚
 */
class DBExport
{
  /**
   * @description 获取当前数据库的所有表名。
   * @static
   * @return array
   */
  static protected function getTables()
  {
    $dbName=C(&#39;DB_NAME&#39;);
    $result=M()->query("SHOW FULL TABLES FROM `{$dbName}` WHERE Table_Type = &#39;BASE TABLE&#39;");
    foreach ($result as $v){
      $tbArray[]=$v[&#39;Tables_in_&#39;.C(&#39;DB_NAME&#39;)];
    }
    return $tbArray;
  }
  static protected function getViews()
  {
    $dbName=C(&#39;DB_NAME&#39;);
    $result=M()->query("SHOW FULL TABLES FROM `{$dbName}` WHERE Table_Type = &#39;VIEW&#39;");
    foreach ($result as $v){
      $tbArray[]=$v[&#39;Tables_in_&#39;.C(&#39;DB_NAME&#39;)];
    }
    return $tbArray;
  }
  /**
   * @description 导出SQL数据,但不包含表创建代码。
   * @static
   * @return string
   */
  static public function ExportAllData()
  {
    $tables = self::getTables();
    $arrAll = array(
      "SET FOREIGN_KEY_CHECKS=0;",
      self::BuildAllTriggerDropSql(),
      self::BuildTableSql(),
      self::BuildViewSql()
    );
    $tbl = new Model();
    foreach($tables as $table)
    {
      $arrAll[]="\r\nDELETE FROM {$table};";
      /*
      $rs = $tbl->query("SHOW COLUMNS FROM {$table}");
      $arrFields = array();
      foreach ($rs as $k=>&$v){
        $arrFields[] = "`{$v[&#39;Field&#39;]}`";
      }
      $sqlFields = implode($arrFields,",");
      */
      $rs=$tbl->query("select * from `{$table}`");
      foreach ($rs as $k=>&$v){
        $arrValues = array();
        foreach($v as $key=>$val)
        {
          if(is_numeric($val)){
            $arrValues[]=$val;
          }else if(is_null($val)){
            $arrValues[]=&#39;NULL&#39;;
          }else{
            $arrValues[]="&#39;".addslashes($val)."&#39;";
          }
        }
        $arrAll[] = "INSERT INTO `{$table}` VALUES (".implode(&#39;,&#39;,$arrValues).");";
      }
    }
    $arrAll[]=self::BuildTriggerCreateSql();
    return implode("\r\n",$arrAll);
  }
  static protected function BuildTableSql()
  {
    $tables = self::getTables();
    $arrAll = array();
    foreach($tables as &$val){
      $rs = M()->query("SHOW CREATE TABLE `{$val}`");
      $tbSql = preg_replace("#CREATE(.*)\\s+TABLE#","CREATE TABLE",$rs[0][&#39;Create Table&#39;]);
      $arrAll[] = "DROP TABLE IF EXISTS `{$rs[0][&#39;Table&#39;]}`;\r\n{$tbSql};\r\n";
    }
    return implode("\r\n",$arrAll);
  }
  static protected function BuildViewSql()
  {
    $views = self::getViews();
    $arrAll = array();
    foreach($views as &$val){
      $rs = M()->query("SHOW CREATE VIEW `{$val}`");
      $tbSql = preg_replace("#CREATE(.*)\\s+VIEW#","CREATE VIEW",$rs[0][&#39;Create View&#39;]);
      $arrAll[] = "DROP VIEW IF EXISTS `{$rs[0][&#39;View&#39;]}`;\r\n{$tbSql};\r\n";
    }
    return implode("\r\n",$arrAll);
  }
  /**
   * @description 如果存在触发器,生成删除代码。原因是:插入数据的时候可能会受到触发器影响。
   * @static
   * @return string
   */
  static public function BuildAllTriggerDropSql()
  {
    $rs = M()->query("show triggers");
    $arrAll = array();
    foreach ($rs as $k=>&$v)
    {
      $arrSql = array(
        &#39;DROP TRIGGER IF EXISTS `&#39;,$v[&#39;Trigger&#39;],&#39;`;&#39;
      );
      $arrAll[] = implode(&#39;&#39;,$arrSql);
    }
    return implode("\r\n",$arrAll);
  }
  /**
   * @description 生成所有触发器的创建代码。
   * @static
   * @return string
   */
  static protected function BuildTriggerCreateSql()
  {
    $rs = M()->query("show triggers");
    $arrAll = array();
    foreach ($rs as $k=>&$v)
    {
      $arrSql = array(
        &#39;CREATE TRIGGER `&#39;,$v[&#39;Trigger&#39;],&#39;` &#39;,$v[&#39;Timing&#39;],&#39; &#39;,$v[&#39;Event&#39;],&#39; ON `&#39;,
        $v[&#39;Table&#39;],&#39;` FOR EACH ROW &#39;,$v[&#39;Statement&#39;],&#39;;&#39;
      );
      $arrAll[] = implode(&#39;&#39;,$arrSql);
    }
    return implode("\r\n",$arrAll);
  }
}
Copy after login

调用示例:

vendor(&#39;DBExport&#39;,COMMON_PATH);
header(&#39;Content-type: text/plain; charset=UTF-8&#39;);
$dbName = C(&#39;DB_NAME&#39;);
header("Content-Disposition: attachment; filename=\"{$dbName}.sql\"");
echo DBExport::ExportAllData()
Copy after login

以上就是本篇文章的全部内容了,感谢大家阅读。更多请关注PHP中文网!

相关推荐:

tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能

ThinkPHP框架实现导出excel数据的方法(基于PHPExcel)

The above is the detailed content of MySQL database backup function implemented by ThinkPHP framework. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers Of The Witch Tree - How To Unlock The Grappling Hook
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1668
14
PHP Tutorial
1273
29
C# Tutorial
1256
24
MySQL: The Database, phpMyAdmin: The Management Interface MySQL: The Database, phpMyAdmin: The Management Interface Apr 29, 2025 am 12:44 AM

MySQL and phpMyAdmin can be effectively managed through the following steps: 1. Create and delete database: Just click in phpMyAdmin to complete. 2. Manage tables: You can create tables, modify structures, and add indexes. 3. Data operation: Supports inserting, updating, deleting data and executing SQL queries. 4. Import and export data: Supports SQL, CSV, XML and other formats. 5. Optimization and monitoring: Use the OPTIMIZETABLE command to optimize tables and use query analyzers and monitoring tools to solve performance problems.

Composer: Aiding PHP Development Through AI Composer: Aiding PHP Development Through AI Apr 29, 2025 am 12:27 AM

AI can help optimize the use of Composer. Specific methods include: 1. Dependency management optimization: AI analyzes dependencies, recommends the best version combination, and reduces conflicts. 2. Automated code generation: AI generates composer.json files that conform to best practices. 3. Improve code quality: AI detects potential problems, provides optimization suggestions, and improves code quality. These methods are implemented through machine learning and natural language processing technologies to help developers improve efficiency and code quality.

Steps to add and delete fields to MySQL tables Steps to add and delete fields to MySQL tables Apr 29, 2025 pm 04:15 PM

In MySQL, add fields using ALTERTABLEtable_nameADDCOLUMNnew_columnVARCHAR(255)AFTERexisting_column, delete fields using ALTERTABLEtable_nameDROPCOLUMNcolumn_to_drop. When adding fields, you need to specify a location to optimize query performance and data structure; before deleting fields, you need to confirm that the operation is irreversible; modifying table structure using online DDL, backup data, test environment, and low-load time periods is performance optimization and best practice.

What is the significance of the session_start() function? What is the significance of the session_start() function? May 03, 2025 am 12:18 AM

session_start()iscrucialinPHPformanagingusersessions.1)Itinitiatesanewsessionifnoneexists,2)resumesanexistingsession,and3)setsasessioncookieforcontinuityacrossrequests,enablingapplicationslikeuserauthenticationandpersonalizedcontent.

How to uninstall MySQL and clean residual files How to uninstall MySQL and clean residual files Apr 29, 2025 pm 04:03 PM

To safely and thoroughly uninstall MySQL and clean all residual files, follow the following steps: 1. Stop MySQL service; 2. Uninstall MySQL packages; 3. Clean configuration files and data directories; 4. Verify that the uninstallation is thorough.

An efficient way to batch insert data in MySQL An efficient way to batch insert data in MySQL Apr 29, 2025 pm 04:18 PM

Efficient methods for batch inserting data in MySQL include: 1. Using INSERTINTO...VALUES syntax, 2. Using LOADDATAINFILE command, 3. Using transaction processing, 4. Adjust batch size, 5. Disable indexing, 6. Using INSERTIGNORE or INSERT...ONDUPLICATEKEYUPDATE, these methods can significantly improve database operation efficiency.

How to use MySQL functions for data processing and calculation How to use MySQL functions for data processing and calculation Apr 29, 2025 pm 04:21 PM

MySQL functions can be used for data processing and calculation. 1. Basic usage includes string processing, date calculation and mathematical operations. 2. Advanced usage involves combining multiple functions to implement complex operations. 3. Performance optimization requires avoiding the use of functions in the WHERE clause and using GROUPBY and temporary tables.

Composer: The Package Manager for PHP Developers Composer: The Package Manager for PHP Developers May 02, 2025 am 12:23 AM

Composer is a dependency management tool for PHP, and manages project dependencies through composer.json file. 1) parse composer.json to obtain dependency information; 2) parse dependencies to form a dependency tree; 3) download and install dependencies from Packagist to the vendor directory; 4) generate composer.lock file to lock the dependency version to ensure team consistency and project maintainability.

See all articles