首页 > 数据库 >(转)第六课 Shell脚本编程-Shell脚本操作数据库实战

(转)第六课 Shell脚本编程-Shell脚本操作数据库实战

时间:2022-12-01 22:45:07浏览次数:49  
标签:脚本 insert school Shell 第六课 into score values 1001

原文:https://blog.csdn.net/aa18855953229/article/details/127380172

第一节 数据导入和授权
测试数据 school.sql
--建表
--学生表
CREATE TABLE `student`(
`s_id` VARCHAR(20),
`s_name` VARCHAR(20) NOT NULL DEFAULT '',
`s_birth` VARCHAR(20) NOT NULL DEFAULT '',
`s_sex` VARCHAR(10) NOT NULL DEFAULT '',
PRIMARY KEY(`s_id`)
);
--课程表
CREATE TABLE `course`(
`c_id` VARCHAR(20),
`c_name` VARCHAR(20) NOT NULL DEFAULT '',
`t_id` VARCHAR(20) NOT NULL,
PRIMARY KEY(`c_id`)
);
--教师表
CREATE TABLE `teacher`(
`t_id` VARCHAR(20),
`t_name` VARCHAR(20) NOT NULL DEFAULT '',
PRIMARY KEY(`t_id`)
);
--成绩表
CREATE TABLE `score`(
`s_id` VARCHAR(20),
`c_id` VARCHAR(20),
`s_score` INT(3),
PRIMARY KEY(`s_id`,`c_id`)
);
--插入学生表测试数据
insert into student values('1001' , 'zhaolei' , '1990-1001-1001' , 'male');
insert into student values('1002' , 'lihang' , '1990-12-21' , 'male');
insert into student values('1003' , 'yanwen' , '1990-1005-20' , 'male');
insert into student values('1004' , 'hongfei' , '1990-1008-1006' , 'male');
insert into student values('1005' , 'ligang' , '1991-12-1001' , 'female');
insert into student values('1006' , 'zhousheng' , '1992-1003-1001' , 'female');
insert into student values('1007' , 'wangjun' , '1989-1007-1001' , 'female');
insert into student values('1008' , 'zhoufei' , '1990-1001-20' , 'female');
--课程表测试数据
insert into course values('1001' , 'chinese' , '1002');
insert into course values('1002' , 'math' , '1001');
insert into course values('1003' , 'english' , '1003');

--教师表测试数据
insert into teacher values('1001' , 'aidisheng');
insert into teacher values('1002' , 'aiyinsitan');
insert into teacher values('1003' , 'qiansanqiang');

--成绩表测试数据
insert into score values('1001' , '1001' , 80);
insert into score values('1001' , '1002' , 90);
insert into score values('1001' , '1003' , 99);
insert into score values('1002' , '1001' , 70);
insert into score values('1002' , '1002' , 60);
insert into score values('1002' , '1003' , 80);
insert into score values('1003' , '1001' , 80);
insert into score values('1003' , '1002' , 80);
insert into score values('1003' , '1003' , 80);
insert into score values('1004' , '1001' , 50);
insert into score values('1004' , '1002' , 30);
insert into score values('1004' , '1003' , 20);
insert into score values('1005' , '1001' , 76);
insert into score values('1005' , '1002' , 87);
insert into score values('1006' , '1001' , 31);
insert into score values('1006' , '1003' , 34);
insert into score values('1007' , '1002' , 89);
insert into score values('1007' , '1003' , 98);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
创建数据库
create database school default character set utf8;
1
载入数据
# mysql -u 用户名 -p 数据库名 < 数据库文件
mysql -u root -p school < / root/ school.sql
# 登陆查看是否载入成功
mysql -u root -p
use school;
show tables;
# 查看数据库中的表,数据已经载入
select * from student;
# 赋予用户数据库权限
# 赋予任意主机普通数据用户dbuser,查询、插入、更新、删除 数据库中school任意表的权利。
grant all on school.* to dbuser@'%' identified by '123456';
grant all on school.* to dbuser@localhost identified by '123456';
grant select on school.* to dbuser@'%' identified by '123456' ;
grant insert,on school.* to dbuser@'%' identified by '123456' ;
grant update on school.* to dbuser@'%' identified by '123456';
grant delete on school.* to dbuser@'%' identified by '123456';
# 操作权限后
use mysql;
show tables;
desc user; # 查看user表结构
select User,Host,Password FROM user; # 可以看到我们的dbuser
mysql -udbuser -p123456 -h localhost school < /root/school.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
第二节 shell和数据库交互
mysql命令参数详解:
-u 用户名
-p 用户密码
-h 服务器IP地址
-D 连接的数据库
-N 不输出列信息
-B 使用tab键代替默认交互分隔符
-e 执行SQL语句
其他选项
-E 垂直输出
-H 以HTML格式输出
-X 以XML格式输出
# 不进入交互模式 -e
mysql -u dbuser -p123456 -Dschool -e "select * from student "
# -B 使用tab键代替默认交互分隔符
mysql -u dbuser -p123456 -Dschool -B -e "select * from student "
# -N 不输出列信息
mysql -u dbuser -p123456 -Dschool -N -e "select * from student "

# —E 垂直输出
mysql -u dbuser -p123456 -D school -N -E -e "select * from student "

# -H 以HTML格式输出
mysql -u dbuser -p123456 -D school -N -H -B -E -e "select * from student
1
2
3
4
5
6
7
8
9
10
11
12
写一个脚本,该脚本可以接收两个参数,参数为数据库名称和需要执行的SQL语句
#!/bin/bash

user="dbuser"
password="123456"
db_name="$1"
SQL="$2"
mysql -u"$user" -p"$password" -D "$db_name" -e "$SQL"

# 执行
./test.sh school "select * from course"
1
2
3
4
5
6
7
8
9
10
第三节 利用Shell脚本将文本数据导入到MySQL中
文本一:处理文本中的数据,将文本中的数据插入Mysql中
1010 jerry 1990-1001-1001 male
1011 mike 1990-12-21 female
1012 tracy 1990-1005-20 male
1013 kobe 1990-1008-1006 male
1014 allen 1989-1007-1001 female
1015 curry 1991-12-1001 female
1016 ztom 1992-1003-1001 female
1
2
3
4
5
6
7
脚本test.sh
#!/bin/bash

user="dbuser"
password="123456"

mysql_conn="mysql -u"$user" -p"$password" "

cat data.txt | while read id name birth sex
do
$mysql_conn -e "insert into school.student values('$id','$name','$birth','$sex')"
done
1
2
3
4
5
6
7
8
9
10
11
# 插入前数据
select* from student;
# 执行脚本
./test1.sh
# 查看结果
select* from student;
1
2
3
4
5
6
文本二:处理文本中的数据,将文本中的数据插入Mysql中
2021|hao|1989-12-21|male
2022|zhang|1989-12-21|male
2023|ouyang|11989-12-21|male
2024|li|11989-12-21|female
1
2
3
4
脚本test.sh
#!/bin/bash


user="dbuser"
password="123456"

IFS='|' # 设置系统默认的分割符

cat data.txt | while read id name birth sex
do
mysql -u"$user" -p"$password" -e "insert into school.student values('$id','$name','$birth','$sex')"
done
1
2
3
4
5
6
7
8
9
10
11
12
第四节 备份MySQL数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yFo6IPEO-1666024558252)(.\printscreen\6.1.png)]

# mysqldump数据量大不是很合适
mysqldump -udbuser -p123456 school > school.sql
cat school.sql
1
2
3
FTP常用指令:
open 与FTP服务器建立连接
user 有权限登录FTP服务器的用户名和密码
需求:将school中的score表备份,并且将备份数据通过FTP传输到192.168.2.100的/data/backup目录下
#!/bin/bash

db_user="dbuser"
db_password="123456"

ftp_user="ftp_user"
ftp_password="redhat"
ftp_host="192.168.2.100"


dst_dir="/data/backup"
time_date="`date+%Y%m%d%H%M%S`"
file_name="school_score_${time_date}.sql"

# ftp -i关闭交互 -n自动登录 -v显示传输日志
# 通过<< EOF 给ftp发送指令
function auto_ftp
{
ftp -inv << EOF
open $ftp_host
user $ftp_user $ftp_password

cd $dst_dir
put $1
bye
EOF
}

mysqldump -u"$db_user" -p"$db_password" -h"$db_host" school score > ./$file_name && auto_ftp ./$file_name
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
每隔一分钟执行一次
# crontab是用来定期执行程序的命令。
# -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
# -r : 删除目前的时程表
# -l : 列出目前的时程表

* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 7) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

 

# 每一分钟执行一次 /bin/ls:
* * * * * /bin/ls
# 在12月内, 每天的早上 6 点到 12 点,每隔2个小时0分钟执行一次 /usr/bin/backup:
0 6-12/2 * 12 * /usr/bin/backup
# 每月每天的午夜0点20分, 2点30分, 4点20分....执行 echo "haha":
20 0-23/2 * * * echo "haha"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
crontab -e
# 日志不输出
*/1 * * * * sh /root/test.sh &> /dev/null
————————————————

标签:脚本,insert,school,Shell,第六课,into,score,values,1001
From: https://www.cnblogs.com/liujiacai/p/16943030.html

相关文章

  • (转)第七课 Shell脚本编程-大型脚本工具开发实战
    原文:https://blog.csdn.net/aa18855953229/article/details/127380188第一节需求描述Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后......
  • Windows命令行command的Shell命令详细解析和语法
    CMD命令大全及详细解释和语法CMD命令大全及详细解释和语法MicrosoftWindowsXP[版本5.1.2600]有关某个命令的详细信息,请键入HELP命令名ASSOC   显示或修改文......
  • Shell脚本编程笔记
    笔记来源菜鸟教程——Shell教程https://www.runoob.com/linux/linux-shell.html侵删什么是Shell?Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面......
  • iNeuOS工业互联网操作系统,脚本化实现设备运行时长和效率计算与统计
    目      录1.     概述...22.     实时采集开停状态...23.     增加虚拟设备...24.     脚本统计和计算设备运行时长...45.  ......
  • Notion导出批量更改脚本
    0.缘起问就是和Notion分手后的阵痛导出会有很多乱码,我忍受了一段时间终于忍不了了,掏出学了一点点的python,写了个脚本。该脚本就是检测到当前文件OR文件夹名称中含有.,......
  • 拼多多 autojs脚本
    functionFreeRestriction(){  importClass(com.stardust.autojs.core.accessibility.AccessibilityBridge.WindowFilter);  letbridge=runtime.accessibili......
  • 使用批处理扫描局域网内存活的主机的脚本
    1、先在电脑任意位置下新建一个txt的文本,然后命名为“扫描局域网内存活的主机.bat”的bat文件。  2、右键该文件,选择"编辑",把以下内容复制进去,最后保存。 @echooff......
  • 不支持PowerShell 2.0版本(don't support PowerShell version 2.0. )
    在“程序包管理器控制台”使用命令“update-database”会提示:TheEntityFrameworkCorePackageManagerConsoleToolsdon'tsupportPowerShellversion2.0.Upgradet......
  • VScode设置NPM脚本窗口
    在资源管理器里有多个窗口,比如:打开的编辑器、文件夹、npm脚本、大纲,可以很快捷的查看和操作一些功能。最近vscode突然升级更新,然后打开项目就出现如上图窗台,缺少打开的编辑......
  • springboot 项目自动重启脚本及注册方式
    创建脚本文件/etc/init.d/prs_xml.jar 添加脚本chkconfig-add prs_xml.jar查看服务列表chkconfig--list 启动服务chkconfigprs_xml.jaron设置启动等级chk......