mysql导出所有数据库删除mysql_shell批量导入MySQL数据库,批量删除数据库

因为项目协同开发, 同事发了一个项目的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 LTS 安装 LNMP Nginx\PHP5 (PHP-FPM)\MySQL http://www.linuxidc.com/Linux/2014-05/102351.htm

--------------------------------------分割线 --------------------------------------

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值