我一般用二种方法:
①SQL文件数据备份;
点中你想要备份的数据库,按右键使用转存SQL文件,就会出现你要备份的提示框,保存即可;
直接找到mysql安装目录,找到data文件夹全部拷呗到你想备份的地方即可,还原就拷回来即可.适合大数据量的备份方法!
使用mysqldump函数
dbname参数表示数据库的名称
BackupName.sql参数表设计备份文件的名称,文件名前面可以加上一个绝对路径.通常将数据库被分成一个后缀名为sql的文件.
备份数据库的主要过程:
切换到对应的数据库;
使用show create table ?tableName,获得表结构,写到文件中;
然后查询所有的表数据,循环生成相对应sql语句,写到文件中;
试运行生成的sql文件.
分卷导出思路:统计sql语句变量的长度,按1个字符当成1
字节比较,如果大于设定分卷大小,则写入一个sql文件(我也不知道这样统计是否稳当,这也是借鉴其他的人的).
分卷导入思路:按行读取sql文件,将每一行当作完整的sql语句存到数组再循环执行插入数据库就可以了,但是在创建表语句分了多行,这个需要单独处理(就这个花了我好长时间的);
php
//宋正河
转载请注明出处
set_time_limit(0);
mysql_connect('localhost','root','root');
mysql_select_db('test');
$table_array=get_tables('test');
mysql_query('set
names
$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];
$backupdata='';
if($start=='0'){
$query="SHOW
CREATE
TABLE
+{$table}+";
$result
=
mysql_query($query);
$row
mysql_fetch_row($result);
$backupdata
.=
"DROP
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
VALUES
(";
for($i=0;
$i$numfields;
$i++){
"'"
mysql_escape_string($row[$i])
"'";
',';
");\n";
if(strlen($backupdata)+strlen($backupdata_tmp)
$filesize){
//写入文件并跳转
$file='data/'.$table.'-'.$part.'.sql';
file_put_contents($file,$backupdata);
echo
$file.'
备份完成,程序继续进行!';
$part++;
//分段
//表名
//起点
//跳转
"scriptlocation.href='?start={$start}table_index={$table_index}part={$part}';/script";
exit;
$backupdata.=$backupdata_tmp;
$start++;
if($backupdata){
$table.'备份完成!br
/';
$table_index++;
if($table_array[$table_index]){
"scriptlocation.href='?table_index={$table_index}';/script";
}else{
'恭喜你,数据库备份完毕!';
function
get_tables($db){
$tq
mysql_list_tables($db);
while($tr
mysql_fetch_row($tq)){
$arrtb[]
$tr[0];
return
$arrtb;
以上所述就是本文的全部内容了,希望大家能够喜欢.
$msgs[]="服务器备份目录为backup";
$msgs[]="对于较大的数据表,强烈建议使用分卷备份";
$msgs[]="只有选择备份到服务器,才能使用分卷备份功能";
show_msg($msgs);
①打开数据库备份页面
//php代码,导出数据库
public function exportSql() {
$dbName = C('DB_NAME'); //读取配置文件中的数据库用户名、密码、数据库名
$dbUser = C('DB_USER');
$dbPwd = C('DB_PWD');
$fileName = date("Y-m-d")."_".$dbName.".sql";
$dumpFileName = "./sql_backup/".$fileName;
exec("D:/xampp/mysql/bin/mysqldump -u$dbUser -p$dbPwd $dbName $dumpFileName");
此处执行mysqldump命令,导出数据库到$dumpFileName中,"D:/xampp/mysql/bin/"为mysqldump所在位置,"-u$dbUser -p$dbPwd"数据库的用户名和密码(中间不要加空格),$dbName为要导出数据库的名字
功能上有:
-
require_once("backdata.class.php");
$link
@mysql_connect("localhost","数据库名","密码")
or
die
('Could
not
connect
to
server.');
mysql_query("use
cms",$link);
mysql_query("set
$dbbck=new
backupData($link);//实例化它,只要一个链接标识就行了
//备份数据时,如想备份一个数据库中的所有表,你可这样写:
$dbbck-backupTables("cms","./",array('*'));
//备份数据时,如想备份一个数据库中的仅一个表时,你可这样写:
$dbbck-backupTables("cms","./",array('user'));
//备份数据时,如想备份一个数据库中的多个表时,你可这样写:
$dbbck-backupTables("cms","./",array('user','acl','informatoin'));
参1为:数据库名,
第三个为:你要保存那些表
ok...
以下为代码:
复制代码
代码如下:
/*
*简单的一个备份数据类
*author
FC
*/
class
backupData{
private
$mysql_link;//链接标识
$dbName;//数据库名
$dataDir;
//数据所要存放的目录
$tableNames;//表名
public
__construct($mysql_link){
$this-mysql_link
$mysql_link;
backupTables($dbName,$dataDir,$tableNames){//开始备份
$this-dbName
$dbName;
$this-dataDir
$this-tableNames
$tableNames;
$tables=$this-delarray($this-tableNames);
$sqls='';
foreach($tables
as
$tablename){
if($tablename==''){//表不存在时
continue;
//************************以下是形成SQL的前半部分**************
//如果存在表,就先删除
$sqls
$tablename;\n";
//读取表结构
$rs
mysql_query("SHOW
$tablename",$this-mysql_link);
$row=mysql_fetch_row($rs);
//获得表结构组成SQL
$sqls.=$row['1'].";\n\n";
unset($rs);
unset($row);
//************************以下是形成SQL的后半部分**************
//查寻出表中的所有数据
$rs=mysql_query("select
//表的字段个数
$field=mysql_num_fields($rs);
//形成此种SQL语句:"INSERT
+groups+
while($rows=mysql_fetch_row($rs)){
$comma='';//逗号
$sqls.="INSERT
+$tablename+
VALUES(";
for($i=0;$i$field;$i++){
$sqls.=$comma."'".$rows[$i]."'";
$comma=',';
$sqls.=");\n\n\n";
$backfilepath=$this-dataDir.date("Ymdhis",time()).'.sql';
//写入文件
$filehandle
fopen($backfilepath,
"w");
fwrite($filehandle,
$sqls);
fclose($filehandle);
delarray($array){//处理传入进来的数组
foreach($array
$tables){
if($tables=='*'){//所有的表(获得表名时不能按常规方式来组成一个数组)
$newtables=mysql_list_tables($this-dbName,$this-mysql_link);
$tableList
array();
for
($i
0;
$i
mysql_numrows($newtables);
array_push($tableList,mysql_tablename($newtables,
$i));
$tableList=$tableList;
$tableList=$array;
break;
$tableList;