Linux之MariaDB基础总结(一)

一、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 授权用户数据库 mariadb权限_存储引擎

二、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

mariadb 授权用户数据库 mariadb权限_数据库_02

mariadb 授权用户数据库 mariadb权限_存储引擎_03

    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,直接覆盖即可

mariadb 授权用户数据库 mariadb权限_存储引擎_04

    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数据库

mariadb 授权用户数据库 mariadb权限_数据库_05

    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

mariadb 授权用户数据库 mariadb权限_存储引擎_06

mariadb 授权用户数据库 mariadb权限_数据库_07

    查询数据:

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}]

mariadb 授权用户数据库 mariadb权限_存储引擎_08

    更新数据:

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限制要修改的行数。

mariadb 授权用户数据库 mariadb权限_运维_09

    删除数据:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
               [WHERE where_condition]
                   [ORDER BY ...] 
                   [LIMIT row_count]

mariadb 授权用户数据库 mariadb权限_mariadb 授权用户数据库_10

    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,授权该用户对该表为插入权限,插入一行数据测试,并且查询验证是否有权限

mariadb 授权用户数据库 mariadb权限_操作系统_11

mariadb 授权用户数据库 mariadb权限_运维_12

mariadb 授权用户数据库 mariadb权限_操作系统_13

mariadb 授权用户数据库 mariadb权限_数据库_14

    注:授权某用户权限需要在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插入权限

mariadb 授权用户数据库 mariadb权限_运维_15

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

MariaDB [(none)]> REVOKE ALL  ON test.* FROM 'bobo'@'192.168.%.%';
    Query OK, 0 rows affected (0.00 sec)




转载于:https://blog.51cto.com/daisywei/1710705