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.user\G
权限
赋权:
使用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 T3\G
*************************** 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);
mysql学习笔记二 —— 权限体系的更多相关文章
- MySQL学习笔记二:权限管理
1. 创建和删除用户,mysql中的用户是由用户名和主机名来确定的 create user "user_name@host_name" identified by passwd; ...
- MySQL学习笔记(二):MySQL数据类型汇总及选择参考
本文主要介绍了MySQL 的常用数据类型,以及实际应用时如何选择合适的类型. ******几个通用的简单原则:******* 1. 更小的通常更好.但是要确保没有低估需要存储的值的范围,如果无法确定 ...
- MySQL学习笔记(二)
连接与断开服务器 应该以下面的方式连接MySQL服务器,而不是将密码以明文方式输入连接. C:\> mysql -h host -u user -pEnter password: ******* ...
- sql分类及基本sql操作,校对规则(mysql学习笔记二)
sql针对操作对象分为不同语言 数据操作(管理)语言 DML或者将其细分为 ( 查询 DQL 管理(增,删,改) DML) 数据定义语言(对保存数据的格式进行定义) DDL 数据库控制语言(针对数 ...
- MySQL学习笔记二
Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...
- MySQL学习笔记(二)—查询
一.多表连接查询 新建两张表t_user.t_order. 1.内连接 返回满足条件的所有记录. (1)显式内连接 使用inner join关键字,在on ...
- MySQL 学习笔记 二
Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...
- MySql学习笔记(二) —— 正则表达式的使用
前面介绍利用一些关键字搭配相应的SQL语句进行数据库查找过滤,但随着过滤条件的复杂性的增加,where 子句本身的复杂性也会增加.这时我们就可以利用正则表达式来进行匹配查找. 1.基本字符匹配 ' o ...
- Mysql学习笔记(二)数据类型 补充
原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...
随机推荐
- oracle dataguard主从切换
前言: 众所周知DataGuard一般的切换分成两种,一种是系统正常的情况下的切换这种方式为:switchover是无损切换,不会丢失数据:另外一种方式属于灾难情况下的切换,这种情况下一般主库已经启动 ...
- P1734 最大约数和
题目描述 选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大. 输入输出格式 输入格式: 输入一个正整数S. 输出格式: 输出最大的约数之和. 输入输出样例 输入样例#1: 复 ...
- 关于栈和队列的一点点小知识-----C++自带函数
栈和队列我们可以用C++里自带的函数使用,就不必手写了 1.栈,需要开头文件 #include<stack> 定义一个栈s:stack<int> s; 具体操作: s.emp ...
- 学习Karma+Jasmine+istanbul+webpack自动化单元测试
学习Karma+Jasmine+istanbul+webpack自动化单元测试 1-1. 什么是karma? Karma 是一个基于Node.js的Javascript测试执行过程管理工具.该工具可 ...
- 专业语音芯片MT8516 华为AM08蓝牙音箱
天猫精灵和亚马逊专用的语音芯片哦!联发科! 华为AM08蓝牙音箱 WT51F5161T的8052 微处理器,RC内振12MHz,具有16Kx8 的flash,硬件IIC,SPI,CEC,IR,RTC, ...
- Centos7下完美安装并配置mysql5.6
Centos7将默认数据库mysql替换成了Mariadb,对于我们这些还想用mysql的人来说并不是一个好消息. 最近我搜罗了网上各种安装教程,各种出问题,要么安装失败,要么安装成功了却使用不了my ...
- 关于window.onload()的加载问题
今天写了个js的demo,遇到了个小问题,后来发现是自己对window.onload()的具体用处不是太清楚,现在跟大家分享一下. <head> <meta http-equiv=& ...
- mysql分表操作
一般分表操作有垂直拆分和水平拆分.顾名思义. 1. 垂直拆分是指,这个表的列,即字段,要拆分成两个或多个表. 这个应用场景比如:这个表字段,几个都是int.datetime等,有那么一个是text类 ...
- JS-JS代码插入位置
一.HTML 页面的 <head> 部分中 由于 HTML 文档是由浏览器从上到下依次载入的,将 JavaScript 代码放置于<head></head> 标签之 ...
- DataWorks使用小结(二)——功能面板使用指南
一.数据开发 1.任务开发 新建表 野路子可以直接新建一个任务,粘贴DDL,手动运行任务即可完成建表 正常应当是在“数据管理”->数据表管理中建表: 支持可视化建表和DDL建表(配合之前的宏,建 ...