使用php自动备份数据库表的实现方法


Posted in PHP onJuly 28, 2017

1、前言

mysql数据库的备份方式有很多;

例如:

1、使用mysqldump函数

mysqldump -u username -p dbname table1 table2 ... > BackupName.sql

dbname参数表示数据库的名称

table1和table2参数表示需要备份的表的名称,为空则整个数据库备份;

BackupName.sql参数表设计备份文件的名称,文件名前面可以加上一个绝对路径。通常将数据库被分成一个后缀名为sql的文件;

基本使用:

使用php自动备份数据库表的实现方法

2、管理工具

使用php自动备份数据库表的实现方法

备份数据库的方法很多,上面两种比较常见

而本次主要讲解如何通过php函数来自动备份数据库

2、相关函数介绍

2.1 、fopen

详情参考:http://www.w3school.com.cn/php/func_filesystem_fopen.asp

使用php自动备份数据库表的实现方法

2.2、array_keys

详情参考:http://www.w3school.com.cn/php/func_array_keys.asp

使用php自动备份数据库表的实现方法

2.3、array_values

使用php自动备份数据库表的实现方法

2.4、implode

详情参考:http://www.w3school.com.cn/php/func_string_implode.asp

使用php自动备份数据库表的实现方法

2.5、substr

详情参考:http://www.w3school.com.cn/php/func_string_substr.asp

使用php自动备份数据库表的实现方法

2.6、fwrite

详情参考:https://www.w3cschool.cn/php/func-filesystem-fwrite.html

使用php自动备份数据库表的实现方法

3、实现思路

使用php自动备份数据库表的实现方法

4、代码构成

/**
 * [copyDb description] 备份数据库
 * @param [type] $dbname [description] 数据库名
 * @param [type] $fileName [description] 存储的文件名
 * @return [type]   [description]
 */
public function copyDb($dbname, $fileName){
	$myfile = fopen($fileName, "w") or die("Unable to open file!");//打开存储文件
	$this->link->query("use {$dbname}");//切换数据库
	$this->changeDb($dbname);
	$tables = $this->link->query('show tables');//获取当期数据库所有表名称
	while($re = $tables->fetch(PDO::FETCH_ASSOC)){
		//var_dump($re);//查看数组构成
		$tableName = $re['Tables_in_'.$dbname];//构成特定的下标
		$sql = "show create table {$tableName};";
		$tableSql = $this->link->query($sql);

		fwrite($myfile, "DROP TABLE IF EXISTS `{$tableName}`;\r\n");//加入默认删除表的遇见
		//下面备份表结构,这个循环之执行一次
		while($re = $tableSql->fetch(PDO::FETCH_ASSOC)){
			// echo "<pre>";
			// var_dump($re);
			// echo "</pre>";
			echo "正在备份表{$re['Table']}结构<br/>";
			fwrite($myfile, $re['Create Table'].";\r\n\r\n");
			echo "正在备份表{$re['Table']}结构完成<br/>";
		}
		//下面备份表数据
		echo "正在备份表{$tableName}数据<br/>";
		$sql = "select * from {$tableName};";
		$valueSql = $this->link->query($sql);
		while($re = $valueSql->fetch(PDO::FETCH_ASSOC)){
			$keyArr = array_keys($re);//获得对应的键值
			$valueArr = array_values($re);//获得对应的值
	
			$keyStr = '';
			foreach ($keyArr as $key => $value) {
				$keyStr .= "`".$value."`,";
			}
			$keyStr = substr($keyStr,0,strlen($keyStr)-1); //取出最后一个逗号


			$valueStr = '';
			// var_dump($valueArr);
			foreach ($valueArr as $key => $value) {
				$valueStr .= "'".$value."',";
			}
			//以上的处理只是对应sql的写法

			$valueStr = substr($valueStr,0,strlen($valueStr)-1); //取出最后一个逗号
			$sql = "insert into `{$tableName}`({$keyStr}) values({$valueStr})";
			fwrite($myfile, $sql.";\r\n\r\n");
			
		}
		echo "正在备份表{$tableName}数据完成<br/>";
		echo "<br/><hr/>";
	}
	fclose($myfile);
}

5、结语

备份数据库的主要过程:

切换到对应的数据库;

使用show create table tableName,获得表结构,写到文件中;

然后查询所有的表数据,循环生成相对应sql语句,写到文件中;

试运行生成的sql文件;

以上这篇使用php自动备份数据库表的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP中对数据库操作的封装
Oct 09 PHP
PHP 应用程序的安全 -- 不能违反的四条安全规则
Nov 26 PHP
PHP CURL模拟GET及POST函数代码
Apr 25 PHP
Linux环境下搭建php开发环境的操作步骤
Jun 17 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
Jul 01 PHP
ThinkPHP学习笔记(一)ThinkPHP部署
Jun 22 PHP
php实现mysql备份恢复分卷处理的方法
Dec 26 PHP
CodeIgniter配置之database.php用法实例分析
Jan 20 PHP
使用phpQuery获取数组的实例
Mar 13 PHP
PHP对象相关知识总结
Apr 09 PHP
php实现的错误处理封装类实例
Jun 20 PHP
php中try catch捕获异常实例详解
Aug 06 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
Jul 27 #PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
Jul 27 #PHP
laravel 5.4中实现无限级分类的方法示例
Jul 27 #PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
Jul 27 #PHP
PHP实现的Redis多库选择功能单例类
Jul 27 #PHP
PHP策略模式定义与用法示例
Jul 27 #PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 #PHP
You might like
php中常用的预定义变量小结
2012/05/09 PHP
php中{}大括号是什么意思
2013/12/01 PHP
php操作(删除,提取,增加)zip文件方法详解
2015/03/12 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
phpcms的分类名称和类别名称的调用
2017/01/05 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
在textarea中显示html页面的javascript代码
2007/04/20 Javascript
入门基础学习 ExtJS笔记(一)
2010/11/11 Javascript
JavaScript 判断日期格式是否正确的实现代码
2011/07/04 Javascript
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
一个支付页面DEMO附截图
2014/07/22 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
非常棒的jQuery图片轮播效果
2016/04/17 Javascript
jquery+Jscex打造游戏力度条
2020/09/12 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
AngularJS中的作用域实例分析
2018/05/16 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
2018/09/16 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
2020/04/04 jQuery
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
酷! 程序员用Python带你玩转冲顶大会
2018/01/17 Python
Python matplotlib的使用并自定义colormap的方法
2018/12/13 Python
Django ORM 自定义 char 类型字段解析
2019/08/09 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
2019/12/13 Python
Python基于codecs模块实现文件读写案例解析
2020/05/11 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
Python应用自动化部署工具Fabric原理及使用解析
2020/11/30 Python
K近邻法(KNN)相关知识总结以及如何用python实现
2021/01/28 Python
HTML5触摸事件实现移动端简易进度条的实现方法
2018/05/04 HTML / CSS
电子商务专业自我鉴定
2013/12/18 职场文书
信息科学与技术专业求职信范文
2014/02/20 职场文书
竞选班干部的演讲稿
2014/04/24 职场文书
春节超市活动方案
2014/08/14 职场文书
会议开幕词
2015/01/28 职场文书
《将心比心》教学反思
2016/02/23 职场文书