学习大数据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! 强制保存并退出
今天内容就这么多,明天考试了,我先去复习啦。

相关推荐
耶啵奶膘35 分钟前
uniapp-是否删除
linux·前端·uni-app
2401_883041081 小时前
新锐品牌电商代运营公司都有哪些?
大数据·人工智能
青云交1 小时前
大数据新视界 -- 大数据大厂之 Impala 性能优化:融合机器学习的未来之路(上 (2-1))(11/30)
大数据·计算资源·应用案例·数据交互·impala 性能优化·机器学习融合·行业拓展
Nu11PointerException1 小时前
JAVA笔记 | ResponseBodyEmitter等异步流式接口快速学习
笔记·学习
2401_850410831 小时前
文件系统和日志管理
linux·运维·服务器
XMYX-02 小时前
使用 SSH 蜜罐提升安全性和记录攻击活动
linux·ssh
Json_181790144804 小时前
An In-depth Look into the 1688 Product Details Data API Interface
大数据·json
二十雨辰4 小时前
[linux]docker基础
linux·运维·docker
@小博的博客5 小时前
C++初阶学习第十弹——深入讲解vector的迭代器失效
数据结构·c++·学习
饮浊酒5 小时前
Linux操作系统 ------(3.文本编译器Vim)
linux·vim