一个清空数据库并初始化的脚本

经常要清空数据库,于是写了一个小脚本,还是学到很多东西.

1.保留数据表结构,只删除所有表数据

方法1:导出一个没有数据的数据库,再drop原来的数据库,create 一个新的(空的,没有表结构),再source一下之前导出的没有数据的sql
mysqldump -u${USERNAME} -p${PASSWORD} -h${HOSTNAME} ${DATABASE} --no-data >villadb-nodata.sql
mysql -u${USERNAME} -p${PASSWORD} -h${HOSTNAME} ${DATABASE} -e "drop database ${DATABASE}"
mysql -u${USERNAME} -p${PASSWORD} -h${HOSTNAME} -e "create database ${DATABASE}"

学习点:
1.mysql -e cmd 可以用shell操作mysql,不在mysql提示符下操作,非交互式,适合嵌入shell脚本
2.shell 单引号和双引号的区别,单引号属于强引用,不对引号内任何特殊字符转义,只当普通字符.双引号属于弱引用,会对括起来的特殊字符做处理.如$,>等.上面的例子用到${DATABASE},要用双引号,才能保留${}的特殊意义,即传递一个变量,而不是简单字符串.
3.mysqldump --no-data 参数(跟-d 一样),表示只导出数据库表结构,不导出数据.用-t则表示只导出数据,不导出表结构.
4.删除数据库有3种方法:
drop database ${DATABASE}:会删除整个数据库表结构,数据,和

方法2:

调试时用到的技巧

1.shell脚本在开头加上"set -x"表示调试模式,会把每句命令都打印出来,再打印每句命令的执行结果
2.vim中批量注释.用vim命令打开文件
方法1:块操作模式
  • 适合连续的行注释,光标移动到要注释的第一行,按ctrl+v进入块模式,按方向键向下,直到你要注释的最后一行,按大写的i,注意大写的哦,输入#,再按2次Esc键,就看到选中的行首都增加了一个#.
  • 取消注释:在块模式下选中要取消注释的行,按一下"d",即可

    方法2:替换命令
  • 按Esc进入命令模式,输入":set nu",显示行号;再按一下Esc,输入":1,$ s/^/#/g" 表示从1到最后一行,每个行首都增加# . 其中"1,$" 表示从1到最后一行,可更改为实际的起始行和结束行
  • 取消注释:在命令行模式,输入":1,$ s/^#//g".

附:完整脚本

#!/usr/bin/bash
set -x
HOSTNAME='127.0.0.1'
USERNAME='root'
PASSWORD='engine'
DATABASE='villadb'

result()
{
if [ $? -eq 0 ];then
echo -e "\033[47;32m ----------- $1 succeed! ---------- \033[0m"
else
echo -e "\033[47;31m ----------- $1 failed! ----------- \033[0m"
fi
}

echo -e "\033[47;34m ------------ step 1: dump a no-data sql of villadb ------------- \033[0m"
mysqldump -u${USERNAME} -p${PASSWORD} -h${HOSTNAME} ${DATABASE} --no-data >villadb-nodata.sql
result step1

echo -e "\033[47;34m ------------ step 2: dump important config like VDC,ServiceOffering,etc ------------- \033[0m"
mysqldump -u${USERNAME} -p${PASSWORD} -h${HOSTNAME} ${DATABASE} VdcType ServiceOffering TotalTemplate VDC Configuration > config.sql
result step2

echo -e "\033[47;34m ------------ step 3: drop villadb ------------- \033[0m"
mysql -u${USERNAME} -p${PASSWORD} -h${HOSTNAME} ${DATABASE} -e 'drop database villadb'
result step3

echo -e "\033[47;34m ------------ step 4: create a new villadb ------------- \033[0m"
mysql -u${USERNAME} -p${PASSWORD} -h${HOSTNAME}  -e 'create database villadb IF NOT EXISTS villadb'
result step4

echo -e "\033[47;34m ------------ step 5: import the backup table-structure ------------- \033[0m"
mysql -u${USERNAME} -p${PASSWORD} -h${HOSTNAME} ${DATABASE} -e 'source /home/clouder/userful-sql/villadb-nodata.sql'
result step5

echo -e "\033[47;34m ------------ step 6: import the backup config ------------- \033[0m"
mysql -u${USERNAME} -p${PASSWORD} -h${HOSTNAME} ${DATABASE} -e 'source /home/clouder/userful-sql/config.sql'
result step6

猜你喜欢

转载自www.cnblogs.com/xiaozhuangAna/p/10348146.html