加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Shell脚本操作数据库

发布时间:2020-12-15 22:23:33 所属栏目:安全 来源:网络整理
导读:Shell脚本操作数据库:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

Shell脚本操作数据库:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?


?

安装

Yum list all | grep mariadb查看yum源中是否有mariadb包

则通过yum进行安装,否则进行其他方式的安装

Yum install mariadb mariadb-server mariadb-libs -y

配置

Systemctl status mariadb

Systemctl start mariadb

可以看到running? 配置文件路径和数据文件路径

使用

Select version();查看版本

Show databases;

Use 数据库

Create insert select drop alter delete update等操作

Create database school default charset=utf8;

Select school < school.sql使用脚本插入制定的数据库中

以下是对数据库对其他用户设置权限

grant all on school.* to [email?protected]’%’ identified by ‘123456’

Grant 哪些权限,比如select on? 那个数据库的哪些表 to 用户名@主机ip地址 identified by 用户密码

?

Mysql命令参数详解:

???????? -u 用户名

-p 用户密码

-h 服务器ip地址

-D? 连姐姐的数据库

-N 不输出列的信息

-B? 使用tab键代替默认的交互分隔符

-e? 执行SQL语句

其他的选项

-E 垂直输出

-H 以HTML格式输出

-X 以XML格式输出

举例:

需求1:写一个脚本,该脚本可以接收二个参数,参数为需要执行的SQL语句

例如: bash operate_mysql.sh “select * from student;”

Operate_mysql.sh如下所示:

#!/bin/bash

#

user=‘dbuser‘

password=‘123456‘

host=‘127.0.0.1‘

sql="$2"

db="$1"

?

?

mysql -u"$user" -p"$password" -h"$host" -D"$db" -B -e "$sql"

需求2:将文本中格式化的数据导入到MYSQL数据库中

文本文件的data.txt的内容如下:

[[email?protected] script]# cat data.txt

101???? xiaoming??????? mail

102???? xiaohua???????? femail

104???? xiaofang??????? mail

脚本内容insert.sh

#!/bin/bash

#

user="dbuser"

password="123456"

host="127.0.0.1"

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

cat data.txt | while read id name age

do

??????? $mysql_conn -e "insert into school.student values(‘$id‘,‘$name‘,‘$age‘)"

done

~? ??

///以上的写法中,mysql_conn尽量不要以变量的形式写在脚本中,容易出错//?

///注意单双引号的用法,如果变量双引号,在执行的时候,会进行赋值操作,变量就不起作用了,所以引用变量的地方进行用单引号//?????

执行结果

[[email?protected] script]# bash operate_mysql.sh school "select * from student;"

id????? name??? age

102???? xiaohua ??femail

104???? xiaofang?? mail

[[email?protected] script]# ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

?

需求3:将以下文本格式的数据导入到MYSQL数据库中

文本格式的内容如下data1.txt

[[email?protected] script]# cat data1.txt

105|fangqiming|mail

106|xiaomingming|mail

107|xiaohua|femail

以上数据的分割符号是“|”

脚本文件

#!/bin/bash

#

user="dbuser"

password="123456"

host="127.0.0.1"

#mysql_conn="mysql -u"$user" -p"$password" -h"$host""不能这么写,出错!

IFS="|"

?

cat data1.txt | while read id name age

do

??????? if [ $id -gt 105 ];then

??????????????? mysql -u"$user" -p"$password" -h"$host" -e "insert into school.student values(‘$id‘,‘$age‘)"

??????? fi

done

~????

执行结果是:

[[email?protected] script]# bash operate_mysql.sh school "select * from student;"

id????? name??? ???age

106???? xiaomingming??? mail

107???? xiaohua ?????femail

[[email?protected] script]#

备份数据

备份MYSQL数据库或者表

mysqldump

?? 常用参数详解

???????? -u? 用户名

-p? 密码

-h? 服务器ip地址

-d?? 等价于—no-data? 指导处表结构

-t??? 等价于—no-create-info 只导出数据,不导出建表语句

-A??? 等价于—all-databases

-B?? 等价于—databases 导出一个或者多个数据库

FTP常用指令:

Open?? 与FTP服务器建立连接,例如 open 192.168.10.104

User??? 有权限登录FTP服务器的用户名与密码,例如: user

需求1: 将school中的student表备份,并且将备份数据通过FTP传输到192.168.10.104的/data/backup目录下

mysqldump -udbuser -p123456 -h127.0.0.1 -B school > test1.sql

FTP安装和使用命令详解:

Centos7系统安装,yum install vsftpd

配置:

/etc/vsftpd/Vsftpd.conf

??????????? 添加userlist_deny=NO作用是当userlist_enable=YES时候user_list表中添加的用户名允许登录,当userlist_deny=YES 则相反。

???? 注意的是:配置是控制着对端主机的。

???????? ?受控端设置local_root=/var/ftp默认上传的路径。

chmod 777 –r /vars/ftp设置读写权限。

启动:

service vsftpd restart? service vsftpd status可以看到running则正常

验证:

[[email?protected] vsftpd]# ftp 192.168.10.104

Connected to 192.168.10.104 (192.168.10.104).

220 (vsFTPd 3.0.2)

Name (192.168.10.104:root): root

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> pwd

257 "/var/ftp"

FTP使用前提:

主控端和受控端都安装vsftpd协议

服务运行状态

在受控端有授权的用户

3、创建宿主用户

在受控端依次执行如下

# 创建用户 ftpuser 指定 `/home/vsftpd` 目录

useradd -g root -M -d /home/vsftpd -s /sbin/nologin ftpuser

# 设置用户 ftpuser 的密码

passwd ftpuser

# 把 /home/vsftpd 的所有权给ftpuser.root

chown -R ftpuser.root /etc/vsftpd

此时可以看到,如下已经有授权的用户了,用户名密码我设置的ftpuser,tarena

[[email?protected] vsftpd]# cat /etc/passwd | grep ftpuser

ftpuser:x:1009:0::/home/vsftpd:/sbin/nologin

[[email?protected] vsftpd]#

注意把 /home/vsftpd 的所有权所给的用户密码是控制访问的用户,而访问者要输入的用户名和密码是被访问系统的用户名和密码

比如

系统A 当前系统root tarena ---------------------------- 系统B,当前系统root tarena

Username: ftpuser???????????????????????? username:fangqiming

Password:tarena?????????????????????????? password: tarena

[[email?protected] vsftpd]$? ----------à-username:root,password:tarena

username:root,password:tarena-<--------- [[email?protected] xiaoming]#

有关useradd更多的参数说明和vsftpd的参数说明和配置见下面的网址

参考网址: https://www.cnblogs.com/lei0213/p/8657039.html

参考网址: https://www.cnblogs.com/craftor/p/3811612.html

需求1实现

mysqldump -udbuser -p123456 -h127.0.0.1 -B school > test1.sql

指定的数据库school备份出来后,通过以下的脚本,将备份的文件发送到192.168.10.104服务器上

=============================================

[[email?protected] script]# vim ftp.sh?? #设置脚本内容,将下面

[[email?protected] script]# bash ftp.sh ??#执行脚本

Connected to 192.168.10.104 (192.168.10.104).

220 (vsFTPd 3.0.2)

331 Please specify the password.

230 Login successful.

250 Directory successfully changed.

local: test1.sql remote: test1.sql

227 Entering Passive Mode (192,168,10,104,56,62).

150 Ok to send data.

226 Transfer complete.

2188 bytes sent in 9.7e-05 secs (22556.70 Kbytes/sec)

221 Goodbye.

[[email?protected] script]#

================================================

[[email?protected] script]# vim ftp.sh

#!/bin/bash

#

ftp -inv << EOF

??????? open 192.168.10.104

??????? user root tarena

???????

??????? cd /tmp

??????? put test1.sql

??????? bye

EOF

执行结果:

在受控端 192.168.10.106 /tmp中查看,已传递成功!

[[email?protected] tmp]# ll test1.sql

-rw-r--r--. 1 root root 2188 Apr 18 14:19 test1.sql

[[email?protected] tmp]#

较完整的代码如下:

=====================================

功能:

备份数据库到文件

将备份数据传输到远端服务器

设置定时备份并传输任

======================================

#!/bin/bash

#

db_user="dbuser"

db_password="123456"

db_host="127.0.0.1"

db_file_time="`date +%Y%m%d%H%M%S`"

sql_name="school_student_${db_file_time}.sql"

ftp_password="tarena"

ftp_user="root"

ftp_host="192.168.10.104"

dest_path="/root/data/backup"

?

function auto_ftp

{

ftp -niv << EOF

??????? open "$ftp_host"

??????? user $ftp_user $ftp_password

?

??????? cd $dest_path

??????? put $1

??????? bye

EOF

}

mysqldump -u"$db_user" -p"$db_password" -h"$db_host" school student > $sql_name && auto_ftp $sql_name

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读