使用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循环输出数据库内容的代码
May 24 PHP
探讨:如何使用PhpDocumentor生成文档
Jun 25 PHP
ThinkPHP3.1基础知识快速入门
Jun 19 PHP
给ECShop添加最新评论
Jan 07 PHP
PHP单态模式简单用法示例
Nov 16 PHP
php实现base64图片上传方式实例代码
Feb 22 PHP
PHP获取路径和目录的方法总结【必看篇】
Mar 04 PHP
PHP中常用的魔术方法
Apr 28 PHP
PHP调用API接口实现天气查询功能的示例
Sep 21 PHP
Laravel框架中自定义模板指令总结
Dec 17 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
Apr 08 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
Apr 09 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实现paypal整合方法
2010/11/28 PHP
PHP随机字符串生成代码(包括大小写字母)
2013/06/24 PHP
php实现的Cookies操作类实例
2014/09/24 PHP
PHP长网址与短网址的实现方法
2017/10/13 PHP
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
jquery键盘事件使用介绍
2011/11/01 Javascript
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
JavaScript创建类/对象的几种方式概述及实例
2013/05/06 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
jquery 图片缩放拖动的简单实例
2014/01/08 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
2016/06/13 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
详谈ES6中的迭代器(Iterator)和生成器(Generator)
2017/07/31 Javascript
基于Vue实现支持按周切换的日历
2020/09/24 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
2019/01/19 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
python爬虫爬取网页表格数据
2018/03/07 Python
对numpy的array和python中自带的list之间相互转化详解
2018/04/13 Python
Python之列表的插入&amp;替换修改方法
2018/06/28 Python
详解使用python绘制混淆矩阵(confusion_matrix)
2019/07/14 Python
Python实现结构体代码实例
2020/02/10 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
Python 实现平台类游戏添加跳跃功能
2020/03/27 Python
python中setuptools的作用是什么
2020/06/19 Python
介绍一下EJB的分类及其各自的功能及应用
2016/08/23 面试题
商务英语本科生的自我评价分享
2013/11/15 职场文书
蟋蟀的住宅教学反思
2014/04/26 职场文书
保护环境的标语
2014/06/09 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
发展党员工作情况汇报
2014/10/28 职场文书
队列队形口号
2015/12/25 职场文书
个人房屋租赁合同(标准范本)
2019/09/16 职场文书
查看nginx配置文件路径和资源文件路径的方法
2021/03/31 Servers
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
2021/05/25 Python