zoukankan      html  css  js  c++  java
  • 将MySQL输出内容写入(重定向到)文件

    对于数据库管理者来说,有时需要根据查询结果生成一系列非常相似但数量较多的sql命令,然后执行。为此,就需要将查询结果进行格式化,并输出到外部文件中。

    对于select的查询结果,有个MySQL提供了直接的方法将查询结果写入到外部文件,其基本形式为

    select * INTO OUTFILE 'file_name' from tab_list 

    我们还可以将查询结果进行一定的修饰,这要用到各种MySQL的内置函数,例如字符串函数和算数函数。

    但是,有时我们的查询结果是用“show”命令得到的(例如show grants for 'user'@'host')时就不能使用上面的方法将查询结果输出到外部文件了。不过,根据MySQL说明书的提示,通过API访问MySQL的客户端程序,对于show命令返回的结果和select命令返回的结果都按相同的方式处理,因此我想到了通过PHP脚本来将一批show命令的结果写入外部文件。下面以一个具体问题来介绍我的处理方法。

    在复制MySQL数据库时,如果希望将源MySQL Server的用户定义复制到目的Server时,就要获得每个定义用户的sql命令,然后执行这些sql命令,将命令产生的结果输出。下面是我写的 PHP脚本batch_sql_output.php,可以用php.exe直接在命令行执行php.exe batch_sql_output.php > output,将输出重定向的数据库外的文档

    <?php
    $sqlhost="localhost";
    // $database="mysql";
    $sqluser="admin";
    $sqlpass="adminpass";
    $mysql_link = @mysql_connect($sqlhost,$sqluser,$sqlpass) or die("Could not connect data-server: " . mysql_error());
    // mysql_select_db($database, $mysql_link) or die ('Can\'t use database "'.$database.'" : '.mysql_error());

    $preSql = "SELECT concat(\"SHOW GRANTS FOR '\",User,\"'@'\",Host,\"'\") as statement FROM mysql.user ORDER BY User,Host";
    //die( $preSql);
    $preResult = mysql_query($preSql) or print($preSql."\npreSql failed: " . mysql_error()."\n");
    while ($preResultLine = mysql_fetch_array($preResult, MYSQL_ASSOC)) {
    $result = mysql_query($preResultLine['statement']) or print($preResultLine['statement']."\nQuery failed: " . mysql_error()."\n");
    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
    foreach ($line as $col_value) {
    echo $col_value."\n";
    }
    }
    }
    mysql_close($mysql_link);
    ?>

  • 相关阅读:
    《机器学习实战》K近邻算法
    第 4 章 单例模式
    第 3 章 闭包和高阶函数
    第2章 this 、 call 和 apply
    第1章 面向对象的JavaScript
    前言 发展历史
    Linux常用的基本命令
    VLSM
    IP编址和子网划分
    RADIUS操作命令
  • 原文地址:https://www.cnblogs.com/zhouwenwu/p/2437435.html
Copyright © 2011-2022 走看看