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