目录
shell 脚本导入 csv 格式文件到 mysql 数据库
上机练习 14
运用上一节课学的 Shell 工具完成
1. 清洗数据《infotest.txt》保存成《infotest.csv》
infotest.txt 内容
![](https://i-blog.csdnimg.cn/direct/153a7707e73246c08801fbb3c9f88897.png)
实现代码:
# 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
成品图:
![](https://i-blog.csdnimg.cn/direct/0efa343071644aa098c9bd4259285ad4.png)
2. 清洗数据《douban.txt》保存成《douban.csv》
douban.txt 内容
![](https://i-blog.csdnimg.cn/direct/001a251c450344cfbb5996017bb743bc.png)
代码实现:
# 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
成品图:
![](https://i-blog.csdnimg.cn/direct/18eb15e82c67483b87655270bb344b52.png)
mysql 命令
是 MySQL 数据库服务器的客户端工具,它工作在命令行终端中,完成对远程 MySQL
数据库
服务器的操作。
1. -h:MySQL 服务器的 ip 地址或主机名;
2. -u:连接 MySQL 服务器的用户名;
3. -e:执行 mysql 内部命令;
4. -p:连接 MySQL 服务器的密码。
5. -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 -h$host -P$port -u$user -p$passwd $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
# 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 命令
![](https://i-blog.csdnimg.cn/direct/dbae8db9054d4d69aa259dc3867782b1.png)
上机练习 16
实现每天凌晨 3 点 10 分备份数据库 test 到/root/backup/db
一、编写 shell 脚本为 /root/shell/backdb.sh
1.判断路径/root/backup/db 是否存在,不存在创建,存在开始备份
2.备份后的文件以时间命名,如 20230401110101.sql
3.在备份的同时,检查是否有 10 天前的备份数据库文件,有则删除之
二、编写定时任务,任务是执行上面的 shell 脚本
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!
强制保存并退出
今天内容就这么多,明天考试了,我先去复习啦。