当前位置: 首页 > news >正文

Linux入门攻坚——28、php、mysql基础

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;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 实现图片拖拽和缩小放大功能。
  • Java:对比一个对象更新前后具体被修改了哪些值
  • sqlalchemy_dm
  • JS中的File(五):node.js中的file模块使用
  • pytest:4种方法实现 - 重复执行用例 - 展示迭代次数
  • Java周总结7.20day
  • Python学习笔记—100页Opencv详细讲解教程
  • .NET 通过系统影子账户实现权限维持
  • 当Excel处理神器EasyExcel遇上Apache POI:一场关于依赖的趣味‘撞车’冒险
  • swift小知识点(二)
  • 使用APEXSQL LOG解析sql server事务日志,进行审计与数据恢复
  • 手撕排序算法:冒泡排序
  • GPT-5一年半后发布
  • 【Linux】编辑器vscode与linux的联动
  • 通过 Nginx 修复 CORS 漏洞
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • HTML-表单
  • HTTP 简介
  • HTTP中的ETag在移动客户端的应用
  • mysql 数据库四种事务隔离级别
  • PAT A1120
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 关于springcloud Gateway中的限流
  • 前端之React实战:创建跨平台的项目架构
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 事件委托的小应用
  • 算法之不定期更新(一)(2018-04-12)
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 用简单代码看卷积组块发展
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • #{} 和 ${}区别
  • #WEB前端(HTML属性)
  • (02)Unity使用在线AI大模型(调用Python)
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (javaweb)Http协议
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (二)丶RabbitMQ的六大核心
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (七)理解angular中的module和injector,即依赖注入
  • (三)docker:Dockerfile构建容器运行jar包
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .gitignore文件_Git:.gitignore
  • .NET CF命令行调试器MDbg入门(一)
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET的微型Web框架 Nancy
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET中使用Protobuffer 实现序列化和反序列化