学习大数据DAY26 简单数据清洗练习和 Shell 脚本中的数据库编程

目录

[上机练习 14](#上机练习 14)

[mysql 命令](#mysql 命令)

[sql 语句实现步骤](#sql 语句实现步骤)

[shell 脚本导入 csv 格式文件到 mysql 数据库](#shell 脚本导入 csv 格式文件到 mysql 数据库)

[secure-file-priv 特性](#secure-file-priv 特性)

[把文件拷贝到 mysql 指定目录下](#把文件拷贝到 mysql 指定目录下)

[上机练习 15](#上机练习 15)

[mysqldump 命令](#mysqldump 命令)

[上机练习 16](#上机练习 16)


上机练习 14

运用上一节课学的 Shell 工具完成

  1. 清洗数据《infotest.txt》保存成《infotest.csv》
    infotest.txt 内容

    实现代码:
bash 复制代码
# sed 's/\[{//g' /root/infotest.txt \# | sed 's/\"//g' \
# | awk -v FS="," -v OFS="," 'BEGIN{print
# "catchTime,commentCount,content,createTime,pic_list,praiseCount,reportCount,sour
# ce"}{print $1,$2,$3,$4,$5,$6,$7,$8}' \
# | sed 's/catchTime://g' \
# | sed 's/commentCount://g' \
# | sed 's/content://g' \
# | sed 's/createTime://g' \
# | sed 's/pic_list://g' \
# | sed 's/praiseCount://g' \
# | sed 's/reportCount://g' \
# | sed 's/source://g' \
# | sed 's/}\]//g' > /root/infotest.csv

成品图:

2. 清洗数据《douban.txt》保存成《douban.csv》
douban.txt 内容

代码实现:

bash 复制代码
# sed 's/{//g' /root/douban.txt \
# | sed 's/},/\n/g' \
# | sed 's/}//g' \
# | sed 's/"//g' \
# | sed 's/subjects://g' \
# | sed 's/\[//g' \
# | sed 's/\]//g' \
# | sed 's/\\//g' \# | awk -v FS="," -v OFS="," 'BEGIN{print
# "episodes_info,rate,cover_x,title,url,playable,cover,id,cover_y,is_new"}{print
# $1,$2,$3,$4,$5,$6,$7,$8,$9,$10}' \
# | sed 's/episodes_info://g' \
# | sed 's/rate://g' \
# | sed 's/cover_x://g' \
# | sed 's/title://g' \
# | sed 's/url://g' \
# | sed 's/playable://g' \
# | sed 's/cover://g' \
# | sed 's/id://g' \
# | sed 's/cover_y://g' \
# | sed 's/is_new://g' > /root/douban.csv

成品图:

mysql 命令

是 MySQL 数据库服务器的客户端工具,它工作在命令行终端中,完成对远程 MySQL
数据库
服务器的操作。

  1. -h:MySQL 服务器的 ip 地址或主机名;
  2. -u:连接 MySQL 服务器的用户名;
  3. -e:执行 mysql 内部命令; 4. -p:连接 MySQL 服务器的密码。
  4. -P:连接 MySQL 服务器的端口
    mysql -h127.0.0.1 -P3306 -uroot -proot123456 test -e "select * from
    student"

sql****语句实现步骤

drop table if exists ip
create table if not exists ip
(
one varchar(10),
two varchar(10),
three varchar(10),
four varchar(10)
)
LOAD DATA INFILE '/usr/local/mysql/data/ip.csv' INTO TABLE ip
CHARACTER SET utf8
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
select * from ip

shell脚本导入csv格式文件到mysql****数据库

secure-file-priv****特性

secure-file-priv 参数是用来限制 LOAD DATA, SELECT ... OUTFILE, and
LOAD_FILE() 传到哪个指定目录的。
查看配置文件
cat /etc/my.cnf
[mysqld]
user=mysql
port=3306
character-set-server=utf8
secure_file_priv=/usr/local/mysql/data

把文件拷贝到mysql指定目录下

cp /root/ip.csv /usr/local/mysql/data/ip.csv
shell 里面执行 mysql 语句
host="127.0.0.1"
port="3306"
user="root"
passwd="root123456"
dbname="test"
csvin="LOAD DATA INFILE '/usr/local/mysql/data/ip.csv' INTO TABLE ip
CHARACTER SET utf8
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
IGNORE 1 LINES "
mysql -hhost -Pport -uuser -ppasswd dbname -e "csvin"
自动拼接创建表
sql2="create table if not exists $2("
cols=`head -n +1 $1 | sed 's/,/ /g'`

得到最后一个列名

lastName=`head -n +1 $1 | awk -v FS="," '{print $NF}'`

echo $lastName

for i in $cols
do
if [ $i == lastName \] then sql2="sql2 i varchar(200)" else sql2="sql2 i varchar(200)," fi done sql2="sql2)"

echo $sql2

上机练习 15

编写 shell 脚本 /root/shell/mysqlcsv.sh

bash 复制代码
# host="127.0.0.1"
# port="3306"
# user="root"
# passwd="root123456"
# dbname="test"
# 编写 shell 脚本/root/shell/mysqlcsv.sh
# 1.如果 douban 表存在则删除
# mysql1="drop table if exists douban"
# mysql -h$host -P$port -u$user -p$passwd $dbname -e "$mysql1"
# 2.如果 douban 表不存在则新建
# mysql2="create table if not exists douban
# (
# episodes_info varchar(10),
# rate float(4,1),
# cover_x int(8),
# title varchar(40),
# url varchar(200),
# playable varchar(10),# cover varchar(200),
# id varchar(20),
# cover_y varchar(10),
# is_new varchar(10)
# );"
# mysql -h$host -P$port -u$user -p$passwd $dbname -e "$mysql2"
# # 3.导入 douban.csv 数据到 douban 表中,建表过程为根据导入的 csv 文件自动创
建表
# mysql3="LOAD DATA INFILE '/usr/local/mysql/data/douban.csv' INTO TABLE
douban
# CHARACTER SET utf8
# FIELDS TERMINATED BY ','
# LINES TERMINATED BY '\n'
# IGNORE 1 LINES"
# mysql -h$host -P$port -u$user -p$passwd $dbname -e "$mysql3"
# # 4.查询 douban 表验证结果
# mysql4="select * from douban"
# mysql -h$host -P$port -u$user -p$passwd $dbname -e "$mysql4"

mysqldump 命令

上机练习 16

实现每天凌晨 3 点 10 分备份数据库 test 到/root/backup/db
一、编写 shell 脚本为 /root/shell/backdb.sh
1.判断路径/root/backup/db 是否存在,不存在创建,存在开始备份
2.备份后的文件以时间命名,如 20230401110101.sql
3.在备份的同时,检查是否有 10 天前的备份数据库文件,有则删除之
二、编写定时任务,任务是执行上面的 shell 脚本

bash 复制代码
today=$(date +"%Y%m%d%H%M%S")
if [ -f /root/backup/backup.db ]
then
for i in `find /root/backup -mtime +10`
do
if [ -f $i ]
then
rm -rf $i
break
fi
done
mv /root/backup/backup.db /root/backup/$today.sql
touch /root/backup/backup.db
else
touch /root/backup/backup.db
fi

定时任务,终端输入 crontab -e
G 进入最后一行
o 进入编辑模式,在下一行开始编辑
输入 10 3 * * * ./root/shell/backdb.sh
ESC 回到一般模式
:wq! 强制保存并退出
今天内容就这么多,明天考试了,我先去复习啦。

相关推荐
B1nna4 小时前
Redis学习(三)缓存
redis·学习·缓存
007php0074 小时前
linux服务器上CentOS的yum和Ubuntu包管理工具apt区别与使用实战
linux·运维·服务器·ubuntu·centos·php·ai编程
_im.m.z4 小时前
【设计模式学习笔记】1. 设计模式概述
笔记·学习·设计模式
神秘打工猴4 小时前
Flink 集群有哪些⻆⾊?各⾃有什么作⽤?
大数据·flink
小刘鸭!4 小时前
Flink的三种时间语义
大数据·flink
djykkkkkk4 小时前
ubuntu编译遇到的问题
linux·运维·ubuntu
天冬忘忧4 小时前
Flink优化----FlinkSQL 调优
大数据·sql·flink
LinkTime_Cloud5 小时前
GitLab 将停止为中国区用户提供服务,60天迁移期如何应对? | LeetTalk Daily
大数据·运维·gitlab
qq_429856575 小时前
linux 查看服务是否开机自启动
linux·运维·服务器
寒暄喆意6 小时前
智慧农业物联网传感器:开启农业新时代
大数据·人工智能·科技·物联网