作业(四)
1、写一个一键安装 mariadb 数据库脚本。
事先准备mariadb二进制文件
#MYSQL='mariadb-10.2.31-linux-systemd-x86_64.tar.gz'
NAME='mariadb-10.2.31-linux-systemd-x86_64'
PASS=123456
#创建mysql用户
getent passwd | grep mysql &> /dev/null
if [ $? -eq 0 ];then
echo "用户已存在,退出!"
exit
else
useradd -s /sbin/nologin -r mysql
echo "用户创建成功!"
fi
#创建数据目录
if [ -d /data/mysql ];then
echo "数据库已存在,退出!"
else
mkdir -p /data/mysql
chown mysql:mysql /data/mysql
fi
#安装mysql所需的模块文件
yum -y install perl-Data-Dumper libaio
#解压已准备好的二进制文件
tar xvf ${NAME}.tar.gz -C /usr/local
cd /usr/local
ln -s ${NAME} mysql
chown -R root:root /usr/local/mysql/
cat > /etc/my.cnf << EOF
[mysqld]
datadir=/data/mysql
socket=/tmp/mysql.sock
skip_name_resolve = on
log-error=/data/mysql/mysql.log
[client]
socket=/tmp/mysql.sock
EOF
cd /usr/local/mysql
#执行脚本,指定数据文件路径,以mysql用户
./scripts/mysql_install_db --datadir=/data/mysql --user=mysql
#设置PATH变量
ln -s /usr/local/mysql/bin/* /usr/bin/
#启动脚本复制开机自启目录
cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
#启动mysqld,开机自启
chkconfig --add mysqld
service mysqld start
if [ $? -eq 0 ];then
echo "数据库安装完成!"
else
echo "数据库安装失败,退出!"
exit 2
fi
#安全加固
mysql_secure_installation << EOF
y
$PASS
$PASS
y
y
y
y
EOF
2、简述Event 事件介绍以及它的优缺点
事件(event)是MySQL在相应的时刻调用的过程式数据库对象。一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”
优点:一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能,可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用
3、在 students 表中,查询年龄大于25岁,且为男性的同学的名字和年龄:
MariaDB [hellodb]> select name,age from students where age > 25 and gender='M';
+--------------+-----+
| name | age |
+--------------+-----+
| Xie Yanke | 53 |
| Ding Dian | 32 |
| Yu Yutong | 26 |
| Shi Qing | 46 |
| Tian Boguang | 33 |
| Xu Xian | 27 |
| Sun Dasheng | 100 |
+--------------+-----+
7 rows in set (0.00 sec)
4、在 students 表中,以 ClassID 为分组依据,查询显示每组的平均年龄
MariaDB [hellodb]> select AVG(age),classid from students group by classid;
+----------+---------+
| AVG(age) | classid |
+----------+---------+
| 63.5000 | NULL |
| 20.5000 | 1 |
| 36.0000 | 2 |
| 20.2500 | 3 |
| 24.7500 | 4 |
| 46.0000 | 5 |
| 20.7500 | 6 |
| 19.6667 | 7 |
+----------+---------+
8 rows in set (0.00 sec)
5、显示第2题中平均年龄大于30的分组及平均年龄
MariaDB [hellodb]> select classid,AVG(age) from students group by classid having AVG(age) > 30 ;
+---------+----------+
| classid | AVG(age) |
+---------+----------+
| NULL | 63.5000 |
| 2 | 36.0000 |
| 5 | 46.0000 |
+---------+----------+
3 rows in set (0.00 sec)