Linux之MariaDB基础总结(一)

Linux之MariaDB基础总结(一)

Scroll Down

一、MariaDB简介

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,被视为开源数据库MySQL的替代品。MariaDB名称来自Michael Widenius的女儿Maria的名字。

MariaDB 是一个采用 Maria 存储引擎的MySQL分支版本,提供一些新的特性或对MySQL一些功能增强:Maria存储引擎、PBXT存储引擎、XtraDB存储引擎、FederatedX存储引擎、更快的复制查询处理、线程池、更少的警告和bug、运行速度更快、更多的 Extensions (More index parts, new startup optionsetc)、更好的功能测试、数据表消除、慢查询日志的扩展统计、支持对 Unicode 的排序

简要概述SQL核心组件作用

连接池:认证、线程重用、连接数限制、内存检查、缓存

SQL接口:DDL, DML, 关系型数据库的基本抽象

parser: 查询转换、对象权限检查

优化器:访问路径,性能相关的统计数据

caches和buffers:与存储引擎自身相关的I/O性能提升工具

存储引擎:MyISAM、InnoDB(变种:XtraDB)、Memory、Merge、Federated、CSV、Archive、Blackholl、Aria、SphinxSE、TokuDB

二、MariaDB安装(yum安装)

按照之前准备工作,这里测试安装的操作系统为CentOS Linux release 7.1.1503,默认启用了firewall防火墙和SELINUX防火墙,这里先做关闭。注意使用centos7和centos7以下的版本使用的命令有所不同。

关闭firewall:

[root@localhost ~]#systemctl stop firewalld.service #停止firewall

[root@localhost ~]#systemctl disable firewalld.service #禁止firewall开机启动

关闭SELINUX:

[root@localhost ~]#vi /etc/selinux/config

#SELINUX=enforcing #注释掉

#SELINUXTYPE=targeted #注释掉

SELINUX=disabled #增加

:wq! #保存退出

[root@localhost ~]#setenforce 0 #使配置立即生效

1、yum安装MariaDB

[root@localhost ~]#yum install mariadb mariadb-server

2、启用MariaDB服务,覆盖my.cnfw文件并查看监听端口是否正常

[root@localhost ~]#systemctl start mariadb.service

[root@localhost ~]#cp /usr/share/mysql/my-huge.cnf /etc/my.cnf

注意:如果/etc目录下面默认有一个my.cnf,直接覆盖即可

3、设置ROOT密码(注:如果不设置密码默认密码为空)

[root@localhost ~]# mysqladmin -u root password "root"

4、登陆mysql

[root@localhost ~]# mysql -uroot -p

三、MariaDB程序类别及命令选项(注:命令使用几乎和MySql一致)

客户端程序常用选项

-u:指定登陆用户

-h:指定登陆主机

-p:指定登陆密码

-P:指定端口,默认监听端口:tcp/3306

-D:指定连接后默认使用的数据库

-H:指定产生html输出

-X:指定产生xml输出

客户端交互模式下常用命令

MariaDB [(none)]> help #列出所有命令

MariaDB [(none)]> ? #相当于help

MariaDB [(none)]> \c #取消命令执行

MariaDB [(none)]> \q #退出

MariaDB [(none)]> ! #运行shell命令

MariaDB [(none)]> \s #显示服务器端状态信息

命令行快捷键编辑

Ctrl+a: 快速移动光标至行首

Ctrl+e: 快速移动光标至行尾

Ctrl+w: 删除光标之前的单词

Ctrl+u: 删除行首至光标处的所有内容

Ctrl+y: 粘贴使用Ctrl+w或Ctrl+u删除的内容

四、MariaDB数据类型及属性修饰符

常见数据类型

字符型:CHAR、VARCARH、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOG、LONGBLOB

修饰符:NULL(允许为空)、NOT NULL(不允许为空)、DEFAULT 'string'(默认值,不适用于TEXT)、CHARACTER SET 'set'(设定字符集)、COLLATION 'collation'(设定字符集排序规则)、SHOW COLLATION(查看可用排序规则)、DEFAULT(不用于BLOB类型)

字符有通配符: %(匹配任意长度的任意字符)、_(匹配任意单个字符)

整型:TINYINT、SMALLINT、MEDIUMINT 、INT、BININT

修饰符:UNSIGNED(无符号)、NULL、NOT NULL、DEFAULT、AUTO_INCREMENT(自动增长)

特殊要求:非空,且必须是主键或惟一键

浮点型:FLOAT、DOUBLE

修饰符:NOT NULL、NULL、DEFAULT、UNSIGNED

布尔型:没有专用布尔型,其是TINYINT(1)的别名

日期时间型:DATE、TIME、DATETIME、TIMESTAMP、YEAR(2)、YEAR(4)

修饰符:NULL、NOT NULL、DEFAULT VALUE

内建类型:ENUM(枚举,表示仅能从给出的选项选择其中一个);如:ENUM('string1','string2'),SET(集合, 表示能使用给出的元素组合成字符串),如:SET('a','b','c')

修饰符:NULL、NOT NULL、DEFAULT ''

五、SQL(Structure Query Language)结构查询语言组成部分

DDL(Data Definition Language,数据定义语言:定义或改变表的结构、数据类型、表之间的链接和约束等):CREATE, DROP, ALTER

DML(Data Manipulation Language,数据操纵语言:数据库里的数据进行操作):SELECT, INSERT, UPDATE,DELETE

DCL(Data Control Language,数据控制语言:用来设置或更改数据库用户或角色权限的语句):GRANT, REVOKE,DENY

1)DDL操作

创建数据库:CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name

删除数据库:DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

修改数据库:ALTER {DATABASE | SCHEMA} [IF EXISTS] db_name

练习:创建数据库mydb01,删除该mydb01数据库

2)DML操作

插入数据:INSERT INTO

第一种:INSERT INTO tb_name [(clo1,col2……)] {VALUES|VALUE} (val1,val2)

第二种:INSERT INTO tb_name SET col1=val1,col2=val2,……

第三种:INSERT INTO tb_name SELECT clause

查询数据:SELECT [ALL | DISTINCT | DISTINCTROW ]

[FROM table_references

[WHERE where_condition]

[GROUP BY {col_name | expr | position}

[ASC | DESC], ... [WITH ROLLUP]]

[ORDER BY {col_name | expr | position}

[ASC | DESC], ...]

[LIMIT {[offset,] row_count | row_count OFFSET offset}]

更新数据:UPDATE tb_name SET col_name1=val1,col_name2=val2,……

UPDATE [LOW_PRIORITY] [IGNORE] table_reference

SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...

[WHERE where_condition]

[ORDER BY ...] :在限定所修改的行数前先做下排序

[LIMIT row_count] :限定所修改的行数据

注:UPDATE通常情况下,必须要使用WHERE子句,或者使用LIMIT限制要修改的行数。

删除数据: DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name

[WHERE where_condition]

[ORDER BY ...]

[LIMIT row_count]

3)进行DCL操作,先了解一下权限相关基础内容

A、权限类别分类:库级别、表级别、字段级别、管理类、程序类

B、管理类权限关键字

CREATE TEMPORARY TABLES:创建临时表,该表保存在内存中

CREATE USER:创建用户

FILE:在服务器上能够读取和写入文件

SUPER:杂项管理类的命令

SHOW DATABASES:用户是否能执行SHOW DATABASES命令,默认就赋予了

RELOAD:能够使用FLUSH和RESET命令

SHUTDOWN:关闭服务器

REPLICATION SLAVE:授权用户能够有复制的权限

REPLICATION CLIENT:向服务器查询该主机有哪些客户端

LOCK TABLES:显示施加表锁

PROCESS:查看线程列表,命令为SHOW PROCESSLIST;

C、库级别和表级别权限关键字

ALTER:修改表

ALTER ROUTINE:修改存储历程,包括存储过程和存储函数

CREATE:创建表和库

CREATE ROUTINE:创建存储过程和存储函数

CREATE VIEW:创建视图

DROP:删除表和库

EXECUTE:执行存储过程和存储函数

GRNAT OPTION:把自己获得的权限转赠给他人

INDEX:创建和删除索引

SHOW VIEW:查看一个视图是怎么被创建的

D、数据操作(表级别)权限关键字

SELECT:查询

INSERT:插入

UPDATE:更改

DELETE:删除

E、字段级别权限关键字:

SELECT(col1,...)

UPDATE(col1,...)

INSERT(col1,...)

F、所有权限:

ALL [PRIVILEGES]

DCL操作命令

GRANT:授权命令

GRANT priv_type [(column_list)]

[, priv_type [(column_list)]] ...

ON [TABLE|FUNCTION|PROCEDURE] priv_level

TO username@hostname [IDENTIFIED BY 'password'], [username@hostname [],...]

[REQUIRE SSL] //必须基于SSL连接访问

[WITH with_option ...]

priv_level:

  • //所有

| . //所有库的所有对象

| db_name.* //指定库的所有对象

| db_name.tbl_name //指定库的指定表

| tbl_name //指定表

| db_name.routine_name //指定库的存储历程,包括存储过程和存储函数

with_option:

GRANT OPTION //将自己的权限转赠给别人

| MAX_QUERIES_PER_HOUR count //每小时执行最多查询请求的个数

| MAX_UPDATES_PER_HOUR count //每小时执行最多更新的个数

| MAX_CONNECTIONS_PER_HOUR count //每小时最多建立连接次数

| MAX_USER_CONNECTIONS count //使用同一个帐号同时最多连接几个窗口

练习:添加用户bobo,密码为bobo,在test数据库中新建表SOO,授权该用户对该表为插入权限,插入一行数据测试,并且查询验证是否有权限

注:授权某用户权限需要在root用户权限

REVOKE:收回授权

REVOKE priv_type [(column_list)]

[, priv_type [(column_list)]] ...

ON [object_type] priv_level

FROM user [, user] ...

REVOKE ALL PRIVILEGES, GRANT OPTION

FROM user [, user] ...

练习:收回test数据库表SOO插入权限

注:取消指定的权限,若想取消bobo用户的所有权限可以使用ALL选项:

MariaDB [(none)]> REVOKE ALL ON test.* FROM 'bobo'@'192.168.%.%';

Query OK, 0 rows affected (0.00 sec)

【转载自:http://blog.51cto.com/daisywei/1710705】