/**

* mysql备份*/

classMysqlBackup {function __construct($filename, $config) {$this->setFile($filename);$this->con($config);

}/**

* 输出信息*/

private function info($code, $msg) {$json = json_encode(array('code' => $code, 'msg' => $msg),JSON_UNESCAPED_UNICODE);exit($json);

}/**

* --------------------------------------------------

* 数据库

* --------------------------------------------------*/

private $dbHandle;private $database;/**

* 连接

* @param $config array(host,user,password,database);*/

private function con($config) {$this->dbHandle = mysqli_connect($config['host'], $config['user'], $config['password'], $config['database']);if ($this->dbHandle->connect_errno) {$this->info(-1, 'MySQL连接错误:' . $this->dbHandle->connect_error);

}$this->dbHandle->set_charset('utf8');$this->database = $config['database'];

}/**

* 自定义SQL

* @param $sql 条件语句

* @param $bind 条件绑定

* @param $resType 1:select,2:insert,3:delete/update*/

private function sql($sql, $resType = 1) {//执行

$result = $this->dbHandle->query($sql);//返回

if ($resType == 1) {return $result->fetch_all(MYSQLI_ASSOC);

}elseif ($resType == 2) {return $this->dbHandle->insert_id;

}elseif ($resType == 3) {return $this->dbHandle->affected_rows;

}

}/**

* 多语句SQL*/

private function sql_multi($sql) {$result = $this->dbHandle->multi_query($sql);if ($result) {while ($this->dbHandle->more_results() && $this->dbHandle->next_result()) {

}return true;

}else{return false;

}

}/**

* --------------------------------------------------

* 文件操作

* --------------------------------------------------*/

private $filename;/**

* 设置文件*/

private function setFile($filename) {$this->filename = $filename;

}/**

* 写入*/

private function write($string) {//句柄

static $handle = null;if (!$handle) {$handle = fopen($this->filename, 'w+');

}//写入

$res = fwrite($handle, $string);//返回

if ($res === false) {return false;

}return true;

}/**

* 读取*/

private functionread() {//句柄

static $handle = null;if (!$handle) {$handle = fopen($this->filename, 'r');

}//读取

$res = fgets($handle);return substr($res, 0, -strlen($this->split));

}/**

* --------------------------------------------------

* 备份

* --------------------------------------------------*/

//SQL分隔符,不可更改

private $split = ";\r\n";/**

* 表列表*/

private functiongetTable() {//查询

$sql = "SHOW TABLES";$res = $this->sql($sql);//错误

if (!$res) {$this->info(-2, '查询表列表失败!');

}//格式化

$data = array();foreach ($res as $v) {$v = array_values($v);$data[] = $v[0];

}return $data;

}/**

* 表结构*/

private function tableCreate($table) {$res = $this->sql("SHOW CREATE TABLE `$table`");//错误

if (!$res) {$this->info(-2, "查询`$table`表结构失败!");

}//格式化

$res = array_values($res[0]);$res = str_replace(array("\r", "\n"), array('', ''), $res[1]) . $this->split;$drop_sql = "DROP TABLE IF EXISTS `$table`" . $this->split;$res = $drop_sql . $res;//写入

$res = $this->write($res);if (!$res) {$this->info(-3, "导出`$table`表结构失败!");

}return true;

}/**

* 表数据

* 主键模式,表必须设置主键*/

private function tableDataP($table, $start = 0, $len = 200) {//主键名

static $pkey = array();if (empty($pkey[$table])) {$sql = "SELECT k.column_name FROM information_schema.table_constraints t JOIN information_schema.key_column_usage k USING( CONSTRAINT_NAME, table_schema, TABLE_NAME )

WHERE t.constraint_type = 'PRIMARY KEY' AND t.table_schema = '" . $this->database . "' AND t.table_name = '$table' LIMIT 1";$res = $this->sql($sql);if (!$res) {$this->info(-2, '不支持[主键模式]导出数据!');

}$pkey[$table] = $res[0]['column_name'];

}//查询数据

$sql = "SELECT * FROM `$table` WHERE `{$pkey[$table]}` > $start LIMIT $len";$data = $this->sql($sql);//写入

if ($data) {$sql = '';foreach ($data as $row) {$key = '';$value = '';foreach ($row as $k => $v) {$v = $this->dbHandle->real_escape_string($v);$key .= "`$k`,";$value .= "'$v',";

}$sql .= "INSERT INTO `$table`(" . substr($key, 0, -1) . ") VALUES (" . substr($value, 0, -1) . ")" . $this->split;

}$res = $this->write($sql);if (!$res) {$this->info(-3, "导出`$table`表数据失败!");

}//返回

if (count($data) >= $len) {$start = $data[$len - 1][$pkey[$table]];return $start;

}

}//返回

return false;

}/**

* 表数据

* limit模式*/

private function tableDataL($table, $offset = 0, $len = 200) {//查询数据

$sql = "SELECT * FROM `$table` LIMIT $len OFFSET $offset";$data = $this->sql($sql);//写入

if ($data) {$sql = '';foreach ($data as $row) {$key = '';$value = '';foreach ($row as $k => $v) {$v = $this->dbHandle->real_escape_string($v);$key .= "`$k`,";$value .= "'$v',";

}$sql .= "INSERT INTO `$table`(" . substr($key, 0, -1) . ") VALUES (" . substr($value, 0, -1) . ")" . $this->split;

}$res = $this->write($sql);if (!$res) {$this->info(-3, "导出`$table`表数据失败!");

}//返回

if (count($data) >= $len) {$offset += $len;return $offset;

}

}//返回

return false;

}/**

* 导出*/

functionexport() {$tables = $this->getTable();//表结构

foreach ($tables as $v) {$this->tableCreate($v);

}//表数据

foreach ($tables as $v) {$res = 0;for ($i = 0; $i > -1; $i++) {$res = $this->tableDataP($v, $res);if (!$res) {break;

}

}

}return true;

}/**

* --------------------------------------------------

* 导入

* --------------------------------------------------*/

functionimport() {for ($i = 0; $i > -1; $i++) {//批量读取

$sql = '';for ($i = 0; $i < 50; $i++) {$res = $this->read();if (!$res) {break;

}$sql .= $res . ';';

}//批量执行

if ($sql) {$res = $this->sql_multi($sql);if (!$res) {echo $sql;$this->info(-3, '导入失败');

}

}else{break;

}

}return true;

}

}

php mysql备份还原类_PHP实现MYSQL备份还原相关推荐

  1. php mysql 数据库操作类_php mysql数据库操作类

    分享一个本人一直在使用的一个mysql数据库操作类,比较初级,自己给别人做web网站的时候一直用的这个类,这个也是之前刚开始学习php的时候在网上找到的一个mysql数据库操作类,后来自己改了一些,比 ...

  2. mysql命令4类_【Mysql】mysql数据库的一些常用命令

    一.启动与退出 1.进入MySQL: 输入命令:mysql -u root -p 直接输入安装时的密码即可. 此时的提示符是:mysql> 2.退出MySQL:quit或exit 3.数据库清屏 ...

  3. PHP中mysql查询全部过程_PHP到MySQL数据查询过程概述_MySQL

    摘要 本文概述了从PHP层发起mysql查询请求到mysql server 返回结果集的工作流程,并简单描述了各层可能涉及到的动作和组件.从全局把握整个交互过程. PHP层到MySQL层 Php到sq ...

  4. PHP与MySQL连接菜鸟教程_PHP 连接 MySQL 数据库 | w3cschool菜鸟教程

    PHP 连接 MySQL 数据库 使用 PHP mysqli_connect() 函数连接到一个 MySQL 数据库. 连接到一个 MySQL 数据库 在我们访问数据库中的数据之前,我们必须创建一个到 ...

  5. php mysql通用类_PHP连接MYSQL数据库通用类_PHP教程

    include "mysql.php"; $db = new Dirver(); $db->DBLink($dbhost='localhost', $dbuser='root ...

  6. php简单的mysql类_PHP 简单mysql封装类

    class Mysql { private $host ; private $user ; private $pwd ; private $dbName ; private $charset ; pr ...

  7. mysql 前缀索引 语法_PHP 之Mysql优化

    一.建立索引 1.前缀索引 建立前缀索引的语法: alter table test add KEY (name(5)); name一定是字符类型(索引字段),5为长度 那好,如何确定取前面几个字符呢? ...

  8. php mysql 自动重连_PHP连接MySql闪断自动重连的方法

    if(isset(self::$_instance) && !empty(self::$_instance)){ return self::$_instance; } 闪断后,因为 s ...

  9. PHP与MySQL连接菜鸟教程_PHP 连接 MySQL - PHP 教程 - 菜鸟学堂-脚本之家

    PHP 连接 MySQL PHP 5 及以上版本建议使用以下方式连接 MySQL : MySQLi extension ("i" 意为 improved) PDO (PHP Dat ...

最新文章

  1. 浪潮、寒武纪联手,目标:新基建智算中心
  2. linux编译c++11的代码
  3. python爬虫代码实例-Python爬虫之urllib示例
  4. JVM学习之GC常用算法
  5. WSL(Windows Subsystem for Linux) 适用于Linux的Windows子系统
  6. Android虚拟机和Java虚拟机的区别
  7. android studio启动停止命令,那些停止Android Studio任务的方法(不断整理中)
  8. 实例50:python
  9. FastDFS java api调用
  10. 可用资源不足excel无法完成任务_项目资源管理包括哪些内容?
  11. Vue按需加载提升用户体验
  12. ROS下同时接收多个话题并实现相机和雷达的数据融合
  13. Qimage像素级操作
  14. Centos7安装WPS
  15. ROS路径规划(全局路径规划)
  16. 台湾--电话正则表达式
  17. 用 OpenCV 检测图像中各物体大小
  18. 网格布局(grid布局)
  19. 怎么成为游戏建模师?
  20. CPC广告业务架构总结

热门文章

  1. 极乐科技CEO应邀出席2017微信小程序生态课
  2. 【Linux_Fedora_系统管理系列】_1_用户登录和系统初始配置
  3. C#命名空间与类名的冲突
  4. sql优化技巧_使用这些查询优化技巧成为SQL向导
  5. isql 测试mysql连接_[libco] 协程库学习,测试连接 mysql
  6. bigquery 教程_bigquery挑战实验室教程从数据中获取见解
  7. leetcode 860. 柠檬水找零(贪心算法)
  8. leetcode990. 等式方程的可满足性(并查集)
  9. leetcode78. 子集(回溯)
  10. 回复邮件时如何不要邮件头_如何为阅读,点击和回复率达到100%的CEO设计一封冷邮件...