【作业笔记】MySQL基础

作业要求(PDF)参见这里

这几天,在整理我的移动硬盘和服务器上的存储的历史文件的时候,发现现在Linux课/云计算课的很多实验内容我在高中早就在RaspberryPi(树莓派)上搭建过实验过。

所以,索性就把每篇我以前做过的实验写成笔记发出来供同学们参考吧(前提是我几年前的笔记文件没删且还找得到)。

其她:想考RedHat(红帽)Linux认证的可以看这篇


虽然是高中早就做过的学习和实验内容,但还是写一篇吧,水一篇文章。

注1:我的学号尾号是36,除了我本人外,使用如下示例截屏PS交作业均属无效。

注2:老师发的实验作业PPT(PDF)版本非常老旧,许多命令和操作步骤在现在的新版本上会报错,建议按照我的这篇笔记做。

由于我的设备(电脑)为SurfaceGo,开不起虚拟机,将使用云服务器进行实验和作业。
学习环境推荐:VULTR & 阿里云

环境版本:RedHat RHEL Linux 8 > Apache HTTPD 2.4 + MySQL 8.0 + PHP 8.0 ;
注意:不同版本的命令和需要的代码有一定差别。

1 – 安装并启动MySQL。

yum install wget vim -y
yum install mysql-server mysql -y
systemctl restart mysqld
systemctl enable mysqld
systemctl status mysqld
Install And Start

2 – 防火墙配置(仅限本机和内网可访问数据库)。

注意:如果你和我一样使用直接暴露公网的环境进行学习和实验测试,一定要配置防火墙(或安全组)对敏感端口仅限本机或可信的内网访问。

firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.36.36.0/24" port protocol="tcp" port="3306" accept'
firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.36.36.0/24" port protocol="tcp" port="33060" accept'
firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.36.36.0/24" port protocol="tcp" port="3306" accept' --permanent
firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.36.36.0/24" port protocol="tcp" port="33060" accept' --permanent

3 – 登录数据库并测试(show数据库)。

mysql -h localhost -uroot -p
> <Enter>
> SHOW DATABASES;
Login And Show

4 – 为数据库root用户设置密码。

注意:如果你是直接暴露公网的生产环境,请不要和学习(实验)环境一样使用123456作为密码。

/**
更改密码
*/
> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
/**
测试能否正常登录
*/
mysql -h localhost -uroot -p123456
> SHOW DATABASES;
Change Password And Test

5 – 创建 kk 用户 和 sts 用户 并授予其 36student 数据库的权限。

/**
kk密码为654321仅限本机登录,sts密码为363636不限制登录主机
*/

/**
创建用户kk并给权限
*/
> CREATE USER 'kk'@'localhost' IDENTIFIED BY '654321';
> GRANT ALL PRIVILEGES ON `36student`.* TO 'kk'@'localhost';
/**
创建用户sts并给权限
*/
> CREATE USER 'sts'@'%' IDENTIFIED BY '363636';
> GRANT ALL PRIVILEGES ON `36student`.* TO 'sts'@'%';
User Add kk And Perm
User Add sts And Perm

6 – 导入测试数据进行测试。

wget -O /root/testData.mdb https://www.iamsts.cn/Services/SZIIT/2001050336Temporary/users.mdb
/**
root|kk|sts 三个用户均可,都有36student数据库的权限
*/
> CREATE DATABASE 36student;
> USE 36student;
> SOURCE /root/testData.mdb;
Import Test Data

7 – 在36student数据库中创建info数据表(字段、类型、长度、引擎 设置要求见作业PDF)。

> USE 36student;
> CREATE TABLE `36student`.`info` (`name` CHAR(10) NOT NULL , `number` CHAR(10) NOT NULL , `score` INT(10) NOT NULL , `address` TEXT NOT NULL ) ENGINE = InnoDB;
> DESCRIBE info;
Create Table

8 – 随便插入些数据。

> INSERT INTO `info` (`name`, `number`, `score`, `address`) VALUES ('sts', '2001050336', '114514', 'Guangdong');
> INSERT INTO `info` (`name`, `number`, `score`, `address`) VALUES ('zwx', '2101050136', '233333', 'Guangdong');
> SELECT * FROM info;
Insert And Check

9 – 创建mysqlDump导出数据备份。

mysqldump 36student -uroot -p>/home/36student.backup.sql
ll /home/ | grep sql
mysqlDump Backup

10 – 删除36student数据库。

> DROP DATABASE 36student;
> SHOW DATABASES;
Drop DB

11 – 通过备份出来的文件恢复数据库。

> CREATE DATABASE 36student;
> exit;
mysql 36student -uroot -p</home/36student.backup.sql
> <123456><Enter>
mysql -uroot -p123456
> USE 36student;
> SELECT * FROM info;
Recover Data

12 – 通过PHP在前端Web中以表格形式显示数据库内容。

/**
安装 Apache HTTPD 和 PHP
*/
yum install httpd -y
systemctl restart httpd
systemctl enable httpd
systemctl status httpd
firewall-cmd --zone=public --add-port=80/tcp
firewall-cmd --zone=public --add-port=80/udp
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=80/udp --permanent
yum install php-cli.x86_64 php-common.x86_64 php-dba.x86_64 php-fpm.x86_64 php-embedded.x86_64 php-mysql.x86_64 php-mysqlnd.x86_64 php-xml.x86_64 php-xmlrpc.x86_64 -y
/etc/init.d/php-fpm* restart
/**
在/var/www/html/2001050336HOMEWORK/ 下创建 mysqlTest.php 页面
*/
<center>
<h1>
<br />
<?php
$ConnectSQL = mysqli_connect('localhost','YOUR_USER','YOUR_PASSWORD','YOUR_DB_NAME');
$GetInfo = mysqli_query($ConnectSQL,"SELECT * FROM info;");
echo "<table align=center width=600 border=1 bgcolor=#ACD6FF>";
echo "<TR><TD>Name</TD><TD>Number</TD><TD>Score</TD><TD>Address</TD></TR>";
while($DisplayForm=mysqli_fetch_array($GetInfo)){
echo "<tr><td>"; 
echo $DisplayForm['name'];
echo "</td><td>";   
echo $DisplayForm['number'];
echo "</td><td>";    
echo $DisplayForm['score'];
echo "</td><td>";
echo $DisplayForm['address'];
echo "</td></tr>"; 
};
echo "</table>";
mysqli_close($ConnectSQL);
?>
</h1>
</center>
PHP Code

13 – 测试访问。

Visit Test Page

14 – 20221111补充:补充题
创建一个mary用户,密码为redhat,仅能本机登录,仅有36student数据库的查询(select)权限
根据导入的数据,密码是fadora的用户名字叫什么
根据导入的数据,多少人名字是John且同时居住在Santa Clara

> CREATE USER 'mary'@'localhost' IDENTIFIED BY 'redhat';
> GRANT SELECT ON `UserData36`.* TO 'mary'@'localhost';
测试仅查询(select)权限,可见删除(drop)数据表是被拒绝的
> USE 36student;
> SELECT * FROM u_name JOIN u_passwd WHERE userid=uid AND password="fadora";
> SELECT * FROM u_name JOIN u_loc WHERE userid=uid AND location="Santa Clara" AND firstname="John";

完成。

喵。

发表评论