如何使用PHP自动备份数据库

如何使用PHP自动备份数据库

1、前言

mysql数据库的备份方式有很多;

例如:

1、使用mysqldump函数

mysqldump -u username -p dbname table1 table2 ...  > BackupName.sql

  1. dbname参数表示数据库的名称
  2. table1和table2参数表示需要备份的表的名称,为空则整个数据库备份;
  3. BackupName.sql参数表设计备份文件的名称,文件名前面可以加上一个绝对路径。通常将数据库被分成一个后缀名为sql的文件;

基本使用:

2、管理工具

备份数据库的方法很多,上面两种比较常见

而本次主要讲解如何通过php函数来自动备份数据库

2、相关函数介绍

2.1 、fopen

详情参考:http://www.w3school.com.cn/php/func_filesystem_fopen.asp

2.2、array_keys

详情参考:http://www.w3school.com.cn/php/func_array_keys.asp

2.3、array_values

2.4、implode

详情参考:http://www.w3school.com.cn/php/func_string_implode.asp

2.5、substr

详情参考:http://www.w3school.com.cn/php/func_string_substr.asp

2.6、fwrite

详情参考:https://www.w3cschool.cn/php/func-filesystem-fwrite.html

3、实现思路

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、结语

备份数据库的主要过程:

  1. 切换到对应的数据库;
  1. 使用show create table  tableName,获得表结构,写到文件中;
  1. 然后查询所有的表数据,循环生成相对应sql语句,写到文件中;
  1. 试运行生成的sql文件;
时间: 2024-12-24 10:46:52

如何使用PHP自动备份数据库的相关文章

mssql server 2005自动备份数据库

(转) (1)启动[sql server Management Studio],在[对象资源管理器]窗口里选择[管理]——[维护计划]选项. 2)右击[维护计划],在弹出的快捷菜单里选择[维护计划向导]选项 ,弹出如图所示的[维护计划向导]对话框,单击[下一步]按钮 3)弹出如图所示[选择目标服务器]对话框,在[名称]文本框里可以输入维护计划的名称:在[说明]文本框里可以输入维护计划的说明文字:[在服务器]文本框里可以输入要使用的服务器名:最后选择正确的身份证信息,单击[下一步]按钮. (4)弹

在linux和windows下自动备份数据库

摘要: 详细介绍在windows和linux下自动备份数据库的过程,希望可以让新手立即上手吧! 本文档内容共分为2大部分:linux和windows Linux和windows都分为:准备工作和操作阶段. Linux的详细步骤为:1.准备文件. 2.连接linux 3.实际操作也就是写命令 windows的详细步骤为:1.准备文件. 2.编辑任务和计划程序. 所用软件:notepad++,ssh 一.linux 1.准备工作(可以在windows下执行本操作) 创建三个文件 1.1文件名:exp

MSSQL Express版本自动备份数据库

由于Express版本的数据库没有自动备份数据库的功能,所以需要自己搭建好备份功能 一.具体原理: 1.利用SQL备份命令:Backup Database 2.使用sqlcmd执行备份命令 3.使用系统计划任务定时执行备份 二.具体操作步骤: 1.在数据库创建一个存储过程:sp_BackupDataBase 问:为什么要存储过程来执行Backup命令呢? 答:因为可以有更多的自定义操作 USE [master] GO /****** Object: StoredProcedure [dbo].[

SQL Server 定时自动备份数据库

在SQL Server中出于数据安全的考虑,所以需要定期的备份数据库,这篇文章介绍使用SQL Server 数据库代理中的作业定时自动备份数据库. 1.启动SQL Server代理服务,如下图: 绿色角标说明已启动. 2.右键“作业”,选择“新建作业”,弹出新建作业对话框,如下: 3.输入名称,所有者.类别默认不用修改,点击左侧“步骤”,在步骤面板中新建步骤,如下图: 输入步骤名(自定义)和命令. 命令代码: declare @name varchar(250) set @name='C:\My

mysql自动备份数据库与自动删除临时文件

mysql自动备份数据库与自动删除临时文件,有需要的朋友可以参考下. 一.每日23:00自动删除临时文件 首先查看一下crontab的任务列表: crontab -l 然后新建: crontab -e 添加一行: 00 03 * * * rm -rf /www/cmstest/my120/public/scripts/jpgraph/* 保存退出. 重启服务:  /etc/rc.d/init.d/crond restart 二.每日24:00自动备份数据库 利用系统crontab来定时执行备份文

MSSQL创建维护计划自动备份数据库

一,备份数据库 1,点击"管理-->维护计划"右键点击"新建任务计划" 2,根据自己的需求设置备份计划的自动执行时间,这里我设置的是每天凌晨12就执行备份计划. 3,添加"备份数据库"计划 4,设置"备份数据库"计划的相关选项 5,备份计划完成以后,可以马上执行一次完整备份. 二,还原数据库 1,右击你所需要还原的数据库,依次点击"任务-->还原-->数据库". 2,在源数据库选择还原最新

MSSQL自动备份数据库

最近项目中,需要用到MSSQL自动定时备份功能,本来想利用C#自己写一个的,但是听说在MSSQL2008中已经集成了功能强大的自动备份功能,于是便提刀上阵,狠狠地琢磨了一番: 首先,打开MSSQL2008,然后在“管理”大类中,双击“维护计划”子类,这时候,如果以前设置过任务计划的,就会显示出任务列表:如果没有,那么什么都不会显示. 在“维护计划”上右击,选择“新建维护计划”,然后输入一个名称,这里我们输入默认名称“MaintenancePlan”,然后确定.然后再工具栏中,在“常规”标签中,将

mysql实现自动备份数据库

1.新建.sh文件,内容是 # encoding: utf-8 #配置参数 USER=root #数据库用户名 PASSWORD=123456 #数据库用户密码 DATABASE=cnm #数据库名称 WEBMASTER="[email protected]" #管理员邮箱地址,用以发送备份失败消息提醒 BACKUP_DIR=/home/HuiLife_Backup #备份文件存储路径 LOGFILE=/home/HuiLife_Backup/backup.log #日志文件路径 DA

mysql自动备份数据库

可以选择设置需要备份的库,自动备份压缩,自动删除 7 天前的备份,需要使用 crontab 定时执行. #!/bin/bash # 要备份的数据库名,多个数据库用空格分开 databases=(db1 db2 db3) # 备份文件要保存的目录 basepath='/root/backup/mysql/' if [ ! -d "$basepath" ]; then mkdir -p "$basepath" fi # 循环databases数组 for db in $