要点:

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学习笔记二 —— 权限体系的更多相关文章

  1. MySQL学习笔记二:权限管理

    1. 创建和删除用户,mysql中的用户是由用户名和主机名来确定的 create user "user_name@host_name" identified by passwd; ...

  2. MySQL学习笔记(二):MySQL数据类型汇总及选择参考

    本文主要介绍了MySQL 的常用数据类型,以及实际应用时如何选择合适的类型.  ******几个通用的简单原则:******* 1. 更小的通常更好.但是要确保没有低估需要存储的值的范围,如果无法确定 ...

  3. MySQL学习笔记(二)

    连接与断开服务器 应该以下面的方式连接MySQL服务器,而不是将密码以明文方式输入连接. C:\> mysql -h host -u user -pEnter password: ******* ...

  4. sql分类及基本sql操作,校对规则(mysql学习笔记二)

    sql针对操作对象分为不同语言 数据操作(管理)语言 DML或者将其细分为 ( 查询  DQL 管理(增,删,改)  DML) 数据定义语言(对保存数据的格式进行定义) DDL 数据库控制语言(针对数 ...

  5. MySQL学习笔记二

    Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...

  6. MySQL学习笔记(二)—查询

    一.多表连接查询 新建两张表t_user.t_order.              1.内连接      返回满足条件的所有记录. (1)显式内连接      使用inner join关键字,在on ...

  7. MySQL 学习笔记 二

    Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...

  8. MySql学习笔记(二) —— 正则表达式的使用

    前面介绍利用一些关键字搭配相应的SQL语句进行数据库查找过滤,但随着过滤条件的复杂性的增加,where 子句本身的复杂性也会增加.这时我们就可以利用正则表达式来进行匹配查找. 1.基本字符匹配 ' o ...

  9. Mysql学习笔记(二)数据类型 补充

    原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...

随机推荐

  1. iptables四表五链及默认规则使用,

    网络基础 TCP/IP模型: 应用层===传输层===网络层===数据链里层===物理层 数据封装: MAC帧头+IP报头+TCP/UDP报头===HTTP请求 数据帧 TCP/UDP报头: 随机产生 ...

  2. SQL优化思路大全

    一.百万级数据库优化方案 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断 ...

  3. PAT A1120 Friend Numbers (20 分)——set

    Two integers are called "friend numbers" if they share the same sum of their digits, and t ...

  4. AI 深度生成模型

    深度生成模型 1.玻尔兹曼机

  5. ThreadLocal可能引起的内存泄露

    threadlocal里面使用了一个存在弱引用的map,当释放掉threadlocal的强引用以后,map里面的value却没有被回收.而这块value永远不会被访问到了. 所以存在着内存泄露. 最好 ...

  6. Oracle ORA-14102: 只能指定一个 LOGGING 或 NOLOGGING 子句

    oracle 11g ,在通过命令impdp向一个数据库用户导入数据时,出现错误: ORA-14102: 只能指定一个 LOGGING 或 NOLOGGING 子句 造成此问题的原因是:当导入的表里没 ...

  7. blob 对象 实现分片上传 及 显示进度条

    blob对象介绍 一个 Blob对象表示一个不可变的, 原始数据的类似文件对象.Blob表示的数据不一定是一个JavaScript原生格式 blob对象本质上是js中的一个对象,里面可以储存大量的二进 ...

  8. C#中当程序的访问权限不足时,Directory.Exists和File.Exists方法不会抛出异常报错

    有些时候,我们开发的C#应用程序的执行账号,可能没有对一些文件夹和文件的访问权限,当我们使用Directory.Exists和File.Exists方法去判断这些文件夹和文件是否存在的时候,Direc ...

  9. Vue-条件渲染v-if与v-show

    一.共同点 根据数据值来判断是否显示DOM元素 二.区别 代码: <!DOCTYPE html> <html lang="en"> <head> ...

  10. java异步编程降低延迟

    目录 java异步编程降低延迟 一.ExecutorService和CompletionService 二.CompletableFuture(重要) 三.stream中的parallel(并行流) ...