vlambda博客
学习文章列表

开源数据库Mysql实战sql3

开源数据库MySQL DBA运维实战 第4章 SQL3

DCL

权限级别

1.  Global level

      所有库,所有表的权限。

2. Database level

      某个数据库中的所有表的权限。

3 .Table level

      库中的某个表的权限

4. Column level

      表中的某个字段,的权限。

mysql用户管理

1. 创建用户

      示例

      CREATE         USER          user1@'localhost'        IDENTIFIED       BY      'QianFeng@123456';

      验证

      select * from mysql.user\G;

      注释

      CREATE  创建(关键字)

      USER 用户(关键字)

      user1   用户名称(自定义)

      @ 分隔符(关键字)

      ‘localhost’   允许登录的主机

      IDENTIFIED BY 身份认证(关键字)

      ‘QianFeng@123456’   用户密码

2. 删除用户

      示例

      DROP USER 'user1'@'localhost';

      操作示例

      select * from mysql.user\G;

      drop user 'user1'@'localhost';

      select * from mysql.user\G;

      或者select user from mysql.user;


3. 修改用户密码

      root修改自己密码

      示例1

      # mysqladmin      -uroot      -p'123'         password       'new_password'

      前提是拥有系统权限

      update也可以哦。不过比较复杂

          UPDATE mysql.user SET authentication_string=password(‘new_password’)  WHERE user=’root’ AND host=’localhost’;

          FLUSH PRIVILEGES;

      123为旧密码

      示例2

      SET PASSWORD=password('new_password');

          FLUSH PRIVILEGES;

      刷新权限

      丢失root用户密码

      1.前言

      当root用户,忘记了密码。可以使用破解的方式来登录系统。修改密码。

      原理:使系统在启动时,不加载密码文件。

      2.修改mysql启动设置

          # vim /etc/my.cnf
    [mysqld]
    skip-grant-tables

      3.重启mysql,无密码登录

      重启mysql程序

          # systemctl    restart   mysqld

      无密码登录

          # mysql -uroot

      修改自己的密码

      mysql>UPDATE mysql.user SET authentication_string=password('QianFeng@123456789')  where  user='root'  and  host='localhost';

      mysql> FLUSH PRIVILEGES;

      4.修改mysql启动设置

      注释掉跳过密码

4. 登录MySQL

      mysql   -P 3306 -u root -p123 mysql -e ‘show tables’

          -h      指定主机名                       【默认为localhost】

          -P      MySQL服务器端口              【默认3306】    大P

          -u      指定用户名                       【默认root】

          -p      指定登录密码                    【默认为空密码】

      此处mysql为指定登录的数据库

          -e      接SQL语句

      示例

      免登录查询数据库

      mysql -uroot -p'QianFeng@123' -hlocalhost -P 3306 mysql -e 'show tables'

mysql权限原理

语法格式

      grant 权限列表  on 库名.表名 to '用户名'@'客户端主机'  [identified by '密码'  with option参数];

      ==权限列表

      all:所有权限(不包括授权权限)

      select,update      查询更新

      ==数据库.表名

      *.*

      所有库下的所有表

      web.*

      web库下的所有表

      web.stu_info

      web库下的stu_info表

      grant SELECT (id), INSERT (name,age) ON mydb.mytbl to 'user8'@'localhost' identified by 'QianFeng@123';

           Column level

      ==客户端主机

      %

      所有主机

      192.168.2.%                192.168.2.0网段的所有主机

      192.168.2.168                指定主机

      localhost                指定主机

      ==with_option参数

          GRANT OPTION

      授权选项

mysql权限示例

赋予权限

      授权目标

      授予admin3 对bbs库 所有的表,具有所有权限(不包含授权)

      GRANT ALL ON bbs.* TO admin3@'%' IDENTIFIED BY 'QianFeng@13910604684';

      赋权示例

      1.准备测试账户

      root账户创建

      CREATE USER admin3@'%' IDENTIFIED BY 'QianFeng@123';

      2.授权账户

      root账户授权

      GRANT ALL ON bbs.* TO admin3@'%' IDENTIFIED BY 'QianFeng@13910604684';

      3.使用测试账户操作数据库

      [root@localhost ~]# mysql -uadmin3 -p'QianFeng@123'

      mysql> create database bbs;

      试试创建别的库

      mysql> create database bba;

      ERROR 1044 (42000): Access denied for user 'admin3'@'%' to database 'bba'

      进入bbs库,创建数据表和插入数据。

      授权验证完毕

回收权限

      查看权限

      查看自己的权限

      SHOW GRANTS\G

      查看别人的权限

      SHOW GRANTS FOR admin3@'%'\G

      回收权限REVOKE

      语法

      REVOKE 权限列表 ON 数据库名 FROM 用户名@‘客户端主机’

      示例

          REVOKE ALL PRIVILEGES  ON bbs.*  FROM admin3@’%’;                                  //回收所有权限

      删除用户的版本问题

      5.6之前,先   revoke all privilege          drop user

      5.7之后,直接      drop user

日志

一、日志分类

图示

         

      1 错误日志 :启动,停止,关闭失败报错。rpm安装日志位置 /var/log/mysqld.log

      2 通用查询日志:所有的查询都记下来。

      3 二进制日志:实现备份,增量备份。只记录改变数据,除了select都记。

      4 中继日志:读取主服务器的binlog,在本地回放。保持一致。

      5 slow log:慢查询日志,指导调优,定义某一个查询语句,定义超时时间,通过日志提供调优建议给开发人员。

      6 DDL log:定义语句的日志。

二、Error Log

vim   /etc/my.cnf

      进入主配置文件,观察日志是否启动。

log-error=/var/log/mysqld.log

      该字段,标记是否启动日志,以及日志位置。

如果哪天mysql服务起不来了,请来这个日志文件看看。

三、Binary Log

默认没有开启,二进制日志

启动二进制日志

      # vim   /etc/my.cnf

      log_bin

      添加该字段。指启动二进制日志

      server-id=2

      群集问题,必须指定该主机的序号。数字随意

      # systemctl restart mysqld

      重启数据库

测试

      1 查看二进制日志文件当前状态

      ls /var/lib/mysql/*bin*

      查询二进制文件生成完成。

      mysqlbinlog -v /var/lib/mysql/localhost-bin.000001

      查看二进制文件日志。后续讲解

      # at 123

      找到一个记录位置

      2 进入数据库,进行数据操作

      创库,创表,创数据(过程略)

      3 完成二进制日志启动,查询测试

      mysqlbinlog -v /var/lib/mysql/localhost-bin.000001

      找到刚才创建的记录即可。

四、Slow Query Log

默认慢查询日志未开启

开启慢查询日志功能

      vim   /etc/my.cnf

      加入下面2行配置

      slow_query_log=1

      启动慢查询日志

      这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句。

      long_query_time=3

      当SQL语句执行时间超过此数值时,就会被记录到日志中,建议设置为1或者更短。

      重启服务器

      #systemctl  restart  mysqld

查看慢查询日志文件

      #ll /var/lib/mysql/*slow*

      查看日志文件已经生成

模拟慢查询

      mysql>SELECT BENCHMARK(500000000,2*3);

      基本测试语句,测试一个超长时间的查询。

      课后作业:收集数据库压力测试工具信息。(面试题)

验证慢查询日志

      #tail /var/lib/mysql/localhost-slow.log

      观察长查询日志记录,记录了刚才超长的查询结果。
稍后反馈给开发部,进行优化。