他可以直接用mysql_workbench 6以上的版本直接导入文件夹的方式来导入多个sql文件. 但是在我的服务器上不可能为了批量导这个sql单
因为项目协同开发, 同事发了一个项目的sql文件过来, 打开一看是个目录, 里面有上百个数据库.每个数据库作为一个单独的文件.
每个sql文件里面都有
create database if not exists `xxxx`
use `xxxx`;
他可以直接用mysql_workbench 6以上的版本直接导入文件夹的方式来导入多个sql文件. 但是在我的服务器上不可能为了批量导这个sql单独装个gui的workbench.
于是写个shell吧, 改里面的host,username和password为你对应的即可.
dbname这里,默认是sample, mysql里面的sample表. 实际数据不是导入到这里面的, 因为我要导入的sql文件里面都已经有了创建db. 如果你是要导入到某一个数据库的多个表, 可以修改dbname为你对应的数据库名
#!/bin/bash
#author rainysia
#date 2014-11-14 10:26:27
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/db/test/ #要导入的sql文件夹
host=192.168.85.123 #要导入的mysql主机
username=dbroot #mysql的用户名
password=db1t#2w$3r@4#t #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
测试一下,
root@debian:/home/sh# ./mysql_source.sh
universal time is now: fri nov 14 03:10:49 utc 2014.
local time is now: fri nov 14 11:10:49 cst 2014.
source: /home/db/test/hml2.sql is ok, it takes 18 seconds
source: /home/db/test/hml3.sql is ok, it takes 19 seconds
source: /home/db/test/hml4.sql is ok, it takes 18 seconds
all sql is done! total costs: 55 seconds
接着发现可以导入了, 然后同事又需要重装某个app, 需要删除其中某个数据库下的所有表. 因为她权限不够, 不能够直接删除数据库, 只能一个一个手动drop table. 但是有2000多个table.
本来打算使用
select concat('drop table if exists ', table_name, ';') from information_schema.tables where table_schema='cs_china_111数据库名';
的方式来删除所有table, 发现没有生效.
于是还是还是使用上面的shell. 把路径随便换个, 现在先去把需要drop的table的sql给写出来.
先去导出这个数据库,在终端下使用mysqldump dbroot是我的数据库用户名, cs_china_1111是我要导出的数据库, -d -add-drop-table 是不导出数据只导出结构
#mysqldump -udbroot -p cs_china_1111 -d --add-drop-table > cs_china_1111.sql
然后使用grep来过滤一次, 因为导出的sql里面含有了drop table
#find ./ -name cs_china_1111.sql | xargs grep drop table if > cs_china_1111_drop_table.sql
接下来用之前的shell, 把dbname 改成需要删除的数据库名, 运行一下即可.
--------------------------------------分割线 --------------------------------------
ubuntu 14.04下安装mysql
《mysql权威指南(原书第2版)》清晰中文扫描版 pdf
ubuntu 14.04 lts 安装 lnmp nginx\php5 (php-fpm)\mysql
ubuntu 14.04下搭建mysql主从服务器
ubuntu 12.04 lts 构建高可用分布式 mysql 集群
ubuntu 12.04下源代码安装mysql5.6以及python-mysqldb
mysql-5.5.38通用二进制安装
--------------------------------------分割线 --------------------------------------
本文永久更新链接地址:
,