使用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&amp;&amp;mysql)四
Oct 09 PHP
超小PHP小马小结(方便查找后门的朋友)
May 05 PHP
解析crontab php自动运行的方法
Jun 24 PHP
php增删改查示例自己写的demo
Sep 04 PHP
PHP两种去掉数组重复值的方法比较
Jun 19 PHP
php获取、检查类名、函数名、方法名的函数方法
Jun 25 PHP
php实现Mysql简易操作类
Oct 11 PHP
基于thinkPHP框架实现留言板的方法
Oct 17 PHP
PHP设计模式之抽象工厂模式实例分析
Mar 25 PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
May 09 PHP
php5.6.x到php7.0.x特性小结
Aug 17 PHP
用php如何解决大文件分片上传问题
Jul 07 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 debug 安装技巧
2011/04/30 PHP
Yii2单元测试用法示例
2016/11/12 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
Yii框架连表查询操作示例
2019/09/06 PHP
Javascript实现重力弹跳拖拽运动效果示例
2013/06/28 Javascript
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
JavaScript中的Primitive对象封装介绍
2014/12/31 Javascript
AngularJS 模型详细介绍及实例代码
2016/07/27 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
微信小程序 window_x64环境搭建
2016/09/30 Javascript
Node接收电子邮件的实例代码
2017/07/21 Javascript
学习JS中的DOM节点以及操作
2018/04/30 Javascript
移动端图片上传旋转、压缩问题的方法
2018/10/16 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
Vue 中获取当前时间并实时刷新的实现代码
2020/05/12 Javascript
微信小程序实现分页加载效果
2020/11/19 Javascript
使用Pyrex来扩展和加速Python程序的教程
2015/04/13 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
2017/07/27 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
tensorflow之并行读入数据详解
2020/02/05 Python
python标准库sys和OS的函数使用方法与实例详解
2020/02/12 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
Python按照list dict key进行排序过程解析
2020/04/04 Python
CSS实现鼠标滑过鼠标点击代码写法
2016/12/26 HTML / CSS
css3新单位vw、vh的使用教程
2018/03/23 HTML / CSS
Pedro官网:新加坡时尚品牌
2019/08/27 全球购物
可以使用抽象函数重写基类中的虚函数吗
2013/06/02 面试题
小学教师个人先进事迹材料
2014/05/17 职场文书
重大事项社会稳定风险评估方案
2014/06/15 职场文书
党的群众路线教育实践活动心得体会范文
2014/11/05 职场文书
解决Python中的modf()函数取小数部分不准确问题
2021/05/28 Python
Go遍历struct,map,slice的实现
2021/06/13 Golang
阿里云服务器部署mongodb的详细过程
2021/09/04 MongoDB