使用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下通过伪造http头破解防盗链的代码
Jul 03 PHP
用PHP将数据导入到Foxmail的实现代码
Sep 05 PHP
三个类概括PHP的五种设计模式
Sep 05 PHP
解析PHP中ob_start()函数的用法
Jun 24 PHP
php快速查找数据库中恶意代码的方法
Apr 01 PHP
Symfony2 session用法实例分析
Feb 04 PHP
php将一维数组转换为每3个连续值组成的二维数组
May 06 PHP
PHP文件下载实例代码浅析
Aug 17 PHP
CI框架实现优化文件上传及多文件上传的方法
Jan 04 PHP
Linux下 php7安装redis的方法
Nov 01 PHP
laravel withCount 统计关联数量的方法
Oct 10 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
Aug 17 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 checkbox 取值详细说明
2010/08/19 PHP
PHP学习笔记之二
2011/01/17 PHP
非常棒的10款jQuery 幻灯片插件
2011/06/14 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
学习Angularjs分页指令
2016/07/01 Javascript
jQuery事件委托之Safari
2016/07/05 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
微信小程序 实例开发总结
2017/04/26 Javascript
微信小程序 request接口的封装实例代码
2017/04/26 Javascript
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
JavaScript实现简单日历效果
2020/09/11 Javascript
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
python中使用enumerate函数遍历元素实例
2014/06/16 Python
Python的面向对象思想分析
2015/01/14 Python
Python设计模式之中介模式简单示例
2018/01/09 Python
Python爬取数据保存为Json格式的代码示例
2019/04/09 Python
Python OpenCV调用摄像头检测人脸并截图
2020/08/20 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
英国第一豪华护肤品牌:Elemis
2017/10/12 全球购物
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
创业计划书撰写原则
2014/01/25 职场文书
总账会计岗位职责
2014/03/13 职场文书
数字化校园建设方案
2014/05/03 职场文书
春游踏青活动方案
2014/08/14 职场文书
房地产经营管理专业自荐信
2014/09/02 职场文书
中秋节祝酒词
2015/08/12 职场文书
学习雷锋主题班会
2015/08/14 职场文书
安全生产培训心得体会
2016/01/18 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
2021/06/18 MySQL
总结Python变量的相关知识
2021/06/28 Python
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle