Back
Featured image of post Shell脚本与Mysql交互

Shell脚本与Mysql交互

基于 mysql 提供的命令行指令, 实现无需用户介入的 mysql 交互脚本, 如何通过 shell 向 mysql 导入数据, 以及如何利用 mysqldump 备份数据

mysql 命令参数

参数 含义
-u 用户
-p 密码
-h 要连接的主机
-D 指定数据库
-e 要执行的 sql 语句
-B 输出以 tab 分隔
-N 不显示列头
-E 垂直显示
-H 以 html 形式输出
-X xml 格式输出

shell 脚本接受, 操作 mysql

#!/bin/bash
#

user="dbuser"
password="123456"
host="127.0.0.1"
db_name="$1"  # 参数中用空格时要用双引号

SQL="$2"

mysql -u"$user" -p"$password" -h"$host" -D"db_name" -B -e "$SQL"
$ sh operator.sh school "insert into score("231","1234",100)"

使用 shell 导入数据

#/bin/bash
#

user="dbuser"
password="123456"
host="127.0.0.1"

IFS="|"  # shell 默认以空格与 tab 切分, 通过 IFS 改变默认分隔符

cat data.txt | while read id name birth sex
do
	if [ $id -gt 2023 ];then
		mysql -u"$user" -p"$password" -h"$host" -e "Insert into school.student values('$id','$name','$birth','$sex')"
	fi
done

利用 mysqldump 进行数据库备份

mysqldump 参数 含义
-u
-p
-h
-d –no-data 只导出表结构
-t –no-create-info 只导出数据, 不导出建表语句
-A –all-databases –all-databases
-B –databases 导出一个或多个数据库

备份 school 下的 score 表, 通过 ftp 上传到目标服务器

#!/bin/bash
#

db_user="dbuser"
db_password="123456"
db_host="127.0.0.1"

ftp_user="fpt_user"
ftp_password="123"
ftp_host="127.0.0.1"

src_dir="/data/bak"
dst_dir="/data/backup"
time="`date +%Y%m%d%H%M%S`"
filename="school_score_${time}.bak"

function auto_ftp
{
        ftp -inv << EOF
        open $ftp_host
        user $ftp_user $ftp_password

        cd $dst_dir
        put $1
        bye
EOF
}

# 备份 school 数据库下的 score 表
# && 只有前一天命令正确执行在执行后面命令
mysqldump -u"$db_user" -p"$db_password" -h"db_host" school score > $src_dir/$filename && auto_ftp $src_dir/$filename