数据库
- 数据库(database),简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行增,删,改,查等操作。
- 所谓“数据库“是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
- 我们把数据填到表格中,叫table,很多table叫一个库,database,很多库叫数据库软件。
- 数据库可以分为关系数据库和非关系数据库,其中关系数据库包括:
1>MySQL
MariaDB(MySQL的代替品,英文维基百科从MySQL转向MariaDB)
Percona Server(MySQL的代替品·)
2>PostgreSQL
3>Microsoft Access
4>Microsoft SQL Server
5>Oracle数据库
MariaDB
- MariaDB 数据库管理系统是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可。MariaDB 的目的是完全兼容MySQL,包括 API 和命令行,是 MySQL 的代替品。
- MariaDB 由 MySQL 的创始人 Michael Widenius (英语:Michael Widenius )主导开发,他早前曾以 10 亿美元的价格,将自己创建的公司 MySQL AB 卖给了 SUN ,此后,随着SUN 被甲骨文收购, MySQL 的所有权也落入 Oracle 的手中。
- MariaDB 名称来自 Michael Widenius 的女儿 Maria 的名字.
安装MariaDB
1.修改网络配置,修改主机名,搭建yum仓库
2.安装mariadb
yum search mariadb
yum install mariadb-server.x86_64 -y
systemctl start mariadb
systemctl enable mariadb
systemctl status mariadb
安全初始化
- 数据库起始状态的设定信息是不安全的,任何用户都可以登陆而不需要输密码,所以我们需要作以下设定:
mysql_secure_installation ##安全初始化
Enter current password for root (enter for none): ##刚下载的mariadb超户是没有密码的,且默认登陆的用户就是超户,所以直接回车
Set root password? [Y/n] ##为超户设置密码
New password: ##输入你设置的密码
Re-enter new password: ##再次输入
Remove anonymous users? [Y/n] ##移走匿名用户
Disallow root login remotely? [Y/n] ##不允许超户远程登陆
Remove test database and access to it? [Y/n] ##删掉测试的数据库
Reload privilege tables now? [Y/n] ##对数据库刷新,让所有的数据同步
为了安全,后面的这些选项我们都选yes,直接回车就行。
- 默认情况下,数据库的网络端口3306是打开的,为了安全我们需要关闭此端口。
注意:netstat主要用来显示网络状态,有关netstat中相关参数的说明如下:
官方定义: Netstat是在内核中访问网络连接状态及其相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。
a | all显示所有连线中的Socket |
---|---|
n | 不做解析只显示ip地址 |
t | tcp协议 |
l | 活跃的 |
u | udp协议 |
p | 进程名称 |
e | 扩展信息 |
- 我们需要编写配置文件
/etc/my.cnf
,因为是针对mysql的,所以我们将skip-networking=1
写到mysql区域,重启服务systemctl restart mariadb
。
- 再次查看mysql的端口3306就没有了。
数据库的管理
数据库管理中最大单元是数据库,不区分大小写,但是大写更专业。
查询
mysql -uroot -p ##root用户登陆数据库
SHOW DATABASES; ##查询数据库
USE mysql; 进入mysql数据库
SHOW TABLES; 查询mysql的所有表
字段:在表中一列叫一个字段,查询字段用SELECT语句+列名。
SELECT * FROM user;
SELECT Host,User,Password FROM user;
SELECT Host,User,Password FROM user where Host='localhost';
建立
CREATE DATABASE zhang; ##创建一个叫zhang的数据库
USE zhang; ##进入zhang
CREATE TABLE linux(
-> username varchar(20) not null,
-> password varchar(20) not null
-> ); ##在zhang中建立表linux,linux表由两个属性,分别为用户名和密码,数据类型是varchar(20),且非空,必须填写。
DESC linux; ##查看表linux的结构。
注意:varchar(50)和char(50)的区别:
varchar(50) 字符长度不超过50,是可变长数据类型,超过50会截取。
char 定长数据类型,指定长度,长度不够会用空格补全后面的。
INSERT INTO linux VALUES ('even','111');
INSERT INTO linux VALUES ('alice','222');
SELECT * FROM linux;
更改
ALTER TABLE linux RENAME westos; ##把linux表名改为westos
ALTER TABLE westos ADD age varchar(10); ##向表westos中增加age列,
ALTER TABLE westos DROP age; ##删除表中的age列
ALTER TABLE westos ADD age varchar(10) AFTER username; ##向username后加入age列
UPDATE westos SET age=15; ##把表中所有的age列的值改为15
UPDATE westos SET age='18' WHERE username='even'; ##把表中username是even的列的age值改为18
INSERT INTO westos VALUES('lala','','123'); ##插入一个age未空的用户lala
一般只改表的名字,数据库名一般不改,因为有可能会导致数据迷路,数据丢失。
删除
DELETE FROM westos WHERE username='even' AND age='12'; ##删除表中username是even且age为12的行
DROP TABLE westos; ##删表
DROP DATABASE zhang; ##删库
数据库的备份
数据库文件所在目录是/var/lib/mysql
mysqldump -uroot -p zhang > /mnt/zhang.sql ##将数据库zhang备份到/mnt下
mysqldump -uroot -p zhang --no-data ##将数据库zhang备份,不备份数据只备份表的结构
mysqldump -uroot -p --all-databases ##备份所有数据库
mysqldump -uroot -p --all-databases --no-data ##备份所有数据库的表的结构
恢复方式1:
mysql -uroot -p -e "CREATE DATABASE westos;" ##先创建数据库
mysql -uroot -p westos < /mnt/zhang.sql ##再把备份的导入
恢复方式2:
vim /mnt/zhang.sql 中写入
CREATE DATABASE westos; ##指定到文件中
USE westos;
mysql -uroot -p < /mnt/zhang.sql
修改超级用户数据库的密码
- 知道原密码时:
mysqladmin -uroot -pzhang password westos ##将原密码zhang改为westos
mysql -uroot -pwestos ##用新密码登陆测试
- 忘记原密码时:
1.首先,关闭数据库服务systemctl stop mariadb.service
2.开启安全模式,跳过授权表 ,因为会占用终端所以加&打入后台运行。
mysqld_safe --skip-grant-tables &
3.此时任何用户都可以直接登陆而不用密码,我们输入mysql后,在mysql数据库的user表中修改root的密码。
mysql
SHOW DATABASES;
USE mysql;
SHOW TABLES;
SELECT * FROM mysql.user;
UPDATE user SET Password='zhang' WHERE User='root'; ##修改root的密码为zhang,但是密码是明文的很不安全。
UPDATE user SET Password=password('westos') WHERE User='root'; ##加密
4.结束所有进程,也就是关闭安全模式,再开启数据库服务systemctl start mariadb.service
fg
killall -9 mysqld_safe
ps -aux | grep mysql
kill -9 3556
注意:普通用户知道自己的密码时不能修改,因为他对数据库没有权限,需要修改密码,直接用超级用户在mysql数据库的user表中修改就行,修改完后需要用命令FLUSH PRIVILEGES
,全部刷新,新密码才生效。
用户授权
- 实验准备:关闭防火墙,并开放端口3306,让其他主机可以通过网络登陆数据库。
- 创建两个用户,注意westos@’%'和westos@localhost不是一个用户,用户=名字+可在哪登陆,%表示可以在任何地方可以登陆数据库,而localhost是限制在本机登陆。
CREATE USER westos@'%' identified by 'westos'; by后跟的是用户密码
CREATE USER westos1@localhost identified by 'westos';
SELECT User,Host FROM mysql.user;
- 测试:分别在本机用westos1用户和其他主机用westos用户测试:
其他主机同样需要安装mariadb,我们可以yum whatprovides */mysql
,安装mariadb-5.5.52-1.el7.x86_64
,mariadb-server.x86_64 1:5.5.52-1.el7
,开启服务systemctl start mariadb.service
mysql -uwestos -h172.25.254.124 -p ##其他主机通过网络访问数据库的命令
mysql -uwestos1 -p ##本机访问
注意:1.数据库系统和文件系统一样,都是需要授权的,此时我们给两个用户都没有赋予权力,所以他们只能登陆,且只能看他能看到部分可见的数据库,我们需要root给他们赋予权力他们才能进行其他增删改查操作。
2.超级用户一次可以授予多个权力,用逗号,分开就行。
- 用户授权
mysql -uroot -p ##超级用户登陆
SHOW GRANTS FOR westos1@localhost; ##查看westos1@localhost用户的权限
GRANT SELECT on westos.* TO westos1@localhost; ##给westos1@localhost用户赋予查看的权限
GRANT INSERT,DELETE on westos.* TO westos1@localhost; ##给westos1@localhost赋予插入和删除的权限
此时此用户westos1@localhost可以对westos数据库中的表作以下操作:
mysql -uwestos1 -p ##登陆
SELECT * FROM westos.linux; ##查
INSERT INTO westos.linux VALUES ('hello','222'); ##增
DELETE FROM westos.linux WHERE username='hallo'; ##删
- 超级用户收回权力
mysql -uroot -p ##超级用户登陆
REVOKE DELETE,INSERT on westos.* FROM westos1@localhost; ##撤销westos1@localhost增和删的权限
SHOW GRANTS FOR westos1@localhost;
mysql -uwestos1 -p ##westos1登陆
SELECT * FROM westos.linux;
DELETE FROM westos.linux WHERE username='hello';
INSERT INTO westos.linux VALUES('haha','333');
- 删除用户
mysql -uroot -p ##超级用户登录
DROP USER westos@'%'; ##删除用户westos@‘%’
DROP USER westos1@localhost; ##删除用户westos1@localhost
SELECT Host,User FROM mysql.user;
FLUSH PRIVILEGES; ##刷新全局,刷新授权表,当更改未生效时就用刷新命令。
安装phpmyadmin 数据库图形管理
- phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,但是您可以在任何地方使用这些程式产生的HTML页面,也就是于远端管理MySQL数据库,方便的建立、修改、删除数据库及资料表。也可借由phpMyAdmin建立常用的php语法,方便编写网页时所需要的sql语法正确性。
- 简单来说通过使用此软件我们对数据库的管理会比通过命令管理更加简单方便。
实验步骤:
- 首先安装httpd服务,开启服务并设置为开机启动:
yum install httpd -y
systemctl start httpd.service
systemctl enable httpd.service
- 获得phpmyadmin的压缩包,并把phpmyadmin的安装包在/var/www/html目录下解压,并解包,我们可以重命名为mysqladmin方便在浏览器下访问。
yum install lftp -y
tar jxf phpMyAdmin-3.4.0-all-languages.tar.bz2 ##解压并解包
mv phpMyAdmin-3.4.0-all-languages/ mysqladmin ##重命名
- 安装php,php-mysql两个包,此时可以通过php -m 命令查看mysql有没有出现,这表示已经运行php加载的模块。
yum search php
yum install php.x86_64 -y
yum install php-mysql.x86_64 -y
php -m
-
在/var/www/html/mysqladmin中可以阅读帮助文件README,里面有应该安装软件的版本
-
vim Documentation.txt
并cp config.sample.inc.php config.inc.php
,并将Documentation.txt
中139行中的cookie的几个字符ba17c1ec07d65003添加到config.inc.php
文件中,重启httpd服务systemctl restart httpd.service
。
注意:对cookie的说明:
cookie就是服务器暂存放在你计算机上的一笔资料,好让服务器辨认你的计算机,当你在浏览网站时,web服务器会先发送一笔小小的资料放在你的计算机上,cookie会帮你在网站上所输入的文字或一些选择都记录下来,当下次再访问同一网站时,web服务器会先查看有没有上次留下的cookie资料,有的话,会依据cookie里的内容来判断使用者,送出特定的网页内容给你。
-
此时,在浏览器中输入172.25.254.124/mysqladmin就可以访问了,建库,建表。在shell端可以检测。
-
在shell端检测:
注意:此时在服务端需要关闭防火墙,或将httpd服务加入防火墙允许的列表中才能正常访问。