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

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

     

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

    2lang  api基本的原理就是1

    3Mode  only struts and data2

    3.1. Php code2

    4Java code3

    5mysqldump --help 参数7

    6参考13

     

     

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

    mysqldump更简单的..

    C:wampmysqlinmysqldump.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://blog.csdn.net/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 -- ";
                $sql.="INSERT INTO `$v` VALUES ";        
                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.="), ";
                }

     

    4. Java code

    Invoke param

    C:wampmysqlinmysqldump.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:wampmysqlinmysqldump.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:Windowsmy.ini C:Windowsmy.cnf C:wampmysqlmy.ini C:wampmysqlmy.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 ' ' from being

                          converted to ' ' (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

  • 相关阅读:
    .NET下的加密解密大全(1): 哈希加密
    orm fluentdata使用相关文章
    xml处理相关文章收藏
    Salty Fish(区间和)
    Fennec VS. Snuke
    Splitting Pile
    ST表(离线RMQ)
    Exponentiation(高精度大数)
    高斯消元(模板)
    Online Judge(字符串-格式)
  • 原文地址:https://www.cnblogs.com/attilax/p/5963523.html
Copyright © 2011-2022 走看看