httpd+php:是在httpd中启用模块,不同的工作模式,使用的模块不同
modules
httpd:prefork --> libphp5.so
httpd:event or worker --> libphp5-zts.so
php:引入zend engine后,分为两个阶段:opcode和excute
scanning --> parsing --> compilation --> excution
PHP:
php解释器:
配置文件:/etc/php.ini,/etc/php.d/*.ini
配置文件(php.ini)在PHP启动时被读取。对于服务器模块版本的PHP,仅在web服务器启动时读取一次,对于CGI和CLI版本,每次调用都会读取。
ini:
[Section]
directive = value
MariaDB(mysql):
关系型数据库的一种开源实现;RDBMS设计范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)、第五范式(5NF,又称完美范式)
RDBMS:
MySQL:MySQL,MariaDB,Percona-server
PostgreSQL:简称为pgsql --> EnterpriseDB
Oracle:
MSSQL:
事务:多个操作被当做一个整体对待
ACID:Atomicity、Consistency、Isoaltion、Durability
A:原子性; C:一致性; I:隔离性; D:持久性
基本概念:
约束:constraint,向数据表提供的数据要遵守的限制;
主键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行,且NOT NULL;
唯一键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行,允许NULL;
外键:一个表中的某字段可填入数据取决于另一个表的主键已有的数据;
检查性:
索引:将表中的一个或多个字段中的数据复制一份另存,并且需要按特定次序排序存储;
关系运算:
选择:挑选出符合条件的部分行
投影:挑选出需要的字段
连接:
数据抽象:
物理层:决定数据的存储格式,即RDBMS在磁盘上如何组织文件;
逻辑层:描述DB存储什么数据,以及数据间存在什么样的关系;
视图层:描述DB中的部分数据;
MariaDB:
安装MySQL:
源代码:编译安装
二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用;
程序包管理器管理的程序包:
rpm:OS Vendor、项目官方
deb:
MariaDB的特性:
插件式存储引擎:存储管理器有多种实现版本,功能和特性可能略有差别:用户可根据需要灵活选择;存储引擎也称之为“表类型”;
更多的存储引擎:MyISAM --> Aria,InnoDB --> XtraDB
安装使用MariaDB: 二进制格式的程序包安装
CentOS 7直接提供;
CentOS 6:
1、下载:mariadb-5.5.68-linux-x86_64.tar.gz(在下载时,看到还有mariadb-5.5.68-linux-systemd-x86_64.tar.gz,应该是对systemd的支持,即可以使用systemd进行管理),是通用二进制包。
2、创建mysql用户,以此用户运行mysql进程。
3、展开压缩包:一定放置于/car/local下
4、解压后,创建mariadb-5.5.68-linux-x86_64目录,安装要求放在mysql目录,所以创建链接:
5、进入mysql目录:
修改目录中文件及子目录的属主属组:
其中,data目录用于存储数据库数据的,一般单独存放于一个挂载的设备上,因为数据是不断增加变化的,所以存放的设备一般要能够随时扩展,因为数据重要,所以最好有快照或备份功能,这里实验将其安装在LVM上的xfs系统上。
查看本机的磁盘,sdb上还有多余的空间:fdisk /dev/sdb -l
创建新分区:
修改分区类型:
创建物理卷、卷组、逻辑卷:
对于CentOS6,需要额外安装xfs:
创建xfs文件系统:
配置开机挂载:编辑/etc/fstab
创建/mydata目录:
mkdir /mydata
重载fstab:
创建data目录,修改属主属组:
6、创建mysql数据库:
保存数据库数据的目录是用--datadir=path参数设定,--user=user_name是指定以哪个用户运行。
.
对于mysql来说,创建的数据库其实就是data下的一个目录,目录中保存创建对应数据库的数据,一个逻辑映射关系。这里可以看到,创建了mysql目录,也就是有一个mysql数据库。
7、添加服务启动脚本,mysql已经给了:
8、准备配置文件
配置格式:类ini格式,为各程序均通过单个配置文件提供配置信息;
[prog_name]
配置文件查找次序:
/etc/my.cnf --> /etc/mysql/my.cnf --> --default-extra-file=/PATH/TO/CONF_FILE --> ~/.my.cnf
现在按第二个组织配置文件:创建/etc/mysql/my.cnf
安装后的MariaDB提供了几个配置文件,是按照不同的内存大小来配置的。
cp support-files/my-large.cnf /etc/mysql/my.cnf
调整上述文件:
9、启动MariaDB:
第一次启动时:
分析其错误提示,是创建日志文件时出错,在/var/log/目录下创建mysqld.log失败,原因是/var/log目录的属主属组是root,而mysql启动是用的mysql用户,手动创建mysqld.log文件,然后chown mysql.mysql /var/log/mysqld.log,重新启动:
MariaDB的程序组成:
C:
mysql:CLI交互式客户端程序;
mysqldump,mysqladmin...
S:
mysqld_safe
mysqld
mysqld_multi
服务器端监听的两种socket地址:
ip socket:监听在tcp的3306端口,支持远程通信;
unix sock:监听在sock文件上(/tmp/mysql.sock,/var/lib/mysql/mysql.sock),仅支持本地通信。
server:localhost,127.0.0.1 (本地共享文件通信方式)
命令行交互式客户端程序:mysql
mysql
-uUSERNAME:用户名,默认为root
-hHOST:服务器主机,默认为localhost
-pPASSWORD:密码,默认为空
注意:mysql用户账号由两部分组成:‘USERNAME’@‘HOST’;其中HOST用于限制此用户可通过哪些主机远程连接mysql服务器。
支持使用通配符:
%:匹配任意长度的任意字符;
_:匹配任意单个字符;
命令:
客户端命令:本地执行;
mysql> help 获取所有客户端命令
每个命令都有完整形式和简写格式,如status 简写 \s
服务端命令:通过mysql协议发往服务器执行并取回结果;
每个命令都必须有命令结束符,默认为分号;。
使用客户端工具登录数据库:
安全初始化:mysql_secure_installation,因为root默认密码全为空,不安全,使用这个脚本进行安全初始化。
关系型数据库的常用组件:
数据库:database
表:table
行:row
列:column
索引:index
视图:view
用户:user
权限:privilege
存储过程:procedure
存储函数:function
触发器:trigger
事件调度器:event scheduler
SQL语句:
DDL:Data Defination Language
CREATE,DROP,ALTER
DML:Data Manipulation Language
INSERT,DELETE,UPDATE,SELECT
GRANT,REVOKE
数据库:
CREATE DATABASE|SCHEMA [IF NOT EXISTS] ‘DB_NAME’;
DROP DATABASE|SCHEMA [IF EXISTS] ‘DB_NAME’;
CHARACTER SET 'character set name' 使用的字符集
COLLATE 'collate name' 使用的排序方法
查看支持的所有字符集:show character set;
查看支持的所有排序规则:show collations;
查看所有的数据库:show databases;
获取命令使用帮助:
mysql>HELP KEYWORD; 如HELP CREATE DATABASE
表:
CREATE TABLE [IF NOT EXISTS] tb_name (col1 datatype 修饰符,col2 datatype 修饰符,...) ENGINE=''
查看所有的引擎:show engines;
查看所有的表:show tables [ from db_name];
查看表结构:desc [db_name.]tb_name;
删除表:DROP TABLE [IF EXISTS] tb_name;
数据类型:
字符型:
定长字符型:CHAR(#),BINARY(#)
变长字符型:VARCHAR(#),VARBINARY(#)
对象存储:
TEXT:不区分大小写
BLOB:区分大小写
内置类型:
ENUM:枚举类型
SET:集合
数值型:
精确数值型:
整型 int:tinyint、smallint、mediumint、int、bigint
十进制 decimal:decimal
近似数值型:单精度浮点型float、双精度浮点型double
日期时间型:
日期:DATE
时间:TIME
日期时间型:DATETIME
时间戳:TIMESTAMP
年份:YEAR(2),YEAR(4)
修饰符:
NOT NULL:非空约束
DEFAULT VALUE:设定默认值
UNSIGNED:无符号数
AUTO_INCREMENT:自动增长
字段修饰符:
PRIMARY KEY
UNIQUE KEY
数据库基础应用:
获取创建表命令帮助:mysql> HELP CREATE TABLE;
查看创建命令:SHOW CREATE TABLE tbl_name;
查看表状态:SHOW TABLE STATUS LIKE ‘tbl_name’\G
删除表:
DROP TABLE [IF EXISTS] ‘tbl_name’;
修改表:
ALTER TABLE ‘tbl_name’
字段:
添加字段:add
删除字段:drop
修改字段:alter,change,modify
索引:
添加索引:add
删除索引:drop
表选项
索引:
索引是特殊数据结构:定义在查找时作为查找条件的字段;
索引可以有索引名称;
DML:INSERT,DELETE,SELECT,UPDATE
DCL:GRANT,REVOKE
用户账号及权限管理:
用户账号:'user'@'host'
host:此用户访问mysqld服务时允许通过哪些主机远程创建连接:
IP、网络地址、主机名、通配符(%和_);
禁止检查主机名:my.cnf中,[mysqld] skip_name_resolve = yes
创建用户账号:
CREATE USER ‘username’@‘host’ [IDENTIFIED BY 'password'];
删除用户:
DROP USER 'username'@'host'
授权:
权限:管理权限、数据库、表、字段、存储例程
GRANT priv_type,... ON [object_type] db_name.ta_name TO 'user'@'host' [IDENTIFIED BY 'password'];
priv_type:ALL [PRIVILEGES]
db_name.tb_name:
*.*:所有库的所有表;
db_name.*:指定库的所有表;
db_name.tb_name:指定库的指定表;
db_name.routine_name:指定库的存储例程;
查看指定用户获得的授权:
SHOW GRANTS FOR 'user'@'host';
SHOW GRANTS FOR CURRENT_USER;
回收权限:
REVOKE priv_type,... ON db_name.tb_name FROM 'user'@'host';
注意:MariaDB服务进程启动时会读取mysql库中的所有授权表至内存中;
(1)GRANT或REVOKE等执行权限操作会保存于表中,MariaDB的服务进程会自动重读授权表;
(2)对于不能够或不能及时重读授权表的命令,可手动让MariaDB的服务进程重读授权表;
mysql> FLUSH PRIVILEGES;