Shell编程8_数据库导入导出

目录

一、mysql 相关命令参数

1、mysql 相关命令参数

(1)使用免交互方式执行查询语句

(2)添加相关参数使查询输出格式化

(3)将查询结果存放到txt文件中

二、示例操作

1、创建表并将txt文件数据筛选后导入到MySQL表中

2、定时任务备份mysql数据并通过FTP传送到远端主机

(1)ftp服务器安装和相关参数

(2)mysqldump常用参数

(3)示例shell脚本

(4)添加定时任务


一、mysql 相关命令参数

查看开源MySQL启动状态: systemctl status mariadb
启动数据库: systemctl start mariadb.service

1、mysql 相关命令参数

使用 mysql -e 参数可以执行各种 sql 的各种操作语句。不用在mysql的提示符下运行mysql,即可以在shell中操作mysql的方法。

格式:mysql  -hhostname -Pport -uusername -ppassword -D databases -e "" 

Shell脚本示例:

#!/bin/bash  

HOSTNAME="192.168.111.84"                                           #数据库信息
PORT="3306"
USERNAME="root"
PASSWORD=""

DBNAME="test_db_test"                                               #数据库名称
TABLENAME="test_table_test"                                         #数据库中表的名称

#也可以写 HOSTNAME="localhost",端口号 PORT可以不设定

#创建数据库
create_db_sql="create database IF NOT EXISTS ${DBNAME}"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} -e "${create_db_sql}"

注意:-p${PASSWORD}中间不能有空格

#创建表
create_table_sql="create table IF NOT EXISTS ${TABLENAME} (  name varchar(20), id int(11) default 0 )"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD}  -D ${DBNAME} -e "${create_db_sql}"

#插入数据
insert_sql="insert into ${TABLENAME} values('billchen',2)"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME} -e  "${insert_sql}"

#查询
select_sql="select * from ${TABLENAME}"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${select_sql}"

#更新数据
update_sql="update ${TABLENAME} set id=3"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${update_sql}"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME} -e  "${select_sql}"

#删除数据
delete_sql="delete from ${TABLENAME}"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME} -e  "${delete_sql}"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME} -e  "${select_sql}"

(1)使用免交互方式执行查询语句

// -h 服务器IP地址
// -D 连接的数据库
// -e 执行sql语句
mysql -uroot -proot -hlocalhost -D seckill -e "select * from user_info";

(2)添加相关参数使查询输出格式化

// -N 不输出列信息      
// -B 使用tab键代替默认交替分割符
mysql -uroot -proot -hlocalhost -D seckill -N -B -e "select * from user_info";

(3)将查询结果存放到txt文件中

mysql -uroot -proot -hlocalhost -D seckill -N -B -e "select * from user_info" > /home/result.txt

二、示例操作

1、创建表并将txt文件数据筛选后导入到MySQL表中

data.txt文件准备

1,Navin,98,CS 
2,Kavya,70,CS 
3,Nawaz,80,CS 
4,Hari,80,EC 
5,Alex,50,EC 
6,Neenu,70,EC 
7,Bob,30,EC 
8,Anu,90,AE 
9,Sruth,89,AE 
10,Andre,89,AE

mark值大于50的数据导入到数据库中,shell实现如下

#!/bin/bash

# 数据库配置
HOSTNAME="localhost"
PORT="3306"
USERNAME="root"
PASSWORD="root"

# 数据库和数据库表
DBNAME="seckill"
TABLENAME="shell_students"
DATAFILE="/home/root123/data.txt"

MYSQL_CONNECT="mysql -u${USERNAME} -p${PASSWORD} -h${HOSTNAME} -P${PORT}"

# 创建数据库表
${MYSQL_CONNECT}<<EOF
use $DBNAME;
CREATE TABLE $TABLENAME(
id int,
name varchar(100),
mark int,
dept varchar(4)
);
EOF
[ $? -eq 0 ] && echo "Created table shell_students success!" || echo "Created table shell_students fail!"

# 导入data.txt数据
cat ${DATAFILE} | awk -F, '{print $1, $2, $3, $4}' | while read id name mark dept
do
        if [ ${mark} -gt 50 ];then
                ${MYSQL_CONNECT} -D${DBNAME} -e "insert into ${TABLENAME} values ('${id}','${name}','${mark}','${dept}')"
        fi
done
[ $? -eq 0 ] && echo "insert data success!" || echo "insert data fail!"

2、定时任务备份mysql数据并通过FTP传送到远端主机

(1)ftp服务器安装和相关参数

ftp命令安装:如果出现如下的错误提示:-bash: ftp: command not found 查询是ftp命令没有安装。

yum -y install ftp

ftp服务器安装:linux 安装ftp服务器相信配置

// 安装
yum -y install vsftpd
// 启动 - 注意防火墙等设置
service vsftpd restart

ftp相关命令参数,在控制台输入 man ftp,查看相关参数释义

FTP常用指令

  • open 与FTP服务器建立连接,例子:open 192.168.43.124
  • user 有权限登录FTP服务器的用户名和密码,例子:user root root

(2)mysqldump常用参数

  • -d   等价于--no-date  只导出表结构
  • -t    等价于--no-create-info 只导出数据,不导出建表语句
  • -A   等价于--all-databases
  • -B   等价于--databases 导出一个或多个数据库

(3)示例shell脚本

#!/bin/bash

# 数据库配置
HOSTNAME="localhost"
PORT="3306"
USERNAME="root"
PASSWORD="root"

# 数据库
DBNAME="seckill"
# 数据库表
TABLENAME=$1
# 传送文件
FILENAME="mysqldump_$(date +%Y-%m-%d-%H%M%S).sql"
DATAFILE="/home/root123/${FILENAME}"
# ftp配置
FTPHOST="192.168.43.153"
FTPUSER="root123"
FTPPASSWORD="root123"

# 传送文件 
function auto_ftp
{
        ftp -niv<< EOF
                open ${FTPHOST}
                user ${FTPUSER} ${FTPPASSWORD} 
                put ${DATAFILE}
                bye
EOF
}

# 导出文件并传送到远程
mysqldump -u${USERNAME} -p${PASSWORD} -h${HOSTNAME} -P${PORT} ${DBNAME} ${TABLENAME} > ${DATAFILE} && auto_ftp

[ $? -eq 0 ] && echo "put file into remote success!" || echo "put file into remote fail!"

(4)添加定时任务

定时任务编辑命令

crontab [-u username]    // 省略用户表表示操作当前用户的crontab
    -e      (编辑工作表)
    -l      (列出工作表里的命令)
    -r      (删除工作作)

通过上述步骤,可看到示例结果

如果定时任务不生效,可以查看定时任务日志,查看执行详情

# 定时任务日志
/var/log/cron
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

swadian2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值