MySQL学习日志(三)

#用户管理 查询优化 日志 

##MySQL 用户管理 

用户账号: [email protected]

用户账号管理:

CREATE USER   创建用户         CREATE USER [email protected]    [        IDENTIFIED BY [PASSWORD] ‘password‘           ]        主机也可以使用通配符: create user [email protected]‘172.16.100.1_ _‘  IDENTIFIED BY ‘password‘  # 表示可以使用100.100-100.199     DROP  USER   删除用户     RENAME USER   修改用户       RENAME USER old_user TO new_user    [, old_user TO new_user] ...    RENAME USER ‘jeff rey‘@‘localhost‘ TO ‘jeff‘@‘127.0.0.1‘;   SET  PASSWORD  设置密码

权限管理:

grant  授权

revoke  取消权限

**查看用户能够使用的权限:show grants for [email protected]‘hostname‘**

Mysql的权限类型:

库级别

表级别

字段级别

管理类

程序类

管理类权限

create temporary tables 临时表         create user         file 允许用户读或者写某些文件         lock tables 添加显式锁         process:查看用户的线程         reload:相当于执行flush和reset         replication client 查询有哪些复制客户端         replication slave 赋予用户复制权限         show databases 查看所有数据库         shutdown   关闭服务         super

数据库访问权限

           alter          alter routine 存储历程         create         create routine 存储过程,存储函数         create view         delete         drop         execute         grant option 将自己的权限复制给别的用户         index 索引         show view

数据操作类权限(表级别):

        select        insert        update        delete

字段级别:

       select(col1,....)       update(col1,....)       insert(col1,....)

所有权限:

    ALL [PRIVILEGES]

##GRANT

priv_type [(column_list)]      [, priv_type [(column_list)]] ...    ON [TABLE | FUNCTION | PROCEDURE] priv_level    TO [email protected] [IDENTIFIED BY ‘password‘] ...    [REQUIRE ssl] [WITH with_option ...]

#object_type: 类型

  TABLE | FUNCTION | PROCEDURE

#priv_level:  级别

* | *.* | db_name.* | db_name.tbl_name | tbl_name | db_name.routine_name     #user_specification: 给用户和密码的      user      [        IDENTIFIED BY [PASSWORD] ‘password‘      | IDENTIFIED WITH auth_plugin [AS ‘auth_string‘]       ]

#ssl_option: 设置默认连接方式

    SSL
  #with_option: 限定选项         GRANT OPTION 转赠给别人  | MAX_QUERIES_PER_HOUR count 每小时允许执行的最大查询次数  | MAX_UPDATES_PER_HOUR count  每小时允许执行的最大更新次数  | MAX_CONNECTIONS_PER_HOUR count  每小时允许执行的最大连接次数  | MAX_USER_CONNECTIONS count  使用同一个账号可以同时连接的次数

##收回授权 REVOKE

REVOKE priv_type [(column_list)]      [, priv_type [(column_list)]] ...    ON [TABLE | FUNCTION | PROCEDURE] priv_level    FROM user [, user] ...    REVOKE ALL PRIVILEGES, GRANT OPTION    FROM user [, user] ...    REVOKE PROXY ON user    FROM user [, user] ...

***几个跟用户授权相关的表:

    db:库级别的权限

    host:主机级别权限,已废弃

    tables_priv:表级别权限

    colomns_priv:列级别的权限

    procs_priv:存储过程和存储函数相关的权限

    proxies_priv:代理用户权限·***

##练习:

1、授权testuser能够通过172.16.0.0/16网络内的任意主机访问当前mysql服务器的权限

grant alter on *.* to ‘testuser‘@‘172.16.%.%‘ identified by ‘password‘

2、让此用户能够创建和删除testdb数据库,及库中的表

    grant create,drop on testdb.* to ‘testuser‘@‘172.16.%.%‘;

3、让此用户能够在testdb库中的t1表中执行查询、删除、更新和插入操作

    grant select,update,insert,delect on testdb.t1 to ‘testuser‘@‘172.16.%.%‘

4、让此用户能够在testdb库上创建和删除索引

  grant index,drop index on testdb to ‘testuser‘@‘172.16.%.%‘;

5、让此用户能够在testdb.t2表上查询id和name字段,并允许其将此权限传授予其他用户

    grant select(id,name) on testdb.t2 to ‘testuser‘@‘172.16.%.%‘    grant grant option on testdb.t2 to ‘testuser‘@‘172.16.%.%‘

##MySQL查询缓存

用于保存MySQL查询语句返回的完整结果。被命中时,MySQL 会立即返回结果,省去了解析,优化和执行等阶段

***如何检查缓存***

MySQL保存结果于缓存中:

把select语句本身做hash计算,计算的结果作为key,查询结果作为value

***什么样的语句不会被缓存***

查询语句中有一些不确定数据时,不会缓存,列如NOW(),CURRENT_TIME(),一般来说,如果查询中包含用户自定义函数,存储函数,用户变量,临时表,mysql库中系统表,或者任何包含权限的表,一般不会缓存

缓存会带来额外开销

1、每个查询都会先检查是否命中

2、查询结果要先缓存

   mysql> show global variables like ‘query_cache%‘;        +------------------------------+----------+| Variable_name                | Value    |+------------------------------+----------+| query_cache_limit            | 1048576  || query_cache_min_res_unit     | 4096     || query_cache_size             | 16777216 || query_cache_type             | ON       || query_cache_wlock_invalidate | OFF      |+------------------------------+----------+

query_cache_type : 查询缓存类型:是否开启缓存个功能,开启方式有三种{ON|OFF|DEMAND};

DEMAND: 意味着SELECT语句明确使用SQL_CACHE 选项时才会缓存

query_cache_size : 缓存时的总空间,单位为字节,大小必须是1024的整数倍,MySQL启动时,会一次分配并立即初始化这里指定大小空间,如果修改此大小,会清空缓存并重新初始化的

query_cache_min_res_unit:存储缓存的最小内存块 缓存空间-剩余空间/缓存个数

query_cache_limit:单个缓存对象的最大值,超出时则不预缓存,手动使用SQL_NO_CACHE可以人为的避免尝试缓存返回超出此参数限定值得语句

query_cache_wlock_invalidate:如果某个表被其他用户连接锁住了,是否仍然从缓存中返回结果,OFF表示返回

***如何判断命令率(次数)**

<!--分为次数和字节命中率-->

mysql> show global status like ‘Qcache%‘;+-------------------------+----------+| Variable_name           | Value    |+-------------------------+----------+| Qcache_free_blocks(空闲块数)      | 1        || Qcache_free_memory(空闲空间)      | 16759688 || Qcache_hits(命中次数)             | 0        || Qcache_inserts(向缓存空间中插入的缓存的次数)          | 0        || Qcache_lowmem_prunes(内存太小,修剪内存的次数)    | 0        || Qcache_not_cached(没被缓存的个数)       | 8        || Qcache_queries_in_cache(缓存中缓存的查询个数) | 0        || Qcache_total_blocks(总块数)     | 1        |+-------------------------+----------+

***碎片整理 flush query_cache***

***清空缓存 reset query_cache***

计算命中率

      show global status where Vaiable_name=‘Qcache_hits‘ OR Variable_name=‘Com_Select‘; Qcache_hits/(Qcache_hits+Com_Select)

也可以参考另外一个指标,命中和写入的比率,即Qcache_hits/Qcache_inserts的值,此比值如果能大于3:1.则表明缓存也是有效的,能达到10:1,为比较理想的情况

缓存优化思路

1.批量写入,而非多次单个写入

2.缓存空间不宜过大,因为大量缓存同时失效时会导致服务器假死

3.必要时,使用sql_CACHE和sql_no_cache手动控制缓存。

4.对写密集型的应用场景来说,禁用缓存反而提高性能。

##MySQL日志

查询日志

  log:{ON|oFF}:是否记录所有语句的日志信息于一般查询日志文件(general_log)      log_output={TABLE|FILE|NONE}           table和file 可以同时出现,用逗号分隔即可      general_log:是否启用查询日志                  general_log_file:定义了一般查询日志保存的文件

慢查询日志:查询执行时长超过指定时长的查询

slow_query_log={ON|OFF}       是否启用慢查询日志,它的输出位置也取决log_output={table|file|none}       slow_query_log_file:www-slow.log         定义慢查询日志的文件       long_query_time : 10.00000 慢查询的时间       long_slow_filter: 不记录慢查记录

错误日志:

服务器启动和关闭过程中的信息;

服务器运行过程中的错误信息

事件调度器运行一个事件时产生的信息

在复制架构中的从服务器上启动从服务器线程时产生的信息

log_error = /path/to/error_log_file

log_warnings = {1|0}

是否记录警告信息保存至错误日志中

二进制日志:修改相关的操作,用来实现复制的凭据

时间点恢复

复制

中继日志:从服务器上的二进制日志

事务日志:将随机I/O转换为顺序I/O  ACID :持久性

日志文件组:至少要存在两个,实现轮询

注意:尽可能使用小事务来替代大事务来提升事务引擎的性能

时间: 2024-10-25 00:56:53

MySQL学习日志(三)的相关文章

mysql学习日志

Mysql学习日志; 安装:Linux :yum install mysql* -y 验证Mysql是否正常安装:mysqladmin --version 进入 Mysql,要先启动#service mysqld start#mysql 更换Mysql初始密码: 安装完成mysql为空密码,修改密码方式:mysqladmin -u root password newpassword 用户已经有旧密码的更改方式:MYSQLADMIN -u root -p'oldpassword' PASSWORD

MySQL binlog日志三种模式选择及配置

在讲解binlog日志三种模式前,先了解一下解析binlog日志的命令工mysqlbinlog.mysqlbinlog工具的作用是解析mysql的二进制binlog日志内容,把二进制日志解析成可以在MySQL数据库里执行的SQL语句.binlog日志原始数据是以二进制形式存在的,需要使用mysqlbinlog工具转换成SQL语句形式.mysql的binlog日志作用是用来记录mysql内部增删改等对mysql数据库有更新内容的记录(对数据库进行改动的操作),对数据库查询的语句如show,sele

基于CentOS的MySQL学习补充三--使用Shell批量创建数据库表

本文出处:http://blog.csdn.net/u012377333/article/details/47006087 接上篇介绍<基于CentOS的Mysql学习补充二--使用Shell创建数据库>,本文继续探索关于Shell和MySQL的结合使用,我不知道当一个数据库设计完成之后如何快速的创建设计好的数据库表和添加相应基本数据,我目前知道的就是使用Shell和SQL脚本来达到我的目的--快速的.多次的.可重复利用的创建数据库表. 创建一个数据库表的SQL脚本: /***********

MySQL学习日志(二)

# DML 事务 隔离级别 存储引擎对比 ##DML     insert into 第一种: insert into tb_name [(col1,col2,....)]{values|value}(val1,val2,...)[,(val21,val22,....),....] 第二种: insert into tb_name set col_name=val1,col2=val2,.... 第三种(将一个表中的数据插入到另外一张表中): insert into tb_name select

转MYSQL学习(三) 函数

这一节主要介绍MYSQL里的函数,MYSQL里的函数很多,我这里主要介绍MYSQL里有而SQLSERVER没有的函数 数学函数 1.求余函数MOD(X,Y) MOD(X,Y)返回x被y除后的余数,MOD()对于带有小数部分的数值也起作用,他返回除法运算后的精确余数 SELECT MOD(31,8) 2.四舍五入函数TRUNCATE(X,Y) TRUNCATE(X,Y)返回被舍去至小数点后y位的数字x.若y的值为0,则结果不带有小数点或不带有小数部分. 若y设为负数,则截去(归零)x小数点左边起第

MySQL学习日志(一)

一.SQL语言组成部门 DDL: database table index view DML:  Select update insert delete 主键,外键 唯一键,条件,非空,事务, 视图的定义:虚表,存储下来的Select语句 事务控制 动态SQL和嵌入式SQL DCL 授权 ##数据类型 1.为什么会有数据类型 1.存储的值类型 2.占据的樵存储空间 3.定长,变长 4.如何被索引及排序 5.是否能够被索引 二.数据类型的有哪些 1)字符型 char varchar binary

Mysql++学习(三)------举个栗子

下面例子显示了如何建立利用Sql++建立一个连接,执行查询操作,返回一个结果集,并且打印. 1 #include <iostream> 2 #include <mysql++.h> 3 #include <errno.h> 4 #include <stdlib.h> 5 #include <stdio.h> 6 7 using namespace std; 8 9 int main() 10 { 11 mysqlpp::Connection co

Mysql学习第三天

1.对表中数据的增删改(DML)      create table t_user(      id int primary key auto_increment,      name varchar(20) not null,      email varchar(20) unique     ) 为表添加记录 (必须掌握) insert into 表名[(列名1,列名2...)] values (值1,值2...);1.插入一条数据 1.1指定要插入那些列       insert into

MySQL学习笔记(三)&mdash;索引

一.概述 1.基本概念       在大型数据库中,一张表中要容纳几万.几十万,甚至几百万的的数据,而当这些表与其他表连接后,所得到的新的数据数目更是要大大超出原来的表.当用户检索这么大量的数据时,经常会感觉慢.这个时候要提高数据库的检索性能,就必须要用到索引.给表追加合适的索引能极大的改善数据检索的效率,提供数据库性能.      索引是在存储引擎中实现的,因此每种存储引擎的索引都不一定完全相同,而且每种存储引擎也不一定支持所有的索引类型.      所有存储引擎支持每个表至多16个索引,总索