使用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 相关文章推荐
Discuz 5.0 中读取纯真IP数据库函数分析
Mar 16 PHP
php 图片上添加透明度渐变的效果
Jun 29 PHP
php创建基本身份认证站点的方法详解
Jun 08 PHP
处理单名多值表单的详解
Jun 08 PHP
如何利用php array_multisort函数 对数据库结果进行复杂排序
Jun 08 PHP
php为字符串前后添加指定数量字符的方法
May 04 PHP
PHP实现的迷你漂流瓶
Jul 29 PHP
PHP 接入支付宝即时到账功能
Sep 18 PHP
Yii框架用户登录session丢失问题解决方法
Jan 07 PHP
ThinkPHP5 验证器的具体使用
May 31 PHP
php中的buffer缓冲区用法分析
May 31 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
Mar 23 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 采集书并合成txt格式的实现代码
2009/03/01 PHP
PHP 获取远程文件内容的函数代码
2010/03/24 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
laravel批量生成假数据的方法
2019/10/09 PHP
权威JavaScript 中的内存泄露模式
2007/08/13 Javascript
javascript 面向对象思想 附源码
2009/07/07 Javascript
JSON字符串和对象之间的转换详解
2015/05/26 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
AngularJS入门教程之AngularJS表达式
2016/04/18 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
2017/07/04 Javascript
使用js获取伪元素的content实例
2017/10/24 Javascript
vue中动态绑定表单元素的属性方法
2018/02/23 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
2019/12/04 Javascript
python发送邮件的实例代码(支持html、图片、附件)
2013/03/04 Python
Python常见数据结构详解
2014/07/24 Python
Python中常用信号signal类型实例
2018/01/25 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
Python 访问限制 private public的详细介绍
2018/10/16 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
python使用yaml 管理selenium元素的示例
2020/12/01 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
日本7net购物网:书籍、漫画、杂志、DVD、游戏邮购
2017/02/17 全球购物
美国礼品卡商城: Gift Card Mall
2017/08/25 全球购物
给定一个时间点,希望得到其他时间点
2013/11/07 面试题
建筑工程技术应届生求职信
2013/11/17 职场文书
打架检讨书50字
2014/01/11 职场文书
本科生职业生涯规划书范文
2014/01/21 职场文书
《跨越百年的美丽》教学反思
2014/02/11 职场文书
2014年元旦联欢会活动策划方案
2014/02/16 职场文书
股东授权委托书范本
2014/09/13 职场文书
党的群众路线教育实践活动总结大会主持词
2014/10/30 职场文书
父亲节寄语大全
2015/02/27 职场文书
经营场所证明范本
2015/06/19 职场文书
初中班主任工作随笔
2015/08/15 职场文书