网站建设资讯

NEWS

网站建设资讯

php语句备份数据库,php备份数据库代码

php实现mysql数据库分表分段备份

分卷导出思路:统计sql语句变量的长度,按1个字符当成1

同江网站建设公司成都创新互联公司,同江网站设计制作,有大型网站制作公司丰富经验。已为同江超过千家提供企业网站建设服务。企业网站搭建\成都外贸网站建设要多少钱,请找那个售后服务好的同江做网站的公司定做!

字节比较,如果大于设定分卷大小,则写入一个sql文件(我也不知道这样统计是否稳当,这也是借鉴其他的人的)。

分卷导入思路:按行读取sql文件,将每一行当作完整的sql语句存到数组再循环执行插入数据库就可以了,但是在创建表语句分了多行,这个需要单独处理(就这个花了我好长时间的);

?php

//宋正河

转载请注明出处

set_time_limit(0);

header('content-type:text/html;charset=utf-8');

mysql_connect('localhost','root','root');

mysql_select_db('test');

$table_array=get_tables('test');

mysql_query('set

names

utf8');

$filesize=1024*1024*4;

$start=$_GET['start']?$_GET['start']:0;

$part=$_GET['part']?$_GET['part']:'1';

$table_index=$_GET['table_index']?$_GET['table_index']:'0';

$table=$table_array[$table_index];

$num=200000000;//这个数要足够大,可以是总记录数

$backupdata='';

if($start=='0'){

$query="SHOW

CREATE

TABLE

`{$table}`";

$result

=

mysql_query($query);

$row

=

mysql_fetch_row($result);

$backupdata

.=

"DROP

TABLE

IF

EXISTS

`{$table}`;\n"

.

$row[1]

.

";\n\n";

}

$limit=($start=='0')?'':"

limit

$start,$num

";

$query="select

*

from

`{$table}`

$limit

";

$result=mysql_query($query);

$numfields

=

mysql_num_fields($result);

//统计字段数

while($row=mysql_fetch_row($result)){

$comma

=

'';

//存储逗号

$backupdata_tmp

=

"INSERT

INTO

`{$table}`

VALUES

(";

for($i=0;

$i$numfields;

$i++){

$backupdata_tmp

.=

$comma

.

"'"

.

mysql_escape_string($row[$i])

.

"'";

$comma

=

',';

}

$backupdata_tmp

.=

");\n";

if(strlen($backupdata)+strlen($backupdata_tmp)

$filesize){

//写入文件并跳转

$file='data/'.$table.'-'.$part.'.sql';

file_put_contents($file,$backupdata);

echo

$file.'

备份完成,程序继续进行!';

$part++;

//分段

//表名

//起点

//跳转

sleep(3);

echo

"scriptlocation.href='?start={$start}table_index={$table_index}part={$part}';/script";

exit;

}

$backupdata.=$backupdata_tmp;

$start++;

}

if($backupdata){

$file='data/'.$table.'-'.$part.'.sql';

file_put_contents($file,$backupdata);

}

echo

$table.'备份完成!br

/';

sleep(2);

$table_index++;

if($table_array[$table_index]){

echo

"scriptlocation.href='?table_index={$table_index}';/script";

exit;

}else{

echo

'恭喜你,数据库备份完毕!';

}

function

get_tables($db){

$tq

=

mysql_list_tables($db);

while($tr

=

mysql_fetch_row($tq)){

$arrtb[]

=

$tr[0];

}

return

$arrtb;

}

?

以上所述就是本文的全部内容了,希望大家能够喜欢。

如何用php进行数据备份

1、如果服务器允许mysqldump 并且没有禁止PHP的shell_exec()这个函数的话

直接在PHP里面执行mysqldump就可以了。

2、通过mysql_query('show tables')的返回值遍历每个表,循环对每个表使用查询语句

select * into outfile '路径/文件名' from 表名

缺点是这样得到的是纯数据,恢复数据的时候你需要额外再写脚本

3、同样通过show tables返回表名,遍历每个表,通过select 语句查询,然后逐条结果处理,比如手工添加drop table 和create table 以及insert into等等,然后再写入文件。这样得到的备份数据是比较接近mysqldump的结果的,各种工具都可以用来恢复数据。缺点是如果数据库太大的话,效率不好说

怎样使用PHP自动备份数据库

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

例如:

1、使用mysqldump函数

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

dbname参数表示数据库的名称

table1和table2参数表示需要备份的表的名称,为空则整个数据库备份;

BackupName.sql参数表设计备份文件的名称,文件名前面可以加上一个绝对路径。通常将数据库被分成一个后缀名为sql的文件;

基本使用:

2、管理工具

php中数据库怎样备份数据库文件

$msgs[]="服务器备份目录为backup";

$msgs[]="对于较大的数据表,强烈建议使用分卷备份";

$msgs[]="只有选择备份到服务器,才能使用分卷备份功能";

show_msg($msgs);

php 代码备份数据库

?php

/*

**************function db_bak()********************

*  功能:备份指定的数据库中的指定表

*  输入(按传入参数解释):$db_name 要备份的数据库,$tb_array要备份的表,数组形式的,如果不是数组,将备份整个库。

$dir输出备份文件的目录,$filename备份文件名,$block_num指定分块大小(指一条insert语句包含几天数据)

*  输出:备份的数据表的sql语句文件,可用于还原

*/

function db_bak($mylink,$dbname,$tab_array="",$dir,$filename,$block_num=20){

mysql_select_db($dbname,$mylink) or db_error(mysql_error());

is_array($tab_array) or $tab_array=db_showtb($mylink,$dbname,true); //如果$tab_array不是数组,则取得整个库的表

if($dir){

if(!file_exists($dir)){

$flag=mkdir($dir);

if(!$flag)

return 2;

}

}

//检查数据表是否存在

foreach($tab_array as $tab)

db_e_tab($mylink,$dbname,$tab) or db_error($tab." is not exist!");

$fp=fopen($dir.$filename,"w");

foreach($tab_array as $tab){  

fputs($fp,"DROP TABLE IF EXISTS ".$tab.";\r\n");

$tabdef_array=mysql_fetch_array(mysql_query("SHOW CREATE TABLE ".$tab,$mylink));

fputs($fp,str_replace("\n","",$tabdef_array["Create Table"]).";\r\n"); 

fputs($fp,"LOCK TABLES ".$tab." WRITE;\r\n"); 

$getvalue_result=mysql_query("select * from ".$tab,$mylink);

if(mysql_num_rows($getvalue_result)){

$i=1;  

$p="";

$start_flag=true;

while($getvalue_array=mysql_fetch_row($getvalue_result)){

$values=join("','",array_map('db_data_check',$getvalue_array));

$start_flag  fputs($fp,"insert into ".$tab." values");

if($i$block_num){

fputs($fp,",('".$values."');\r\n");

$start_flag=true;

$i=0;

}else{

fputs($fp,$p."('".$values."')");

$start_flag=false;

$i++;

}

$p=$start_flag?"":","; 

}

$start_flag or fputs($fp,";\r\n");

}

fputs($fp,"UNLOCK TABLES;\r\n");  

}

fclose($fp);  

}

/*

**************function db_in()********************

*  功能:还原备份函数db_bak生成的数据库文件

*  输入(按传入参数解释):$db_name 要备份的数据库,$filename要还原的数据库文件

*  输出:将数据还原到数据库

*  原理:将文件分割成一个数组,然后逐条将数据导入数据库

*  警告:执行该函数会删除原来的数据表

*/

function db_in($mylink,$dbname,$filename){

if(!file_exists($filename)){

return 0;

}

db_e_db($mylink,$dbname) or (mysql_query("create database ".$dbname,$mylink)or db_error(mysql_error()));

mysql_select_db($dbname,$mylink);

$sql_array=file($filename);

foreach($sql_array as $sql){

mysql_query(trim($sql),$mylink) or db_error(mysql_error());

}

}

//我自己写的。可以参考哈


名称栏目:php语句备份数据库,php备份数据库代码
网页链接:http://njwzjz.com/article/hcppoe.html