2.5 MySQL数据库的基本管理

数据库的介绍

简单来说,可以将数据库理解为更高级的表格软件.
每个数据库中包含若干数据表,每个数据表又记录若干信息.
数据库对信息进行了归类存储.
常见的数据库有MySQL, Oricle, MongoDB, Sqlite, Sqlserver等等.

数据库中常用名词

名词解释
数据表表格
数据库存放表格的目录
查询对表格中指定内容进行检索

数据库的基本管理

前期准备

一如既往在实验前需要做的部分准备工作.

  • 防火墙相关设置
  • 配置软件仓库
  • 安装mariadb数据库软件并启用

数据库的安装

dnf search mariadb
dnf install mariadb-server.x86_64 -y

本次使用的mariadbMySQL的一个开发分支,语法及支持基本相同.

MariaDB基本信息

##软件基本信息

mariadb.service								##数据库服务
3306										##默认开放网络端口
/etc/my.cnf.d/mariadb-server.cnf			##主配置文件
/var/lib/mysql								##数据目录
											##当需要重新安装mariadb时需要清理或备份本目录

当安装MariaDB完成后,对软件进行检查以确保确实安装成功.

systemctl status mariadb.service 			##检查数据库服务状态
systemctl enable --now mariadb.service 		##启用数据库服务
mysql										##进入数据库操作模式

SHOW DATABASES;								##查询所有当前数据库

如果后两步操作能确实执行,说明服务正常运转,即软件安装成功.

但值得注意的是
可以看到输入mysql命令后就进入了编辑模式,并没有要求密码或登录操作.
在实际应用中这显然是不安全的,需要通过安全初始化进行最基本的安全提升.

数据库的安全初始化

mysql_secure_installation							##安全初始化脚本

Enter current password for root (enter for none):	##询问数据库原始密码
													##没有密码,回车跳过

Set root password? [Y/n] y							##设置数据库管理员密码
New password: 										
Re-enter new password: 								##确认密码
Password updated successfully!						##设置提示
Reloading privilege tables..
 ... Success!

Remove anonymous users? [Y/n] y						##是否禁止匿名用户登录
 ... Success!

Disallow root login remotely? [Y/n] y				##是否禁止管理员远程登陆
 ... Success!

Remove test database and access to it? [Y/n] y		##是否删除测试用数据库
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reload privilege tables now? [Y/n] y				##是否刷新数据库
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!							##操作完成的提示

经过上述一长串的安全初始化工作,我们做到了以下事情.

  1. 设置了管理员账户的密码
  2. 需要登录才能使用数据库
  3. 远程登陆管理员账户被禁止了
  4. 删除了安装软件时的测试用数据库并对数据库状态进行了刷新

但是同时还有一个业务上的安全问题.数据库本身是为业务服务的,业务因为其安全性需求,不应该允许外部用户能够直接访问数据库.
但是如果我们查看数据库的端口会发现:

netstat -antlupe | grep mysql				##查询到默认对外开放了3306端口

MySQL服务默认对外开放了3306端口,这显然是我们不希望看到的.
可以通过对主配置文件的修改来禁用对完暴露的端口.

vim /etc/my.cnf.d/mariadb-server.cnf 		##修改主配置文件,关闭数据库网络端口
systemctl restart mariadb					##重启数据库服务
netstat -antlupe | grep mysql				##再次查询端口,网络端口关闭

经过以上操作,数据库最基本的安全初始化就设置完毕了.

本部分配图

无需认证即可进入数据库
设置密码后的显示
关闭网络端口的设置

数据库的基本管理命令

数据库基本操作的常规总结分为四类: 增删改查.

  • 查: 包括对数据库/数据表的检索,对指定表中需要数据的检索.
  • 增: 创建数据库/数据表,在表中插入数据.
  • 改: 更改数据表名,修改表中指定内容.
  • 删: 删除数据库/数据表,删除表中指定内容.

值得一提的是,通常来说没有更改数据库名的操作,因为既不安全也不可靠.
如果实在需要更改请进入/var/lib/mysql中直接修改文件名.
这么做可能会导致数据丢失,并不推荐使用.

##数据库的查看
SHOW DATABASES;						##显示数据库名称
USE mysql;							##进入mysql数据库
SHOW TABLES;						##显示当前库中的所有数据表
SELECT * FROM user					##查询user表中的所有字段
SELECT Host,User,Password From user	##查询user表中指定指定字段(这里为Host,User,Password)

##新建数据库/数据表
CREATE DATABASE Test;				##新建Test数据库
CREATE TABLE linux{
username varchar(6) not null,
password varchar(6) not null
};									##新建表并指定字段及其类型
DESC linux;							##显示linux表的结构

##插入数据到表中
INSERT INTO linux VALUES ('user1','123');		
									##插入一组数据到linux表中
									##user1对应username字段,123对应password字段
INSERT INTO linux VALUES ('user1','123'),('user2','123');																	
									##同时插入多组数据的方法
flush privileges;					##刷新MySQL的系统权限相关表

##更改相关信息
ALTER TABLE linux RENAME redhat;	##将linux表的表名改为redhat
ALTER TABLE linux ADD age varchar(6) AFTER password;
									##在linux表中添加一个新的字段age
									##该字段要求为varchar(6)
									##添加位置在password字段之后
ALTER TABLE linux ADD age varchar(6);
									##如果不加以指定,新的字段会添加在所有字段的末尾
ALTER TABLE linux DROP age;			##删除linux表中的age字段
UPDATE linux SET sex='girl'			##将linux表中所有行的age字段数据都改为girl
UPDATE linux SET sex='girl' WHERE username='NeuWings';
									##将linux表中username字段为NeuWings的行的sex字段改为girl
									##本质是字段精准定位并修改

##数据库与数据表的删除
DROP TABLE linux;					##删除linux表
DROP DATABASE Test;					##删除Test数据库
DELETE FROM linux WHERE username='test' and age='123';
									##从linux表中删除同时符合两个条件的行

关于表的指定方式.

当你已经进入数据库中后(USE DATABASE;),只需要直接输入表名即可使用.

但如果你还没有进入指定数据库就像对表进行操作,需要进行精准定位:库.表.

ALTER TABLE Test.linux DROP age;,在没有进入Test数据库中时删除linux表中的age字段.

数据库的密码管理

修改数据库密码的方式有两种,区别在于是否知道当前该用户的密码是什么.
通常来说我们把知道密码的修改方式叫做更改密码,而不知道的方式叫做破解密码.

修改数据库密码

mysqladmin -uroot -ptest password test2				##修改root用户的密码
													##当前密码为test
													##修改为test2

破解数据库密码

当不记得或无法正确输入当前数据库密码时无法使用上述方法,只能通过跳过授权表进入数据库,然后直接修改表中用户数据的方式来修改密码.

systemctl stop mariadb								##临时关闭数据库服务
mysqld_safe --skip-grant-tables &					##已跳过权限表的方式后台运行数据库
mysql												##由于跳过了权限表,无需密码就可以登录数据库

UPDATE mysql.user set Password=password('161616') WHERE User='root';
##未使用过mysqladmin更改密码时使用该命令修改密码
UPDATE mysql.user set authentication_string=password('161616') WHERE User='root';
##使用过mysqladmin更改密码时使用该命令修改密码
##上述操作针对RHEL8以后适用
quit
##退出数据库操作

ps aux | grep mysql					##查询数据库相关进程
kill -9 6241
kill -9 6341						##将所有进程全部关闭以退出跳过权限表模式

systemctl start mariadb				##重启数据库服务
mysql -u root -p					##使用新密码登录

本部分配图

跳过授权进入数据库
更改密码
退出跳过授权表模式
密码破解成功

重装数据库

sytemctl stop mariadb						##停止数据库服务
rm -rf /var/lib/mysql/						##删除数据目录
dnf reinstall mariadb-server.x86_64 -y 		##重新安装mariadb数据库软件
systemctl enable --now mariadb				##使服务重新生效		

##重点:重装之前删除库文件

重装数据库的重点在就在于清空数据目录.
如果不清空数据目录就重装,重装后的软件依旧会使用之前的数据文件.

数据库的权限管理

超级用户对于数据库有完全的管辖权.
当然也包括对于其他用户的控制权力.
新创建的用户默认是没有任何权限的,但可以通过赋予权限来实现权限管理.

##首先建立实验用用户
CREATE USER test@localhost identified by '161616';
CREATE USER test@`%` identified by 'test';

这里虽然两个用户的名字相同,都为test
但是@localhost 表示该用户只能在数据库所在主机登录
@'%' 表示该用户可以通过远程登陆
因此本质上还是两个独立的用户
顺带一提,用户可以通过远程登录不代表数据库有远程登陆的功能.

刚才有提到新创建的用户默认是没有权限的.
我们登录超级用户对数据库进行概览.

mysql -uroot -p
Enter password: 




SELECT Host,User FROM mysql.user;
+-----------+------+
| Host      | User |
+-----------+------+
| %         | test |
| 127.0.0.1 | root |
| ::1       | root |
| localhost | root |
| localhost | test |
+-----------+------+
5 rows in set (0.001 sec)

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.113 sec)

可以看到其中的数据库和数据表以及刚刚创建好的用户.

但如果使用新创建的test用户登录数据库进行概览.

[root@Node1 Desktop]# mysql -utest -p161616

MariaDB [(none)]> SHOW DATABASES
    -> ;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.000 sec)

mysql -utest -p161616
SELECT * FROM Test.tb1
ERROR 1142 (42000): SELECT command denied to user 'test'@'localhost' for table 'tb1'

就会发现该用户既无法看到本机有什么数据库, 也不能查看表中有什么内容.
因为新创建的用户没有查看权限,发生这样的事也是理所当然的了.

通过超级用户对其进行权限附加可以解决这样的问题.

GRANT SELECT ON Test.* TO test@localhost;		##赋予test@localhost用户
												##查看Test数据库中任意表的权限

mysql -utest -p161616							##切换到test用户进行验证
SELECT * FROM Test.testtable;
Empty set (0.000 sec)

但因为只赋予了test用户查看权限,所以虽然可以查看,但如果插入数据依旧会提示权限不足.

GRANT INSERT ON Test.* TO test@localhost;		##赋予test@localhost用户
												##在Test数据库中任意表中的插入权限

同理可以对删除和修改权限进行控制.

那如何撤销已经赋予的授权呢?
需要用到REVOKE命令.

REVOKE INSERT on Test.* FROM test@localhost;	##撤销test用户对于Test数据库的插入权限

本部分配图

创建实验用户
查看用户列表
无权查看
无权查看表
赋予查看权限
拥有了查看权限

数据库备份

数据库的备份和恢复可能比想象中简单.

  • 数据库的备份使用mysqldump命令,把数据库内容备份到指定文件.
  • 数据库的恢复使用mysql命令,实际上是把备份文件中的内容写入到新创建好的库中.

示例

##数据库的备份
mysqldump -uroot -p161616 mysql > /mnt/mysql.sql			##将mysql数据库被分到mnt目录下的mysql.sql中	
mysqldump -uroot -p161616 --all-databases > /mnt/all.sql	##把本机所有的数据库被分到mnt目录下的all.sql中


mysqldump -uroot -p161616 --all-databases --no-databases > /mnt/all_nodata.sql
															##把本机所有的数据库被分到mnt目录下的all.sql中
															##但只备份数据库和表的格式而不备份数据


##数据库的恢复
mysql -uroot -p161616 -e "CREATE DATABASE Test"				##创建新的Test数据库
mysql -uroot -p161616 Test < /mnt/Test.sql					##将mnt下的备份文件写入到Test数据库中

在上面的方式中密码采用了明文输入,这显然是不安全的.
为了安全可以只增加-p参数而不直接输入密码,采用在下方额外输入密码的方式运行命令.
密文执行

本部分配图

数据库备份
数据库恢复
实现数据库恢复
数据库的内容恢复了

PHPMyAdmin的安装

PHPMyAdmin是老牌的图形化数据库管理软件,依托PHP对数据库进行管理.
该软件对数据库和php的版本都有要求,这里使用3.4.0版本作为实验版本.

因为PHP本身并不支持对数据库的操作,因此需要先安装支持.

dnf search php								##搜索相关软件
dnf install php php-mysqlnd.x86_64 -y		##安装PHP及数据库支持插件
##PHPMyAdmin安装操作
cp ~/phpMyAdmin-3.4.0-all-languages.tar.bz2 /var/www/html/
cd /var/www/html/								##移动到Apache目录
tar jxf phpMyAdmin-3.4.0-all-languages.tar.bz2 	##解压软件包
mv phpMyAdmin-3.4.0-all-languages/ Myphpadmin	##修改为容易识别的名字
cd Myphpadmin/									##进入软件目录
cp config.sample.inc.php config.inc.php 		##使用模板创建配置文件
systemctl restart httpd							##重启Apache服务使之生效

本部分配图

成功安装
正确进入图形化界面
图形化操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值