存档

文章标签 ‘导出’

php自动备份mysql并导出为sql的类

2015年3月31日 没有评论

<?php
session_start();
if(!strpos(‘x’.$_SESSION[‘ma_power’],’jiben,’) && $_SESSION[‘ma_name’]!=’admin’){redirect(“对不起,没有权限”,”redirect”,”index.php”);}
require_once(“../../config/config.all.php”);
//获取表的名称
function list_tables($database)
{
$rs = mysql_list_tables($database);
$tables = array();
while ($row = mysql_fetch_row($rs)) {
$tables[] = $row[0];
}
mysql_free_result($rs);
return $tables;
}
//导出数据库
function dump_table($table, $fp = null)
{
$need_close = false;
if (is_null($fp)) {
$fp = fopen($table . ‘.sql’, ‘w’);
$need_close = true;
}
$a=mysql_query(“show create table `{$table}`”);
$row=mysql_fetch_assoc($a);fwrite($fp,$row[‘Create Table’].’;’);//导出表结构
$rs = mysql_query(“SELECT * FROM `{$table}`”);
while ($row = mysql_fetch_row($rs)) {
fwrite($fp, get_insert_sql($table, $row));
}
mysql_free_result($rs);
if ($need_close) {
fclose($fp);
}
}
//导出表数据
function get_insert_sql($table, $row)
{
$sql = “INSERT INTO `{$table}` VALUES (“;
$values = array();
foreach ($row as $value) {
$values[] = “‘” . mysql_real_escape_string($value) . “‘”;
}
$sql .= implode(‘, ‘, $values) . “);”;
return $sql;
}
///////************************///////下面正式开始//////***************************///////
$database=$site[“dbname”];//数据库名
//设置日期为备份文件名
date_default_timezone_set(‘PRC’);
$t_name = date(“Ymd_His”);
$options=array(
‘hostname’ => $site[“dbhost”],//ip地址
‘charset’ => ‘utf8’,//编码
‘filename’ => “../../dbakup/”.$database.$t_name.’.sql’,//文件名
‘username’ => $site[“dbuser”],
‘password’ => $site[“dbpwd”]
);
mysql_connect($options[‘hostname’],$options[‘username’],$options[‘password’])or die(“不能连接数据库!”);
mysql_select_db($database) or die(“数据库名称错误!”);
mysql_query(“SET NAMES ‘{$options[‘charset’]}'”);
$tables = list_tables($database);
$filename = sprintf($options[‘filename’],$database);
$fp = fopen($filename, ‘w’);
foreach ($tables as $table) {
dump_table($table, $fp);
}
fclose($fp);
//下载sql文件
$file_name=$options[‘filename’];
header(“Content-type:application/octet-stream”);
header(“Content-Disposition:attachment;filename=”.$file_name);
readfile($file_name);
//删除服务器上的sql文件
unlink($file_name);
?>

分类: mysql优化 标签: ,

【实战】linux下mysql导入和导出数据库,source和mysqldump命令

2014年5月22日 没有评论

大数据库导入和导出可能比较麻烦,我们可以使用navicat或者phpmyadmin导出为sql之后再导入,但是比较大的数据库就会很麻烦,今天我需要先导出20G的数据库,再导入到另外一台服务器,很庞大~

先登录linux(我的是ubuntu),导出sql

普通导出命令:

mysqldump -hlocalhost -uroot -p --quick 数据库名称 > /backup/备份文件名.sql

压缩导出命令:

mysqldump -hlocalhost -uroot -p --quick 数据库名称 | gzip > /backup/备份文件名.sql.gz

使用quick参数可以快速导出,如果不使用则是先缓存到内存中再写入硬盘,而使用后直接写入硬盘,对大数据很有效、快速。

导出某个数据库中某个指定表:

mysqldump -hlocalhost -uroot -p --quick 数据库名称 表名称 | gzip > /backup/mysql.sql.gz

说明:

再导出的时候,如果/backup/没有权限会提示: permission denied
也许会提示:Got errno 32 on write 报错
可使用:

sudo chmod 777 /backup/

即可搞定权限。

导入sql则很简单:

1,mysql -uroot -p
2,输入root的密码
3,use 数据库名
4,source /backup/mysql.sql;

搞定导出和导入。

关联文章:
mysqldump选择gzip压缩之后为.tar.gz格式如何再次导入
http://www.zhanghongliang.com/article/1489

css.php