使用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制作的意见反馈表源码
Mar 11 PHP
PHP XML备份Mysql数据库
May 27 PHP
php 分页类 扩展代码
Jun 11 PHP
PHP 读取和修改大文件的某行内容的代码
Oct 30 PHP
Php图像处理类代码分享
Jan 19 PHP
php explode函数实例代码
Feb 27 PHP
php对大文件进行读取操作的实现代码
Jan 23 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
Sep 30 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
Feb 16 PHP
php+html5实现无刷新图片上传教程
Jan 22 PHP
php session 写入数据库
Feb 13 PHP
PHP日期和时间函数的使用示例详解
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多文件上传下载示例分享
2014/02/20 PHP
php管理nginx虚拟主机shell脚本实例
2014/11/19 PHP
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
简单js代码实现selece二级联动(推荐)
2014/02/18 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
使用Browserify配合jQuery进行编程的超级指南
2015/07/28 Javascript
jQuery拖动元素并对元素进行重新排序
2015/12/30 Javascript
jQuery 常见小例汇总
2016/12/14 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
javaScript封装的各种写法
2017/08/14 Javascript
mongoose更新对象的两种方法示例比较
2017/12/19 Javascript
微信小程序制作表格的方法
2019/02/14 Javascript
vue页面加载时的进度条功能(实例代码)
2020/01/13 Javascript
vue中activated的用法
2021/01/03 Vue.js
[55:03]LGD vs EG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
从零学Python之入门(五)缩进和选择
2014/05/27 Python
python基础教程之循环介绍
2014/08/29 Python
在Django中限制已登录用户的访问的方法
2015/07/23 Python
python中使用正则表达式的连接符示例代码
2017/10/10 Python
Python 查看文件的编码格式方法
2017/12/21 Python
Python实现对文件进行单词划分并去重排序操作示例
2018/07/10 Python
python获取引用对象的个数方式
2019/12/20 Python
Python流程控制常用工具详解
2020/02/24 Python
全球速卖通西班牙站:AliExpress西班牙
2017/10/30 全球购物
新加坡最佳婴儿用品店:Mamahood.com.sg
2018/08/26 全球购物
New delete 与malloc free 的联系与区别
2013/02/04 面试题
办公室经理岗位职责
2014/01/01 职场文书
幼儿教师培训感言
2014/03/08 职场文书
创建无烟单位实施方案
2014/03/29 职场文书
保护环境倡议书范文
2014/05/13 职场文书
政风行风建设责任书
2014/07/23 职场文书
流动人口婚育证明范本
2014/09/26 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
Win11更新失败并提示0xc1900101
2022/04/19 数码科技