php mysql备份还原类_PHP实现MYSQL备份还原
/**
* 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备份还原相关推荐
- php mysql 数据库操作类_php mysql数据库操作类
分享一个本人一直在使用的一个mysql数据库操作类,比较初级,自己给别人做web网站的时候一直用的这个类,这个也是之前刚开始学习php的时候在网上找到的一个mysql数据库操作类,后来自己改了一些,比 ...
- mysql命令4类_【Mysql】mysql数据库的一些常用命令
一.启动与退出 1.进入MySQL: 输入命令:mysql -u root -p 直接输入安装时的密码即可. 此时的提示符是:mysql> 2.退出MySQL:quit或exit 3.数据库清屏 ...
- PHP中mysql查询全部过程_PHP到MySQL数据查询过程概述_MySQL
摘要 本文概述了从PHP层发起mysql查询请求到mysql server 返回结果集的工作流程,并简单描述了各层可能涉及到的动作和组件.从全局把握整个交互过程. PHP层到MySQL层 Php到sq ...
- PHP与MySQL连接菜鸟教程_PHP 连接 MySQL 数据库 | w3cschool菜鸟教程
PHP 连接 MySQL 数据库 使用 PHP mysqli_connect() 函数连接到一个 MySQL 数据库. 连接到一个 MySQL 数据库 在我们访问数据库中的数据之前,我们必须创建一个到 ...
- php mysql通用类_PHP连接MYSQL数据库通用类_PHP教程
include "mysql.php"; $db = new Dirver(); $db->DBLink($dbhost='localhost', $dbuser='root ...
- php简单的mysql类_PHP 简单mysql封装类
class Mysql { private $host ; private $user ; private $pwd ; private $dbName ; private $charset ; pr ...
- mysql 前缀索引 语法_PHP 之Mysql优化
一.建立索引 1.前缀索引 建立前缀索引的语法: alter table test add KEY (name(5)); name一定是字符类型(索引字段),5为长度 那好,如何确定取前面几个字符呢? ...
- php mysql 自动重连_PHP连接MySql闪断自动重连的方法
if(isset(self::$_instance) && !empty(self::$_instance)){ return self::$_instance; } 闪断后,因为 s ...
- PHP与MySQL连接菜鸟教程_PHP 连接 MySQL - PHP 教程 - 菜鸟学堂-脚本之家
PHP 连接 MySQL PHP 5 及以上版本建议使用以下方式连接 MySQL : MySQLi extension ("i" 意为 improved) PDO (PHP Dat ...
最新文章
- 浪潮、寒武纪联手,目标:新基建智算中心
- linux编译c++11的代码
- python爬虫代码实例-Python爬虫之urllib示例
- JVM学习之GC常用算法
- WSL(Windows Subsystem for Linux) 适用于Linux的Windows子系统
- Android虚拟机和Java虚拟机的区别
- android studio启动停止命令,那些停止Android Studio任务的方法(不断整理中)
- 实例50:python
- FastDFS java api调用
- 可用资源不足excel无法完成任务_项目资源管理包括哪些内容?
- Vue按需加载提升用户体验
- ROS下同时接收多个话题并实现相机和雷达的数据融合
- Qimage像素级操作
- Centos7安装WPS
- ROS路径规划(全局路径规划)
- 台湾--电话正则表达式
- 用 OpenCV 检测图像中各物体大小
- 网格布局(grid布局)
- 怎么成为游戏建模师?
- CPC广告业务架构总结
热门文章
- 极乐科技CEO应邀出席2017微信小程序生态课
- 【Linux_Fedora_系统管理系列】_1_用户登录和系统初始配置
- C#命名空间与类名的冲突
- sql优化技巧_使用这些查询优化技巧成为SQL向导
- isql 测试mysql连接_[libco] 协程库学习,测试连接 mysql
- bigquery 教程_bigquery挑战实验室教程从数据中获取见解
- leetcode 860. 柠檬水找零(贪心算法)
- leetcode990. 等式方程的可满足性(并查集)
- leetcode78. 子集(回溯)
- 回复邮件时如何不要邮件头_如何为阅读,点击和回复率达到100%的CEO设计一封冷邮件...