zoukankan      html  css  js  c++  java
  • php备份Mysql数据库

    1、本地环境

    web:apache
    php:PHP 7.0.10 (cli) (built: Aug 18 2016 09:48:53) ( ZTS )
    mysql: 5.7.14
    

    2、基本思路

    • 获取备份数据表名
    • 获取备份表结构
    • 获取数据
    • 写入数据到文件

    3、获取表名

    • 获取所有数据表名,可以在页面上做一个选择数据表的功能,选择部分数据表。
    //使用pdo连接数据库
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
    
    //查询所有的数据表名
    $tables = $pdo->query('SHOW TABLE STATUS')->fetchAll(PDO::FETCH_ASSOC);
    
    //数据结果如下:
    array (
      0 => 
      array (
        'Name' => 'article',
        'Engine' => 'MyISAM',
        'Version' => '10',
        'Row_format' => 'Dynamic',
        'Rows' => '0',
        'Avg_row_length' => '0',
        'Data_length' => '0',
        'Max_data_length' => '281474976710655',
        'Index_length' => '1024',
        'Data_free' => '0',
        'Auto_increment' => '1',
        'Create_time' => '2018-11-28 15:52:30',
        'Update_time' => '2018-11-28 15:52:30',
        'Check_time' => NULL,
        'Collation' => 'utf8mb4_general_ci',
        'Checksum' => NULL,
        'Create_options' => '',
        'Comment' => '',
      ),
      1 => 
      array (
        'Name' => 'user',
         ...
      ),
    )
    

    4、获取表的表结构

    • 这里以user表为例
    //使用pdo连接数据库
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
    
    //查询表结构
    $struct = $pdo->query('SHOW CREATE TABLE user')->fetchAll(PDO::FETCH_ASSOC);
    
    //结果如下:
    array (
      0 => 
      array (
        'Table' => 'user',
        'Create Table' => 'CREATE TABLE `user` (
      `userId` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `userName` varchar(50) DEFAULT NULL,
      PRIMARY KEY (`userId`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4',
      ),
    )
    
    //获取表结构字符串并写入到文件中
    $str = $struct[0]['Create Tabl'];
    
    //写入到文件中
    file_put_contents();//
    

    5、获取表中数据

    //使用pdo连接数据库
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
    
    //查询数据,以user表为主,如果数据量大的话采用分页查询
    $data = $pdo->query('SELECT * FROM `user`')->fetchAll(PDO::FETCH_ASSOC);
    
    //组装insert语句
    foreach($data as $row) {
        $row = array_map('addslashes', $row);
        $sql = "INSERT INTO `{$table}` VALUES ('" . str_replace(array("
    ","
    "),array('
    ','
    '),implode("', '", $row)) . "');
    ";
        $sql = "INSERT INTO `{$table}` VALUES ({$str});
    ";
        //写入到文件
        file_put_contents();
    }
    
    • 说明:上面转义字段时,如果字段中null值在转义时会转成空字符串,需要注意一下,如果要求null不能转义成空字符串,可以自己拼接字符串,例如:
    $str = '';
    if ($row === null) {
        $str = 'null,';
    } else {
        $str .= $row . ',';
    }
    $str = rtrim($str);
    

    6、总结

    • 这种备份试适合对小数据量的数据进行备份,如有大量的数据备份还需要进行一定的优化
    • 后续完善后会继续修改本文章
  • 相关阅读:
    B. Xor of 3 题解(思维+构造)
    小 L 与 GCD 题解(数学 hard)
    F. Clear The Matrix 题解(状压dp)
    小顶堆与大顶堆的自定义cmp函数
    字符指针、字符数组
    python中创建dict对象
    中缀表达式转后缀表达式
    vue中keep-alive,include的缓存问题
    vue 冒号 :、@、# 是什么意思? v-bind v-on v-slot v-是指令
    vue 自定义指令 v-
  • 原文地址:https://www.cnblogs.com/zhangjianqiang/p/10032813.html
Copyright © 2011-2022 走看看