› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
Tiande
V2EX  ›  MySQL

MySQL 执行大量语句时的正确姿势? mysql < *.sql ? 使用 GUI?

  •  
  •   Tiande · Jul 22, 2015 · 3524 views
    This topic created in 4117 days ago, the information mentioned may be changed or developed.

    如题。

    1.

    mysql < *.sql 
    # 这种方式不知道如何良好的 展示执行结果 以及 纠错
    

    2.
    在 MySQL 终端,上一行输出之后我就直接 <C-c> 的...
    希望能像使用 SQL Server 那样交互。


    求纠正姿势,靴靴 ;)

    PS:主要在 Mac 和 大便系Linux 用。

    4 replies  •  2015-07-22 23:26:33 +08:00
    mhycy
        1
    mhycy  
       Jul 22, 2015   ❤️ 1
    source sql-file-path.sql
    rainysia
        2
    rainysia  
       Jul 22, 2015   ❤️ 1
    以前写的. 要出错的你得加些去获取source的process
    #!/bin/bash

    `
    set -e
    LC_ALL=C
    LANG=C
    unset TZ
    TZBase=$(LC_ALL=C TZ=UTC0 date -R)
    UTdate=$(LC_ALL=C TZ=UTC0 date -d "$TZBase")
    TZdate=$(unset TZ ; LANG=C date -d "$TZBase")

    file_path="/home/www/db/bigdb/test/" #要导入的sql文件夹
    host="192.168.85.123" #要导入的mysql主机
    username="db4mysql" #mysql的用户名
    password="db4pwd" #mysql的密码
    dbname="sample" #mysql的数据库名
    now=$(date "+%s") #计时

    mysql_source(){
    for file_name in `ls -A $1`
    do
    seg_start_time=$(date "+%s")
    if [ -f "$1$file_name" ];then
    command="source $1$file_name"
    mysql -h${host} -u${username} -p${password} ${dbname} -e "$command"
    echo "source:" \"$1$file_name\" "is ok, It takes " `expr $(date "+%s") - ${seg_start_time}` " seconds"
    fi
    done

    echo "All sql is done! Total cost: " `expr $(date "+%s") - ${now}` " seconds"
    }
    echo "Universal Time is now: $UTdate."
    echo "Local time is now: $TZdate."
    mysql_source $file_path
    `
    Tiande
        3
    Tiande  
    OP
       Jul 22, 2015
    @rainysia
    非常感谢,我是希望能有跟踪调试的效果,不单是为了批量执行。


    就您的例子,我觉得直接用管道如何?

    『mysql -h${host} -u${username} -p${password} ${dbname}』
    完全可以写到 shell 参数里(既然是明文的话...):
    ```
    $ mysqlCon='mysql -h ...'
    ```

    ```
    $ cat *.sql | $mysqlCon > result.txt
    ```
    Tiande
        4
    Tiande  
    OP
       Jul 22, 2015
    @rainysia
    hh 又去查了下开头的几个参数

    『set -e』是个突破点,出错就停止运行了,谢谢!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3267 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 04:32 · PVG 12:32 · LAX 21:32 · JFK 00:32
    ♥ Do have faith in what you're doing.