0、概念理解:用户会话和连接线程是什么关系?

用户会话和用户连接线程是一一对应的关系,一个会话就一个用户连接线程。

问题描述:

  如果系统因为执行了一个非常大的dml或者ddl操作导致系统hang住,我们想断掉这个操作,怎么办?

解决办法:

1、kill thread:杀死用户的会话

  但是时间长,效果不佳:前滚+回滚,前提是已经进行了很长时间,回滚就需要更多的时间

2、kill mysqld进程:推荐,用这种杀进程的方式,速度快

  kill -9 进程号(ps aux 查看进程号)

  数据库先前滚,不主动回滚,直接可以对外进行服务了,当读到哪个未提交事务时再去慢慢回滚。

一、kill用户会话及用户连接线程

1、如何查看用户会话,如何杀掉用户会话

[root@localhost ~]# netstat -anp |
tcp               :::                     :::*                        LISTEN      /mysqld
[root@localhost ~]# ps -ef |grep 'mysql -px x'
root         : pts/    :: mysql -px x
root         : pts/    :: grep mysql -px x
root         : pts/    :: mysql -px x
[root@localhost ~]#   

  # kill -9 <mysql会话进程PID>  //快速释放资源(推荐)

注意:千万不要将mysqld给kill掉了,不要杀掉LISTEN进程

2、如何查看用户连接线程,如何杀掉用户连接线程

mysql> show processlist;
+--------+
| Id     |
+--------+
 |
 |
+--------+
;
mysql> show processlist;
+--------+
| Id     |
+--------+
 |
 |
+--------+

注意:如果将用户连接线程杀死断掉,而会话没有杀掉的话,该用户会话又会重新开启一个用户连接线程。

3、杀掉用户连接线程的工作过程、弊端风险

  1、过程:

    rollback--->释放资源--->kill线程

  2、弊端与风险:

    1、可能出现系统更加繁忙的情况(因为大量的rollback)

    2、会话释放需要很长的时间

Q:假设现在有1000个用户连接,如何快速杀掉?

A:

  1、使用concat写脚本

    mysql> select concat('kill ',ID,';') into outpfile '/tmp/kill.txt' from information_schema.PROCESSLIST;

    shell> cat kill.txt

    kill 194850;

    kill 194851;

  然后,复制到mysql中进行执行,将用户连接线程都kill掉。

  2、使用awk取出用户会话进程ID都kill掉

  shell> netstat -anp|grep mysql|grep -v mysqld|awk '{print $8}'|awk -F '/' '{print $1}'|xargs kill -9

关于mysqld_safe的注意点:

  在os层面将用户连接线程kill掉,通过pstree -p可以看到MySQL相关进程及线程ID,#kill -9 mysql任一线程,会导致该mysqld进程被kill;但是通过mysqld_safe的安全机制,又会重新启一个mysqld进程;如此原来的用户连接线程也就随原来的进程一块被干掉了。

二、MySQL客户端的连接

1、最大连接数

mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
   |
+-----------------+-------+

由上可见,MySQL默认客户端的最大连接数是151,但是,在大并发下一百多的连接数就会不够用,需要调整最大连接数,修改并写入配置文件中:

  max_connections = 1000

  wait_timeout = 1000000  #超时时间

重启MySQL服务

2、查看当前有多少连接

mysql> show status like '%Threads_connected%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
     |
+-------------------+-------+
 row in set (0.01 sec)

mysql> show processlist;
+-------+------+-----------+------+---------+------+----------+------------------+
| Id    | User | Host      | db   | Command | Time | State    | Info             |
+-------+------+-----------+------+---------+------+----------+------------------+
  | starting | show processlist |
+-------+------+-----------+------+---------+------+----------+------------------+
 row in set (0.01 sec)

3、最大失败连接数:max_connect_errors

mysql> show variables like 'max%errors';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
   |
+--------------------+-------+
 row in set (0.00 sec)

  是一个MySQL中与安全有关的计数器值,负责阻止过多尝试失败的客户端以暴力破解密码的情况,值的大小与性能无太大的关系。

  默认是100,也就是说如果某一客户端尝试连接此MySQL服务器,但是失败(如密码错误等等)10次,则MySQL会无条件强制阻止此客户端连接。如果想重置计数器对某一客户端的值,则必须重启mysqld或者mysql> flush hosts;,当该客户端成功连接一次mysqld后,针对此客户端的max_connect_errors会清零。

  如果max_connect_errors的设置过小,则网页可能提示无法连接数据库服务器。

  一般来说建议数据库服务器不监听来自网络的连接,仅仅通过sock连接,这样可以防止绝大多数针对mysql的攻击;如果必须要开启mysql的网络连接,则最好设置此值,以防止穷举密码的攻击手段。

三、关于用户工作空间

Q:如何判断用户会话线程空间(用户工作空间)是否分配过小?

A:

  1、sort_buffer_size:需要排序会话的缓存大小(默认256K),是针对每一个connection的;过大的配置+高并发可能会耗尽系统内存资源。

  2、binlog_cache_size:二进制日志缓冲区(默认32K),基于会话;

  一个事务做出的修改,

    当小于4binlog_cache_size时,所有修改内容存入binary log cache;

    当大于binlog_cache_size时,内容存入磁盘临时表。

  3、join_buffer_size:多表连接结果集缓冲区,基于会话;

  (每次join操作都会调用my_malloc、my_free函数申请/释放join_buffer_size大小的内存)

也就是说,sort_buffer、binlog_cache、join_buffer的组成,形成用户会话线程空间。一般的,当Sort_merge_passes(磁盘排序)每秒值很大时,就说明用户工作空间分配过小,就应该考虑增加sort_buffer_size值。

关于MySQL用户会话及连接线程的更多相关文章

  1. MySQL 用户连接与用户线程

    本文转载自公众号数据库随笔,作者happypig 微信看起来麻烦 pig已经好长一段时间没有分享文章了,有点对不起订阅的朋友.最近在做比较复杂跟困难的事情,也并不一定最终会有成果,因此必须对此沉默. ...

  2. mysql中添加一个和root一样的用户用于远程连接

    mysql中添加一个和root一样的用户用于远程连接: 大家在拿站时应该碰到过.root用户的mysql,只可以本地连,对外拒绝连接. 下面语句添加一个新用户administrtor: CREATE ...

  3. mysql 允许远程IP连接, 并查看所有用户的所有权限

    添加mysql用户 http://my.oschina.net/u/1179414/blog/202377 允许远程ip连接 GRANT select,insert,update,delete ON ...

  4. Mysql 用户和权限

    创建用户 CREATE USER '用户名'@'localhost' IDENTIFIED BY '密码'; 删除用户 DROP USER '用户名'@'localhost'; 权限列表 ALL 或 ...

  5. MySQL用户与权限管理

    执行mysql select 查询报错: SELECT command denied to user 'root'@'localhost' for table "xxx" 问题原因 ...

  6. MySQL 用户与授权管理详解

    大纲 一.前言 二.创建用户并授权 三.GRANT语句的种类 四.撤权并删除用户 一.前言 做为Mysql数据库管理员管理用户账户,是一件很重要的事,指出哪个用户可以连接服务器,从哪里连接,连接后能做 ...

  7. MySql 用户 及权限操作

    bin/msyql -h host -u user -p    bin/mysql -u mysql -p  本地登录 如无密码按回车直接进入mySql   bin/mysqladmin -u roo ...

  8. Mysql用户密码设置修改和权限分配

    我的mysql安装在c:\mysql 一.更改密码 第一种方式: 1.更改之前root没有密码的情况 c:\mysql\bin>mysqladmin -u root password " ...

  9. MySQL优化二(连接优化和缓存优化)

    body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10 ...

随机推荐

  1. jquery tree

      <div class="fl left"  id="nav" style="width:18%" >             ...

  2. Java 23种设计模式 (通俗易懂解释收集整理)

    (补充中...) P02 抽象工程模式 P14 TemplateMethod 模板方法模式 讲清楚了为什么叫做模板方法  http://www.cnblogs.com/java-my-life/arc ...

  3. SSH框架中新建立实体类后的配置

    strut 层 public class Sellauthentication extends ActionSupport {    private SellauthenticationService ...

  4. posix thread 浅谈

    用Posix thread进行多线程设计,就不怕跨平台了,因为很多OS都兼容Posix thread,如Linux/Windows等,甚至嵌入式系统上(如rt-thread)都支持posix thre ...

  5. 在NGINX上配置HTTPS---血的教训--要重启NGINX

    重启,不是重载!!! 是STOP & START 而不是RELOAD!!! 纠结了好几天...(难道有的NGINX上不用重启????) 你妹的,上次也是,,PHP-FPM,将一个PHP的程序连 ...

  6. dubbo+zookeeper伪集群配置

    zookeeper作为注册中心,服务器和客户端都要访问,如果有大量的并发,肯定会有等待.所以可以通过zookeeper集群解决. 一.为什么需要zookeeper呢? 大部分分布式应用需要一个主控.协 ...

  7. JAVA读取、写入Excel表格(含03版)

    引言 工作中可能会遇到对Excel读取和写入,如果我们自己手动写的话,会很麻烦,但是Apache中有poi工具类.poi工具类封装好了对于Excel读取和写入,我们需要用的时候,直接调用该方法就好了. ...

  8. 在64位系统下,指向int型的指针占的内存空间多大?

    不废话,请看代码演示如下: 注意使用的操作系统的位数,不同位数的操作系统,结果不一样! 我是用的是64位的操作系统! linux下示例代码如下: #include <stdio.h> in ...

  9. Jhipster 学习(一)jhipster构建项目

    如何安装jhipster 第一步:下载jdk  自己安装的1.8版本  (安装.环境变量配置略) 第二步:1.下载Eclipse (luna版 eclipse-4.4.1) 第三步:下载maven ( ...

  10. Jquery 一个页面单个倒计时 实现

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...