atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js

1. 两个方法:: bat vs mysqldump(推荐)  vs   lang  api1

2. lang  api基本的原理就是1

3. Mode  only struts and data2

3.1. Php code2

4. Java code3

5. mysqldump --help 参数7

6. 参考13

1. 两个方法:: bat vs mysqldump(推荐)  vs   lang  api

mysqldump更简单的..

C:\wamp\mysql\bin\mysqldump.exe -uroot -proot --set-charset=utf8 wxb_site_new --result-file=c:\wxb_site_new.sql

Php 常用使用api法,大概是没cmd 环境吧...

2. lang  api基本的原理就是

Get db strtus

Get data gene insert statmemnt

Gene file

关键技术:

1. 首先要得到该数据库中有哪些表,所用函数 mysql_list_tables(),然后可以将获取的所有表名存到一个数组。

2. show create table 表名 可以获取表结构。

3. select * from 表名 取出所有记录,用循环拼接成 insert into... 语句。

作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

3. Mode  only struts and data

3.1. Php code

$rs=mysql_query("SHOW TABLES FROM $this->database");

$tb=$this->table_list();        
        foreach ($tb as $v) {

$rs=mysql_query("SHOW CREATE TABLE $v");

INSERT INTO语句

$tb=$this->tblist();        
        foreach ($tb as $v) {
            $rs=mysql_query("SELECT * FROM $v");

$sql.="-- 表的数据:$v --\r\n";
            $sql.="INSERT INTO `$v` VALUES\r\n";        
            while ($temp=mysql_fetch_row($rs)) {
                $sql.='(';
                foreach ($temp as $v2) {
                    if ($v2===null) {
                        $sql.="NULL,";
                    }
                    else {
                        $v2=mysql_real_escape_string($v2);
                        $sql.="'$v2',";
                    }                    
                }
                $sql=mb_substr($sql, 0, -1);
                $sql.="),\r\n";
            }

4. Java code

Invoke param

C:\wamp\mysql\bin\mysqldump.exe root root  wxb_site_new c:

package com.attilax.dbManager;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

import com.attilax.cmd.CmdX;

import com.attilax.exception.ExUtil;

import com.attilax.io.filex;

/**

* MySQL数据库的备份与恢复 缺陷:可能会被杀毒软件拦截

*

* @author attilax q214

* @version xxx

*/

public class DatabaseBackup {

/** MySQL安装目录的Bin目录的绝对路径 */

private String mysqlBinPath;

/** 访问MySQL数据库的用户名 */

private String username;

/** 访问MySQL数据库的密码 */

private String password;

private String sqlfilePath;

public DatabaseBackup(String mysqlBinPath, String username, String password) {

//if (!mysqlBinPath.endsWith(File.separator)) {

//mysqlBinPath = mysqlBinPath + File.separator;

//}

this.mysqlBinPath = mysqlBinPath;

this.username = username;

this.password = password;

}

/**

* 备份数据库

*

* @param output

*            输出流

* @param dbname

*            要备份的数据库名

*/

public void backup(OutputStream output, String dbname) {

String command = "  " + mysqlBinPath + " -u" + username + " -p"

+ password + " --set-charset=utf8 " + dbname

+ " --result-file=" + this.sqlfilePath + "\\"+dbname+"_back_"

+ filex.getUUidName() + ".sql";

System.out.println("--cmd :" + command);

//command="cmd /c dir";

try {

Process process = Runtime.getRuntime().exec(command);

CmdX.redirectEcho2Screen(process);

} catch (Exception e) {

e.printStackTrace();

ExUtil.throwEx(e);

}

}

/**

* 备份数据库,如果指定路径的文件不存在会自动生成

*

* @param dest

*            备份文件的路径

* @param dbname

*            要备份的数据库

*/

public void backup(String dest, String dbname) {

this.sqlfilePath = dest;

OutputStream out = null;

// new FileOutputStream(dest);

backup(out, dbname);

}

/**

* 恢复数据库

*

* @param input

*            输入流

* @param dbname

*            数据库名

*/

public void restore(InputStream input, String dbname) {

String command = "cmd /c " + mysqlBinPath + "mysql -u" + username

+ " -p" + password + " " + dbname;

try {

Process process = Runtime.getRuntime().exec(command);

OutputStream out = process.getOutputStream();

String line = null;

String outStr = null;

StringBuffer sb = new StringBuffer("");

BufferedReader br = new BufferedReader(new InputStreamReader(input,

"utf8"));

while ((line = br.readLine()) != null) {

sb.append(line + "/r/n");

}

outStr = sb.toString();

OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");

writer.write(outStr);

writer.flush();

out.close();

br.close();

writer.close();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 恢复数据库

*

* @param dest

*            备份文件的路径

* @param dbname

*            数据库名

*/

public void restore(String dest, String dbname) {

try {

InputStream input = new FileInputStream(dest);

restore(input, dbname);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

/**

* C:\wamp\mysql\bin\mysqldump.exe root root wxb_site_new

* c:\wxb_site_new.sql

*

* @param args

*/

public static void main(String[] args) {

// Configuration config = HibernateSessionFactory.getConfiguration();

String binPath = args[0];

String userName = args[1];

String pwd = args[2];

DatabaseBackup bak = new DatabaseBackup(binPath, userName, pwd);

bak.backup(args[4], args[3]);

// bak.restore("c:/ttt.sql", "ttt");

System.out.println("--f");

}

}

5. mysqldump --help 参数

mysqldump  Ver 10.11 Distrib 5.0.45, for Win32 (ia32)

By Igor Romanenko, Monty, Jani & Sinisa

This software comes with ABSOLUTELY NO WARRANTY. This is free software,

and you are welcome to modify and redistribute it under the GPL license

Dumping definition and data mysql database or table

Usage: mysqldump [OPTIONS] database [tables]

OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]

OR     mysqldump [OPTIONS] --all-databases [OPTIONS]

Default options are read from the following files in the given order:

C:\my.ini C:\my.cnf C:\Windows\my.ini C:\Windows\my.cnf C:\wamp\mysql\my.ini C:\wamp\mysql\my.cnf

The following groups are read: mysqldump client

The following options may be given as the first argument:

--print-defaultsPrint the program argument list and exit

--no-defaultsDon't read default options from any options file

--defaults-file=#Only read default options from the given file #

--defaults-extra-file=# Read this file after the global files are read

-a, --all           Deprecated. Use --create-options instead.

-A, --all-databases Dump all the databases. This will be same as --databases

with all databases selected.

--add-drop-database Add a 'DROP DATABASE' before each create.

--add-drop-table    Add a 'drop table' before each create.

--add-locks         Add locks around insert statements.

--allow-keywords    Allow creation of column names that are keywords.

--character-sets-dir=name

Directory where character sets are.

-i, --comments      Write additional information.

--compatible=name   Change the dump to be compatible with a given mode. By

default tables are dumped in a format optimized for

MySQL. Legal modes are: ansi, mysql323, mysql40,

postgresql, oracle, mssql, db2, maxdb, no_key_options,

no_table_options, no_field_options. One can use several

modes separated by commas. Note: Requires MySQL server

version 4.1.0 or higher. This option is ignored with

earlier server versions.

--compact           Give less verbose output (useful for debugging). Disables

structure comments and header/footer constructs.  Enables

options --skip-add-drop-table --no-set-names

--skip-disable-keys --skip-add-locks

-c, --complete-insert

Use complete insert statements.

-C, --compress      Use compression in server/client protocol.

--create-options    Include all MySQL specific create options.

-B, --databases     To dump several databases. Note the difference in usage;

In this case no tables are given. All name arguments are

regarded as databasenames. 'USE db_name;' will be

included in the output.

-#, --debug[=#]     This is a non-debug version. Catch this and exit

--debug-info        Print some debug info at exit.

--default-character-set=name

Set the default character set.

--delayed-insert    Insert rows with INSERT DELAYED;

--delete-master-logs

Delete logs on master after backup. This automatically

enables --master-data.

-K, --disable-keys  '/*!40000 ALTER TABLE tb_name DISABLE KEYS */; and

'/*!40000 ALTER TABLE tb_name ENABLE KEYS */; will be put

in the output.

-e, --extended-insert

Allows utilization of the new, much faster INSERT syntax.

--fields-terminated-by=name

Fields in the textfile are terminated by ...

--fields-enclosed-by=name

Fields in the importfile are enclosed by ...

--fields-optionally-enclosed-by=name

Fields in the i.file are opt. enclosed by ...

--fields-escaped-by=name

Fields in the i.file are escaped by ...

-x, --first-slave   Deprecated, renamed to --lock-all-tables.

-F, --flush-logs    Flush logs file in server before starting dump. Note that

if you dump many databases at once (using the option

--databases= or --all-databases), the logs will be

flushed for each database dumped. The exception is when

using --lock-all-tables or --master-data: in this case

the logs will be flushed only once, corresponding to the

moment all tables are locked. So if you want your dump

and the log flush to happen at the same exact moment you

should use --lock-all-tables or --master-data with

--flush-logs

--flush-privileges  Emit a FLUSH PRIVILEGES statement after dumping the mysql

database.  This option should be used any time the dump

contains the mysql database and any other database that

depends on the data in the mysql database for proper

restore.

-f, --force         Continue even if we get an sql-error.

-?, --help          Display this help message and exit.

--hex-blob          Dump binary strings (BINARY, VARBINARY, BLOB) in

hexadecimal format.

-h, --host=name     Connect to host.

--ignore-table=name Do not dump the specified table. To specify more than one

table to ignore, use the directive multiple times, once

for each table.  Each table must be specified with both

database and table names, e.g.

--ignore-table=database.table

--insert-ignore     Insert rows with INSERT IGNORE.

--lines-terminated-by=name

Lines in the i.file are terminated by ...

-x, --lock-all-tables

Locks all tables across all databases. This is achieved

by taking a global read lock for the duration of the

whole dump. Automatically turns --single-transaction and

--lock-tables off.

-l, --lock-tables   Lock all tables for read.

--log-error=name    Append warnings and errors to given file.

--master-data[=#]   This causes the binary log position and filename to be

appended to the output. If equal to 1, will print it as a

CHANGE MASTER command; if equal to 2, that command will

be prefixed with a comment symbol. This option will turn

--lock-all-tables on, unless --single-transaction is

specified too (in which case a global read lock is only

taken a short time at the beginning of the dump - don't

forget to read about --single-transaction below). In all

cases any action on logs will happen at the exact moment

of the dump.Option automatically turns --lock-tables off.

--max_allowed_packet=#

--net_buffer_length=#

--no-autocommit     Wrap tables with autocommit/commit statements.

-n, --no-create-db  'CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name;' will

not be put in the output. The above line will be added

otherwise, if --databases or --all-databases option was

given.}.

-t, --no-create-info

Don't write table creation info.

-d, --no-data       No row information.

-N, --no-set-names  Deprecated. Use --skip-set-charset instead.

--opt               Same as --add-drop-table, --add-locks, --create-options,

--quick, --extended-insert, --lock-tables, --set-charset,

and --disable-keys. Enabled by default, disable with

--skip-opt.

--order-by-primary  Sorts each table's rows by primary key, or first unique

key, if such a key exists.  Useful when dumping a MyISAM

table to be loaded into an InnoDB table, but will make

the dump itself take considerably longer.

-p, --password[=name]

Password to use when connecting to server. If password is

not given it's solicited on the tty.

-W, --pipe          Use named pipes to connect to server.

-P, --port=#        Port number to use for connection.

--protocol=name     The protocol of connection (tcp,socket,pipe,memory).

-q, --quick         Don't buffer query, dump directly to stdout.

-Q, --quote-names   Quote table and column names with backticks (`).

-r, --result-file=name

Direct output to a given file. This option should be used

in MSDOS, because it prevents new line '\n' from being

converted to '\r\n' (carriage return + line feed).

-R, --routines      Dump stored routines (functions and procedures).

--set-charset       Add 'SET NAMES default_character_set' to the output.

Enabled by default; suppress with --skip-set-charset.

-O, --set-variable=name

Change the value of a variable. Please note that this

option is deprecated; you can set variables directly with

--variable-name=value.

--shared-memory-base-name=name

Base name of shared memory.

--single-transaction

Creates a consistent snapshot by dumping all tables in a

single transaction. Works ONLY for tables stored in

storage engines which support multiversioning (currently

only InnoDB does); the dump is NOT guaranteed to be

consistent for other storage engines. Option

automatically turns off --lock-tables.

--skip-opt          Disable --opt. Disables --add-drop-table, --add-locks,

--create-options, --quick, --extended-insert,

--lock-tables, --set-charset, and --disable-keys.

-S, --socket=name   Socket file to use for connection.

--ssl               Enable SSL for connection (automatically enabled with

other flags). Disable with --skip-ssl.

--ssl-ca=name       CA file in PEM format (check OpenSSL docs, implies

--ssl).

--ssl-capath=name   CA directory (check OpenSSL docs, implies --ssl).

--ssl-cert=name     X509 cert in PEM format (implies --ssl).

--ssl-cipher=name   SSL cipher to use (implies --ssl).

--ssl-key=name      X509 key in PEM format (implies --ssl).

--ssl-verify-server-cert

Verify server's "Common Name" in its cert against

hostname used when connecting. This option is disabled by

default.

-T, --tab=name      Creates tab separated textfile for each table to given

path. (creates .sql and .txt files). NOTE: This only

works if mysqldump is run on the same machine as the

mysqld daemon.

--tables            Overrides option --databases (-B).

--triggers          Dump triggers for each dumped table

--tz-utc            SET TIME_ZONE='+00:00' at top of dump to allow dumping of

TIMESTAMP data when a server has data in different time

zones or data is being moved between servers with

different time zones.

-u, --user=name     User for login if not current user.

-v, --verbose       Print info about the various stages.

-V, --version       Output version information and exit.

-w, --where=name    Dump only selected records; QUOTES mandatory!

-X, --xml           Dump a database as well formed XML.

Variables (--variable-name=value)

and boolean options {FALSE|TRUE}  Value (after reading options)

--------------------------------- -----------------------------

all                               TRUE

all-databases                     FALSE

add-drop-database                 FALSE

add-drop-table                    TRUE

add-locks                         TRUE

allow-keywords                    FALSE

character-sets-dir                (No default value)

comments                          TRUE

compatible                        (No default value)

compact                           FALSE

complete-insert                   FALSE

compress                          FALSE

create-options                    TRUE

databases                         FALSE

debug-info                        FALSE

default-character-set             utf8

delayed-insert                    FALSE

delete-master-logs                FALSE

disable-keys                      TRUE

extended-insert                   TRUE

fields-terminated-by              (No default value)

fields-enclosed-by                (No default value)

fields-optionally-enclosed-by     (No default value)

fields-escaped-by                 (No default value)

first-slave                       FALSE

flush-logs                        FALSE

flush-privileges                  FALSE

force                             FALSE

hex-blob                          FALSE

host                              (No default value)

insert-ignore                     FALSE

lines-terminated-by               (No default value)

lock-all-tables                   FALSE

lock-tables                       TRUE

log-error                         (No default value)

master-data                       0

max_allowed_packet                25165824

net_buffer_length                 1047551

no-autocommit                     FALSE

no-create-db                      FALSE

no-create-info                    FALSE

no-data                           FALSE

order-by-primary                  FALSE

port                              3306

quick                             TRUE

quote-names                       TRUE

routines                          FALSE

set-charset                       TRUE

shared-memory-base-name           (No default value)

single-transaction                FALSE

socket                            (No default value)

ssl                               FALSE

ssl-ca                            (No default value)

ssl-capath                        (No default value)

ssl-cert                          (No default value)

ssl-cipher                        (No default value)

ssl-key                           (No default value)

ssl-verify-server-cert            FALSE

tab                               (No default value)

triggers                          TRUE

tz-utc                            TRUE

user                              (No default value)

verbose                           FALSE

where                             (No default value)

6. 参考

php实现备份mysql数据库_MySQL_数据库专题_文档_源码天空.htm

php实现数据库备份导出成sql-代潇瑞博客.htm

php实现备份mysql数据库_MySQL_数据库专题_文档_源码天空.htm

标准输入、输出和错误输出 - huaijin - ITeye技术网站.htm

java备份还原mysql数据库(源码经过本人亲自测试通过)_功夫熊猫_新浪博客.htm

Java实现MySQL数据库备份_数据库技术_Linux公社-Linux系统门户网站.htm

atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js的更多相关文章

  1. 一个自动备份mysql数据库的bat文件内容

    自动备份mysql数据库,并已当前的日期时间为目录 copy过去, xcopy将近15年没有用dos命令,还是这么亲切 另 本方法是备份数据库文件,不是dump导出,然后再计划任务中使用,我用的是wa ...

  2. mysql数据库导入sql文件时提示“Error Code: 1153 - Got a packet bigger than 'max_allowed_packet' bytes”解决办法

    向mysql数据库中导入sql文件时,如果文件过大(几百M),会提示"Error Code: 1153 - Got a packet bigger than 'max_allowed_pac ...

  3. MySQL数据库中.SQL文件的导出方式

    转自:http://tech.watchstor.com/management-117401.htm 在MySQL数据库中导入SQL文件是件很麻烦的事情,但是这是一项大家非常值得学习的技术,本文就从最 ...

  4. Ubuntu mysql数据库导入sql文件

    在阿里云Ubuntu系统导入sql数据库文件 首先linux 下查看mysql相关目录 root@ubuntu14:~# whereis mysql mysql:  /usr/bin/mysql--- ...

  5. centos中Mysql数据库导入sql文件

    1.对于文件的导入,在Centos下里面的是首先要新建一个和文件相同名字的数据库. mysql>create database Student; 2.切换到需要导入sql文件的数据库 mysql ...

  6. Linux下备份MySQL数据库的Shell脚本

    数据库每天都想备份,手动备份太麻烦而又容易忘记,所以写了一个自动备份MySQL数据库的脚本,加入定时计划中,每天自运运行. 创建Shell脚本代码如下,命名为mysql_dump.sh #!/bin/ ...

  7. Atitit.跨语言数据库db  api兼容性 jdbc odbc ado oledb 增强方案

    Atitit.跨语言数据库db  api兼容性 jdbc odbc ado oledb 增强方案 1. 跨语言db api兼容性..1 2. 目前访问数据库的接口很多.比较常用的jdbc odbc 以 ...

  8. 使用shell定时自动备份mysql数据库

    #!/bin/bash id="root" #用户名 pwd="123456" #密码 dbs="blog.ewsd.cn dangjian.ewsd ...

  9. 批处理命令 BAT备份MySQL数据库

    批处理命令 BAT备份MySQL数据库 作者: 字体:[增加 减小] 类型:转载 时间:2009-07-23我要评论 MySQL数据的备份工具也许有很多,在这我要给大家分享一下通过DOS批处理命令和M ...

随机推荐

  1. 浅谈Java中final,finalized,finally

    final: final可以让你控制你的成员.方法或者是一个类是否可被覆写或继承等功能,这些特点使final在Java中拥有了一个不可或缺的地位,也是学习Java时必须要知道和掌握的关键字之一. fi ...

  2. REST SOAP XML-RPC分析比较

    本文的标题“REST与SOAP之比较”确实有些让人误解.REST是代表性状态传输的名称首字母缩写,与其说它是标准,不如说是一种风格.然而,在我的前一篇文章中,正如我们所讨论的,众多从事Web服务的软件 ...

  3. 【DFS】Codeforces Round #398 (Div. 2) C. Garland

    设sum是所有灯泡的亮度之和 有两种情况: 一种是存在结点U和V,U是V的祖先,并且U的子树权值和为sum/3*2,且U不是根,且V的子树权值和为sum/3. 另一种是存在结点U和V,他们之间没有祖先 ...

  4. 【贪心】【线性基】bzoj2844 albus就是要第一个出场

    引用题解:http://blog.csdn.net/PoPoQQQ/article/details/39829237 注意评论区. #include<cstdio> using names ...

  5. python3-开发面试题(python)6.23基础篇(2)

    1.请至少列举5个 PEP8 规范(越多越好). 一.代码编排 1.缩进.4个空格的缩进,不使用Tap,更不能混合使用Tap和空格 2.每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在 ...

  6. 通过python的logging模块输出日志文件

    import logging import sys #获取logger实例 logger = logging.getLogger("baseSpider") # 括号后面填运行的文 ...

  7. 分布式缓存DistributedCache的使用

    分布式缓存用于将使用的小文件首先分发到各个datanode节点上,然后利用map/reduce阶段的setup()方法将文件内容读入内存,加快程序执行.具体实现方法如下: http://demievi ...

  8. Activity组件(传递数据)

    (一) 1.效果图:点击按钮“调用第二个Activity”,转到第二页面,之后点击“返回数据”,将第二个页面的数据传到第一个页面         2. activity_main.xml <?x ...

  9. android中使用gdbserver调试c程序

    先废话两句,这篇文章可能有所缺陷,因为我并没有条件去测试动态库的调试.(主要是因为是自己的手机不想乱放各种so) 所以我只能说有空的话我会去进行下测试,这里就先这样了. 1.测试代码gdb-test. ...

  10. linux设备驱动:中断的实现

    一.什么是中断 中断分两种: 1)中断,又叫外部中断或异步中断,它的产生是由于外设向处理器发出中断请求.其中外部中断也有两种,这是由配置寄存器设定的:普通中断请求(IRQ)和快速中断请求(FIQ).一 ...