第九周 - MySQL 周作業

嘿!路人甲發表於2020-09-26

1、寫一個一鍵安裝 mariadb 資料庫指令碼。

# 實現二進位制安裝mariadb 的一鍵安裝指令碼
#!/bin/bash
#
#*************************************************
#Author:     dawn
#Date:       2020-09-25
#FileName:   test.sh
#URL:        https://blog.csdn.net/xiao_dan_
#Desc:       The test script
#Copyright (C):2020 All rights reserved
#*************************************************

. /etc/init.d/functions

src_dir=`pwd`
mariadb_path=''
install_dir=/usr/local/


begin_color='echo -e \033[1;31m'
end_color='\033[0m'

read -p "請輸入壓縮包名稱:" package
read -p "請輸入資料庫root 的口令(可選):" passwd

chk_envir() {
	if [ $UID -ne 0 ];then
		action "當前使用者不是root,安裝失敗" false
		exit 1
	fi
	
	if ! [ -e ${src_dir}/${package} ];then
		${begin_color}"缺少${package}檔案"${end_color}
		${begin_color}"請將軟體安裝包放在${SRC_DIR}目錄下"${end_color}
		exit
	
	elif [ -e /usr/local/mariadb ];then
		action "資料庫已存在,安裝失敗" false
		exit
	else
		mariadb_path=`echo ${package} | sed -nr 's#^(.*)\..*\..*#\1#p'`
		return
	fi

}

install_mariadb() {
	${begin_color}"開始安裝mariadb 資料庫..."${end_color}
	# 建立mysql 系統使用者
	id mysql &> /dev/null || { groupadd mysql; useradd -r -g mysql -s /sbin/nologin mysql; action "建立mysql使用者"; }
	
	# 安裝必要的依賴包
	yum -y -q install libaio numactl-libs libncurses*
	
	# 將安裝包解壓到/usr/local 目錄下
	tar -xf ${package} -C ${install_dir}
	cd ${install_dir}
	
	# 建立mysql 的軟連結
	ln -sv ${mariadb_path} mysql
	chown -R root:root ${install_dir}mysql
	
	# 設定環境變數
	echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
	chmod +x /etc/profile.d/mysql.sh
	. /etc/profile.d/mysql.sh
	
	# 建立資料存放位置
	mkdir -p /data/mysql
	chown -R mysql:mysql /data/mysql
	
	# 設定mysql 的配置檔案
	cat > /etc/my.cnf << EOF
[mysqld]
datadir = /data/mysql
innodb_file_per_table = on
skip_name_resolve = on
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
EOF
	
	# 建立資料庫檔案(初始化資料庫)
	./mysql/scripts/mysql_install_db --datadir=/data/mysql --user=mysql
	
	# 建立mysql 服務
	cp ./mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
	chkconfig --add mysqld
	service mysqld start
	
	[ $? -ne 0 ] && { ${begin_color}"資料庫啟動失敗,退出!"${end_color};exit; }
	
	# 如果輸入了密碼,則執行資料庫加固操作
	if ! ${passwd} &> /dev/null ; then
		/usr/local/mysql/bin/mysql_secure_installation << EOF
y
${passwd}
${passwd}
y
y
y
y


EOF
		action "資料庫安裝完成,root 口令已修改"
	else
		action "資料庫安裝完成"
		${begin_color}"請執行exec mysql_secure_installation 初始化資料庫並修改root 口令"${end_color}
	fi
}

chk_envir
install_mariadb

2、簡述Event 事件介紹以及它的優缺點

事件是MySQL 在相應的時刻呼叫的過程式資料庫物件。一個事件可呼叫一次,也可週期性的啟動。由一個特定的執行緒來管理,即“事件排程器”。跟觸發器類似,都是在某些事情發生的時候啟動。當資料庫上啟動一條語句的時候,觸發器就啟動了。而事件是根據排程事件來啟動的。事件被稱為臨時性觸發器。MySQL 的事件排程器可精確到每秒鐘執行一個任務。

優點:一些對資料定實行操作不再依賴外部程式,而直接使用資料庫本身提供的功能,可實現每秒鐘執行一個任務,在對實時性要求較高的環境下非常實用。
缺點:定時觸發,不可直接呼叫

3、在 students 表中,查詢年齡大於25歲,且為男性的同學的名字和年齡:

select name,age from students where gender="M" and age > 25;

4、在 students 表中,以 ClassID 為分組依據,查詢顯示每組的平均年齡

select classid,avg(age) as 平均年齡 from students group by classid;

5、顯示第2題中平均年齡大於30的分組及平均年齡

select classid,avg(age) as 平均年齡 from students group by classid having avg(age) > 30;

相關文章