zoukankan      html  css  js  c++  java
  • mysql学习笔记二 —— 权限体系

    要点:

    1、MySQL的API
    2、MySQL的相关文件
    3、MySQL的权限体系

    1、MySQL的API 应用程序接口 (application program interface)

    1.1 命令行中的 “mysql -e”  shell-->mysql:在命令行中执行SQL语句
    1.2 跟php的接口应用  mysql_connect()
    <?php
    $link=mysql_connect('127.0.0.1','root','123');
    if ($link)
    echo "Connection OK!";
    else
    echo "Connection failed!";

    ?>
    1.2.1 修改所有php页面的mysql_connect()函数
    1.2.2 访问install.php 安装库、表
    1.2.3 导入数据
    [root@localhost html]# mysql -u root -p123 -h localhost class < fangyuan.sql

    2、MySQL的文件
    配置文件(参数文件) /etc/my.cnf
    [root@localhost html]# mysql --help | grep my.cnf
    order of preference, my.cnf, $MYSQL_TCP_PORT,
    /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf

    socket: 用于本机链接本机 启动MySQL服务后才会有socket

    pid文件:

    /var/run/mysqld/mysql.pid

    mysql的表结构文件:

    *.frm 在/var/lib/mysql/库/*.frm

    innodb表相关文件:
    ibdata1 系统表空间:数据、回滚段等
    ib_logfile0 ib_logfile1 innodb表特有的日志文件

    日志:
    错误日志:

    mysql> show variables like "log_error";
    +---------------+---------------------+
    | Variable_name | Value |
    +---------------+---------------------+
    | log_error | /var/log/mysqld.log |
    +---------------+---------------------+
    1 row in set (0.00 sec)

    二进制日志 binlog
    记录对MySQL的所有更新的、插入的操作。对数据的修改的操作(增删改操作)
    作用: 恢复数据;MySQL复制 ab复制 master slave

    通用查询日志:建议保持默认值---OFF
    对MySQL所有增删改查都会记录到该日志中。(建议不修改,保持默认即可)
    mysql> show variables like "%general%";
    +------------------+----------------------------+
    | Variable_name | Value |
    +------------------+----------------------------+
    | general_log | OFF |
    | general_log_file | /var/run/mysqld/mysqld.log |
    +------------------+----------------------------+
    2 rows in set (0.00 sec)

    mysql> set global general_log=on; //全局修改,对所有的会话(链接)都生效;、session 会话级别,只当前链接生效
    Query OK, 0 rows affected (0.02 sec)

    慢查询日志: 优化SQL select多, sql SQL性能
    默认关闭的。开启后会记录那些超过指定时间的SQL语句,默认10s。

    mysql> show variables like "%slow%";
    +---------------------+---------------------------------+
    | Variable_name | Value |
    +---------------------+---------------------------------+
    | log_slow_queries | OFF |
    | slow_launch_time | 2 |
    | slow_query_log | OFF |
    | slow_query_log_file | /var/run/mysqld/mysqld-slow.log |
    +---------------------+---------------------------------+
    4 rows in set (0.00 sec)

    mysql> set global slow_query_log=on;
    Query OK, 0 rows affected (0.01 sec)

    mysql> set global long_query_time=5; //慢查询的超时间修改
    Query OK, 0 rows affected (0.00 sec)


    mysql> set session long_query_time=5;
    Query OK, 0 rows affected (0.01 sec)

    mysql> show variables like "long_query_time";
    +-----------------+----------+
    | Variable_name | Value |
    +-----------------+----------+
    | long_query_time | 5.000000 |
    +-----------------+----------+
    1 row in set (0.00 sec)

    mysqld.log mysqld.pid mysqld-slow.log

    [root@localhost mysqld]# tailf mysqld-slow.log

    /usr/libexec/mysqld, Version: 5.1.73 (Source distribution). started with:
    Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sock
    Time Id Command Argument
    # Time: 170815 11:31:37
    # User@Host: root[root] @ localhost []
    # Query_time: 7.005514 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
    SET timestamp=1502767897;
    select sleep(7);

    [root@localhost mysqld]# mysqldumpslow mysqld-slow.log //分析统计

    Reading mysql slow query log from mysqld-slow.log
    Count: 1 Time=7.01s (7s) Lock=0.00s (0s) Rows=1.0 (1), root[root]@localhost
    select sleep(N)


    3、MySQL权限体系
    权限管理:安全。
    服务器: 用户名、密码、来自哪里(访问方IP地址)
    cliet: 用户名、密码、登陆那台MySQL服务器(-h serverIP)

    添加用户:

    mysql>create user 'danny'@'192.168.19.251' identified by '123';
    或 mysql>create user "danny"@"192.168.19.251"  identified by '123';


    登录mysql:
    [root@localhost mysql]# mysql -u danny -p123 -h 192.168.19.251

    设置(修改)密码:

    mysql> set password for cjk@localhost = password('123');
    Query OK, 0 rows affected (0.00 sec)

    删除用户:
    mysql> drop user tom@localhost;
    Query OK, 0 rows affected (0.00 sec)

    查看
    mysql> select user,host,password from mysql.user;
    mysql> select user,host,password from mysql.userG


    权限

    赋权:
    使用create创建的用户只有一个登陆权限(usage),裸权限
    查看用户权限:

    mysql> show grants for danny@192.168.19.251;
    +-------------------------------------------------------------------------------------------------------------------------+
    | Grants for danny@192.168.19.251 |
    +-------------------------------------------------------------------------------------------------------------------------+
    | GRANT USAGE ON *.* TO 'danny'@'192.168.19.251' IDENTIFIED BY PASSWORD '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257' |
    +-------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)

    添加用户+密码+赋权 ---> grant
    mysql> grant all on *.* to danny@13.1.1.5;(已有用户赋权)
    mysql> grant all on *.* to wangtao@localhost identified by '123';(赋权同时创建用户)


    权限类别:
    GRANT OPTION 将被赋予的权限赋予别人
    USAGE 裸权限,只能登陆系统,用create user 创建的用户默认裸权限
    ALL 所有权限,但除了grant option
    REPLICATION SLAVE MySQL主从复制架构用的 master binlog slave

    权限回收:

    mysql> revoke all privileges ,grant option on *.* from wangtao@localhost; //收回权限
    mysql> grant select on *.* to "wang"@"localhost" identified by '123'; //赋予select权限并设置密码
    mysql> grant select on *.* to "wang"@"localhost"; //赋予select权限

    创建用户 设置密码 赋予权限 删除用户 收回权限

    授予权限的粒度:
    *.*     所有库中的所有表 全局权限 让用户对MySQL中所有库所有表具有xxx权限
    DB1.*    DB1库中所有的表 数据库 让用户对某个库中所有的表具有xxx权限
    DB1.T1   表中所有列的权限 表级别 让用户对某个表有xxx权限
    T1(id)   列权限 列级别 让用户对某个表的某列具有xxx权限

    mysql> grant select on DB1.T2 to "chenglong"@"localhost" identified by '123';

    mysql> grant all on DB1.T1 to "chenglong"@"%";


    ROOT密码忘记解决办法:
    1、关闭MySQL 进入配置文件,增加
    [mysqld]
    skip-grant-tables //跳过权限表认证
    [mysqld_safe]

    2、登陆MySQL
    #mysql 回车

    3、执行sql

    update mysql.user set password=password('123456') where user="root" and host="localhost";
    update mysql.user set password=password('xxx') where user="root" and host=192.168.1.1;
    flush privileges   //刷新权限

    4、退出mysql,并删除配置文件汇总的skip那行

    权限修改核实生效:
    grant -->立刻生效
    update msyql.user -->重启系统、或重启MySQL或执行flush privileges生效;

    4、索引
    SQL dba
    作用:快速找到(检索到)指定的行记录。如果没有索引,mysql会遍历整张表,直到找到要查询的记录,这个时间代价太大。

    数据结构:
    二叉查找树 内存
    平衡二叉树
    MySQL: B+树索引

    设置索引
    添加索引:创建表的时候,直接定义哪一个列为索引列
    mysql> create table T4 (id int primary key,name char(30));
    Query OK, 0 rows affected (0.01 sec)

    mysql> desc T4;
    +-------+----------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +-------+----------+------+-----+---------+-------+
    | id | int(11) | NO | PRI | NULL | |
    | name | char(30) | YES | | NULL | |
    +-------+----------+------+-----+---------+-------+
    2 rows in set (0.01 sec)


    追加索引:...,没指定过索引列,以后再去加上索引
    mysql> alter table DB1.T3 add key ind_id(id);(给id列加上索引,索引名为ind_id)

    mysql> alter table DB1.T3 add key id; (索引不使用别名,默认及列名,此处索引名就为id)

    给哪个、哪些列加索引:
    高选择性的列-->尽量不重复的列值-->id列

    查看表中索引的信息
    mysql> show index from T3G 
    *************************** 1. row ***************************
    Table: T3
    Non_unique: 1
    Key_name: ind_id
    Seq_in_index: 1
    Column_name: id
    Collation: A
    Cardinality: 5000000
    Sub_part: NULL
    Packed: NULL
    Null: YES
    Index_type: BTREE
    Comment:
    1 row in set (0.00 sec)


    约束:
    保证数据完整性
    unique 唯一键 如果对某一列加上了唯一属性,列值不能重复 primary key unique
    foreign key 外键 innodb(存储支持) 两张表的数据完整性 user order
    default 默认 当往字段中插入数据是,如果没给定该列值,列值应为default设置的值
    not null 非空 不能为空

    mysql> create table t6 (id int(11) primary key unique not null auto_increment, name char(30) not null, xingbie enum("M","F"), key mingzi(name));

    mysql> alter table t6 modify xingbie enum("M","F") default "F"; //修改,增加一个default

    mysql> insert into t6(name,xingbie) values("xiaowang","M"),("laowang",""); //传递了空值,没有用到default

    mysql> insert into t6(name) values("laowang33"); //这种方式可以用到default

    二叉查找树
    B+ 3层 查找某一行记录3次io 1s 100次io 0.01 0.02~0.03

    创建索引 primary key key
    alter table T1 add key xxx(id);

  • 相关阅读:
    Java 应用性能调优实践
    Java序列化——实现Serializbale接口
    Bootstrap3快速使用
    C语言程序设计_zju——记录1
    《图解密码技术》——记录1
    电脑win10蓝屏,INACCESSIBLE BOOT DEVICE,处理方法
    读书笔记之《如何高效学习》
    读书笔记之《番茄工作法图解》
    读书笔记之《富爸爸与穷爸爸》
    读书笔记之《微习惯》
  • 原文地址:https://www.cnblogs.com/dannylinux/p/8027085.html
Copyright © 2011-2022 走看看