PHP备份MySQL数据库
2015-10-11 16:54
651 查看
一般备份数据库都是直接把数据库所在的目录整个复制到另一个地发,这分为增量备份、差分备份;热备份、冷备份等。技术手段很多,都是在服务器上直接进行。但是如果我们无法登录服务器命令行,而且连mysql也进不去,那就只能通过脚本备份了(这里有个前提,你必须能上传文件到服务器,一般项目开发会给ftp)。这里我用php来演示。
脚本备份分为三种:导出文件到服务器、导出文件到客户端、浏览器直接输出sql语句
以上三种方式对权限要求是递减的:第一种必须要有写权限、第二种前提是sql文件大小低于服务器对文件传输的限制、第三种就是没有任何权限,直接输出裸文本,然后导出为文件
核心函数:获取指定表的结构及数据
第一种方法:导出到服务器
第二种方法:导出到客户端
第三种方法:以纯文本输出
以上方法的脚本均放在服务器上执行(一般服务器数据库不对外开放)
脚本备份分为三种:导出文件到服务器、导出文件到客户端、浏览器直接输出sql语句
以上三种方式对权限要求是递减的:第一种必须要有写权限、第二种前提是sql文件大小低于服务器对文件传输的限制、第三种就是没有任何权限,直接输出裸文本,然后导出为文件
核心函数:获取指定表的结构及数据
function dump_table($table) { $q2 = mysql_query("show create table $table"); $sql = mysql_fetch_array($q2); $mysql = "DROP TABLE IF EXISTS $table;\n"; $mysql.=$sql['Create Table'].";\n"; $q3 = mysql_query("select * from $table"); while($data=mysql_fetch_assoc($q3)) { $keys = array_keys($data); $keys = array_map('addslashes',$keys); $keys = join('`,`',$keys); $keys = "`".$keys."`"; $vals = array_values($data); $vals = array_map('addslashes',$vals); $vals = join("','",$vals); $vals = "'".$vals."'"; $mysql.="insert into `$table`($keys) values($vals);\n"; } $mysql.="\n"; return $mysql; }
第一种方法:导出到服务器
<?php error_reporting(0); $host = 'localhost'; $user = 'root'; $passwd = ''; $dbname = 'table'; $con = mysql_connect($host,$user,$passwd); mysql_select_db($dbname); $mysql = "set names utf8;\n"; mysql_query($mysql); $tables = mysql_query('show tables'); while($t=mysql_fetch_array($tables)) { $table = $t[0]; $mysql .= dump_table($table); } /*保存的文件名 */ $filename = "bak".date("Ymj").".sql"; /*将文件写入服务器,必须有写权限 */ $fp = fopen($filename,'w'); fputs($fp,$mysql); fclose($fp); echo "Bak success ".$filename;
第二种方法:导出到客户端
<?php error_reporting(0); $host = 'localhost'; $user = 'root'; $passwd = ''; $dbname = 'table'; $con = mysql_connect($host,$user,$passwd); mysql_select_db($dbname); $mysql = "set names utf8;\n"; mysql_query($mysql); $tables = mysql_query('show tables'); while($t=mysql_fetch_array($tables)) { $table = $t[0]; $mysql .= dump_table($table); } /*输出内容写入文件下载给客户端,受到服务器文件传输限制*/ $filename = "bak".date("Ymj").".sql"; header("Content-disposition:filename=".$filename); header("Content-type:application/octetstream"); header("Pragma:no-cache"); header("Expires:0"); echo $mysql;
第三种方法:以纯文本输出
<?php error_reporting(0); header('content-type:text/plain;charset=utf-8'); //这个必须有,否则乱码 $host = 'localhost'; $user = 'root'; $passwd = ''; $dbname = 'table'; $con = mysql_connect($host,$user,$passwd); mysql_select_db($dbname); $mysql = "set names utf8;\n"; mysql_query($mysql); $tables = mysql_query('show tables'); while($t=mysql_fetch_array($tables)) { $table = $t[0]; $mysql = dump_table($table); echo $mysql; //直接输出每张表的sql,没有任何限制,将得到的文本另存为sql即可 }
以上方法的脚本均放在服务器上执行(一般服务器数据库不对外开放)
相关文章推荐
- PHP打印调用堆栈信息,用于程序调试
- php中使用end方法报错
- ThinkPHP控制器分级
- Laravel 报错 :Parse error: syntax error, unexpected 'class' (T_CLASS), expecting identifier (T_STRING)
- 【PHP】找几个例子就能快速复习PHP基础知识
- php-判断一个文件是否存在,便于删除等操作
- php mkdir函数
- php实现Mysql简易操作类
- 【PHP】PHP MySQL问题 phpinfo() 没有显示MySQL模块
- ThinkPHP 3.2.3 实现搜索分页
- JTextpane 加入的行号
- php正则提取img所有属性值
- PHP第一季视频教程.李炎恢.学习笔记(四)(第2章 基本语法(3))
- PHP关闭Notice错误提示
- PHPSingleton模式的例子
- thinkPHP简单留言板
- PHP第一季视频教程.李炎恢.学习笔记(三)(第2章 基本语法(2))
- PostgreSQL+phpPgAdmin总是登录失败(login failed)
- PHP中字符串拆分和拼接
- php实现Mysql简易操作类