V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
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 ·
    Tiande · 2015-07-22 14:49:53 +08:00 · 2839 次点击
    这是一个创建于 3397 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题。

    1.

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

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


    求纠正姿势,靴靴 ;)

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

    4 条回复    2015-07-22 23:26:33 +08:00
    mhycy
        1
    mhycy  
       2015-07-22 14:55:35 +08:00   ❤️ 1
    source sql-file-path.sql
    rainysia
        2
    rainysia  
       2015-07-22 22:14:01 +08:00   ❤️ 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
       2015-07-22 23:23:48 +08:00
    @rainysia
    非常感谢,我是希望能有跟踪调试的效果,不单是为了批量执行。


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

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

    ```
    $ cat *.sql | $mysqlCon > result.txt
    ```
    Tiande
        4
    Tiande  
    OP
       2015-07-22 23:26:33 +08:00
    @rainysia
    hh 又去查了下开头的几个参数

    『set -e』是个突破点,出错就停止运行了,谢谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2502 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:36 · PVG 23:36 · LAX 07:36 · JFK 10:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.