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 dbuser@’%’ 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的内容如下:

[root@ansible 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尽量不要以变量的形式写在脚本中,容易出错// 

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

执行结果

[root@ansible script]# bash operate_mysql.sh school "select * from student;"

id      name    age

102     xiaohua   femail

104     xiaofang   mail

[root@ansible script]#                                                                                                                          

 

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

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

[root@ansible 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','$name','$age')"

        fi

done

~    

执行结果是:

[root@ansible script]# bash operate_mysql.sh school "select * from student;"

id      name       age

106     xiaomingming    mail

107     xiaohua      femail

[root@ansible 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则正常

验证:

[root@ansible 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

[root@clone-node vsftpd]# cat /etc/passwd | grep ftpuser

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

[root@clone-node vsftpd]#

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

比如

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

Username: ftpuser                         username:fangqiming

Password:tarena                           password: tarena

[fangqiming@ansible vsftpd]$  ----------à-username:root,password:tarena

username:root,password:tarena-<--------- [root@clone-node 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服务器上

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

[root@ansible script]# vim ftp.sh   #设置脚本内容,将下面

[root@ansible 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.

[root@ansible script]#

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

[root@ansible 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中查看,已传递成功!

[root@clone-node tmp]# ll test1.sql

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

[root@clone-node 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

 

posted @ 2019-04-18 22:05  朝鲁梦_FQM  阅读(1302)  评论(0编辑  收藏  举报