(1)定义一个db_dump函数如下:

<?PHP
function db_dump($host,$user,$pwd,$db) {
$mysqlconlink = mysql_connect($host,$user,$pwd , true);
if (!$mysqlconlink)
echo sprintf('No MySQL connection: %s',mysql_error())."<br/>";
mysql_set_charset( 'utf8', $mysqlconlink );
$mysqldblink = mysql_select_db($db,$mysqlconlink);
if (!$mysqldblink)
echo sprintf('No MySQL connection to database: %s',mysql_error())."<br/>";
$tabelstobackup=array();
$result=mysql_query("SHOW TABLES FROM `$db`");
if (!$result)
echo sprintf('Database error %1$s for query %2$s', mysql_error(), "SHOW TABLE STATUS FROM `$db`;")."<br/>";
while ($data = mysql_fetch_row($result)) {
$tabelstobackup[]=$data[0];
}
if (count($tabelstobackup)>0) {
$result=mysql_query("SHOW TABLE STATUS FROM `$db`");
if (!$result)
echo sprintf('Database error %1$s for query %2$s', mysql_error(), "SHOW TABLE STATUS FROM `$db`;")."<br/>";
while ($data = mysql_fetch_assoc($result)) {
$status[$data['Name']]=$data;
}
if ($file = fopen("$db.sql", 'wb')) {
fwrite($file, "-- ---------------------------------------------------------\n");
fwrite($file, "-- Database Name: $db\n");
fwrite($file, "-- ---------------------------------------------------------\n\n");
fwrite($file, "/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;\n");
fwrite($file, "/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;\n");
fwrite($file, "/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;\n");
fwrite($file, "/*!40101 SET NAMES '".mysql_client_encoding()."' */;\n");
fwrite($file, "/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;\n");
fwrite($file, "/*!40103 SET TIME_ZONE='".mysql_result(mysql_query("SELECT @@time_zone"),0)."' */;\n");
fwrite($file, "/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;\n");
fwrite($file, "/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;\n");
fwrite($file, "/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;\n");
fwrite($file, "/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;\n\n");
foreach($tabelstobackup as $table) {
echo sprintf('Dump database table "%s"',$table)."<br/>";
need_free_memory(($status[$table]['Data_length']+$status[$table]['Index_length'])*3);
_db_dump_table($table,$status[$table],$file);
}
fwrite($file, "\n");
fwrite($file, "/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;\n");
fwrite($file, "/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;\n");
fwrite($file, "/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;\n");
fwrite($file, "/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;\n");
fwrite($file, "/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;\n");
fwrite($file, "/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;\n");
fwrite($file, "/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;\n");
fwrite($file, "/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;\n");
fclose($file);
echo 'Database dump done!'."<br/>";
} else {
echo 'Can not create database dump!'."<br/>";
}
} else {
echo 'No tables to dump'."<br/>";
}
}
function _db_dump_table($table,$status,$file) {
fwrite($file, "\n");
fwrite($file, "--\n");
fwrite($file, "-- Table structure for table $table\n");
fwrite($file, "--\n\n");
fwrite($file, "DROP TABLE IF EXISTS `" . $table . "`;\n");
fwrite($file, "/*!40101 SET @saved_cs_client = @@character_set_client */;\n");
fwrite($file, "/*!40101 SET character_set_client = '".mysql_client_encoding()."' */;\n");
$result=mysql_query("SHOW CREATE TABLE `".$table."`");
if (!$result) {
echo sprintf('Database error %1$s for query %2$s', mysql_error(), "SHOW CREATE TABLE `".$table."`")."<br/>";
return false;
}
$tablestruc=mysql_fetch_assoc($result);
fwrite($file, $tablestruc['Create Table'].";\n");
fwrite($file, "/*!40101 SET character_set_client = @saved_cs_client */;\n");
$result=mysql_query("SELECT * FROM `".$table."`");
if (!$result) {
echo sprintf('Database error %1$s for query %2$s', mysql_error(), "SELECT * FROM `".$table."`")."<br/>";
return false;
}
fwrite($file, "--\n");
fwrite($file, "-- Dumping data for table $table\n");
fwrite($file, "--\n\n");
if ($status['Engine']=='MyISAM')
fwrite($file, "/*!40000 ALTER TABLE `".$table."` DISABLE KEYS */;\n");
while ($data = mysql_fetch_assoc($result)) {
$keys = array();
$values = array();
foreach($data as $key => $value) {
if($value === NULL)
$value = "NULL";
elseif($value === "" or $value === false)
$value = "''";
elseif(!is_numeric($value))
$value = "'".mysql_real_escape_string($value)."'";
$values[] = $value;
}
fwrite($file, "INSERT INTO `".$table."` VALUES ( ".implode(", ",$values)." );\n");
}
if ($status['Engine']=='MyISAM')
fwrite($file, "/*!40000 ALTER TABLE ".$table." ENABLE KEYS */;\n");
}
function need_free_memory($memneed) {
if (!function_exists('memory_get_usage'))
return;
$needmemory=@memory_get_usage(true)+inbytes($memneed);
if ($needmemory>inbytes(ini_get('memory_limit'))) {
$newmemory=round($needmemory/1024/1024)+1 .'M';
if ($needmemory>=1073741824)
$newmemory=round($needmemory/1024/1024/1024) .'G';
if ($oldmem=@ini_set('memory_limit', $newmemory))
echo sprintf(__('Memory increased from %1$s to %2$s','backwpup'),$oldmem,@ini_get('memory_limit'))."<br/>";
else
echo sprintf(__('Can not increase memory limit is %1$s','backwpup'),@ini_get('memory_limit'))."<br/>";
}
}
function inbytes($value) {
$multi=strtoupper(substr(trim($value),-1));
$bytes=abs(intval(trim($value)));
if ($multi=='G')
$bytes=$bytes*1024*1024*1024;
if ($multi=='M')
$bytes=$bytes*1024*1024;
if ($multi=='K')
$bytes=$bytes*1024;
return $bytes;
}
?>

(2)使用方法:

db_dump('数据库服务器', '数据库用户名', '数据库密码', '数据库名');

PHP导出数据库方法的更多相关文章

  1. linux导入导出数据库方法 windows导入导出数据库方法

    1.使用管理员账号(sys)登录查询字符集信息 第一步:查询LinuxOracle数据库的字符集 select userenv('language') from dual; 查询结果集可能为:AMER ...

  2. plsql developer导入导出数据库方法

    导出步骤: 1 tools ->export user object 选择选项,导出.sql文件 2 tools ->export tables-> Oracle Export 选择 ...

  3. PL/SQLDeveloper导入导出Oracle数据库方法

    前一篇博客介绍了Navicat工具备份Oracle的方法,这篇博客介绍一下使用PL/SQL Developer工具导入导出Oracle数据库的方法. PL/SQL Developer是Oracle数据 ...

  4. mysql导出数据库几种方法

    方法一 cmd 到mysql bin目录下用 如下命令 mysqldump --opt -h192.168.0.156 -uusername -ppassword --skip-lock-tables ...

  5. dataTables.js 响应式/package-lock.json 作用/eclipse 目录和工作区建立连接/navcat 导出数据库/vscode 快速进入方法

    下班时间到啦! --下班都是他们的,而我,什么都没有. 什么周五放松日,什么五四青年节,什么都么有.继续总结一下今天遇到的问题. dataTables.js 响应式 使用dataTables.js创建 ...

  6. .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转

    .net mvc 站点自带简易SSL加密传输   因项目需要,传输数据需要加密,因此有了一些经验,现简易抽出来分享! 请求:前端cryptojs用rsa/aes 或 rsa/des加密,后端.net ...

  7. mysql 导入导出数据库、数据表的方法

    mysql 导入导出数据库.数据表的方法. Linux操作系统中,均在控制台下操作.1,导入数据库:前提:数据库和数据表要存在(已经被创建)(1)将数据表 test_user.sql 导入到test ...

  8. PL/SQL Developer导入导出Oracle数据库方法

    前一篇博客介绍了Navicat工具备份Oracle的方法.这篇博客介绍一下使用PL/SQL Developer工具导入导出Oracle数据库的方法. PL/SQL Developer是Oracle数据 ...

  9. MySQL修改root密码的多种方法, mysql 导出数据库(包含视图)

    方法1: 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass ...

随机推荐

  1. Socket接收大数据的方法

    byte[] buffer = new byte[BufferSize]; int bytesRead; // 读取的字节数 MemoryStream msStream = new MemoryStr ...

  2. 127.0.0.1\SQLEXPRESS连接异常

    当你的数据库为SQLEXPRESS时,在程序的数据库连接字符串的服务Server使用127.0.0.1\SQLEXPRESS时,如下: 它会显示一异常: Server Error in '/' App ...

  3. DataTable转换为List<T>或者DataRow转换为T

    这段时间开发ASP.NETMVC应用程序,从数据库获取数据之后,需要把记录转换为数据集在视图中显示.我们需要把DataTable转换为List<T>或者DataRow转换为T. 本篇中可以 ...

  4. 在DevExpress中使用WizardControl控件构建多步向导界面

    利用好的界面控件,往往能做成比较界面体验效果.在一些界面操作里面,我们可能把它拆分为几部进行处理,这个时候引入WizardControl向导控件应该是比较不错的选择了.多步的处理方式,可以让用户避免一 ...

  5. Redis系列四之复制

    一.复制基本配置与演示 为了避免单点故障,Redis提供了复制功能,可以实现自动同步的过程. 1.配置 同步后的数据分为两类:一类是主数据库(master),一类是从数据库(slave).主数据库可以 ...

  6. 提高生产性工具 - Model代码生成器(NET / JAVA) (一)

    原来在上一家公司,整整一年都在做工具,提高生产性,那个项目特别巨大,所以总共为老东家节约了500K左右的美金. (除了表扬之外,我个人什么好处都没有,领导们都升官发财了,郁闷) 到了新公司,也准备开发 ...

  7. 使用Toast的setText()实现倒计时

    点击按钮发送短信以后,倒计时3秒钟后退出Activity.本来想用弹出多个Toast的方法实现,后来发现效果不好,因为Toast.LENGTH_LONG显示3秒钟,Toast.LENGTH_SHORT ...

  8. Redis配置集群二(window)

    第一篇那redis的基础命令都差不多讲了一遍了,这篇就将怎么配置集群了,最后要达到的效果是一台主redis,还有几台从的redis,每次数据都是同步的,当主redis挂掉了,那么就会从几台从redis ...

  9. SQL 行列转换简单示例

    SQLSERVER 2005 以后提供了新的方式进行行列转换,下面是一个实例供参考: if object_id('tb') is not null drop table tbTest go ),季度 ...

  10. 64位系统使用Access 数据库文件的彻底解决方法

    最近,有PDF.NET用户问我怎么在64位系统下无法访问Access数据库的问题,我第一反应是我怎么没有遇到呢?今天一看自己的VS和Office都是32位版本的,所以在VS里面调试访问Access是没 ...