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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章