关于MySQL用户会话及连接线程
0、概念理解:用户会话和连接线程是什么关系?
用户会话和用户连接线程是一一对应的关系,一个会话就一个用户连接线程。
问题描述:
如果系统因为执行了一个非常大的dml或者ddl操作导致系统hang住,我们想断掉这个操作,怎么办?
解决办法:
1、kill thread:杀死用户的会话
但是时间长,效果不佳:前滚+回滚,前提是已经进行了很长时间,回滚就需要更多的时间
2、kill mysqld进程:推荐,用这种杀进程的方式,速度快
kill -9 进程号(ps aux 查看进程号)
数据库先前滚,不主动回滚,直接可以对外进行服务了,当读到哪个未提交事务时再去慢慢回滚。
一、kill用户会话及用户连接线程
1、如何查看用户会话,如何杀掉用户会话
[root@localhost ~]# netstat -anp |grep
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 -
# kill -9 <mysql会话进程PID> //快速释放资源(推荐)
注意:千万不要将mysqld给kill掉了,不要杀掉LISTEN进程
2、如何查看用户连接线程,如何杀掉用户连接线程
mysql> show processlist;
+--------+
| Id |
+--------+
| 194850 |
| 194851 |
+--------+
mysql> kill 194850;
mysql> show processlist;
+--------+
| Id |
+--------+
| 194851 |
| 194852 |
+--------+
注意:如果将用户连接线程杀死断掉,而会话没有杀掉的话,该用户会话又会重新开启一个用户连接线程。
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 |
+-----------------+-------+
| max_connections | 151 |
+-----------------+-------+
由上可见,MySQL默认客户端的最大连接数是151,但是,在大并发下一百多的连接数就会不够用,需要调整最大连接数,修改并写入配置文件中:
max_connections = 1000
wait_timeout = 1000000 #超时时间
重启MySQL服务
2、查看当前有多少连接
mysql> show status like '%Threads_connected%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_connected | 1 |
+-------------------+-------+
1 row in set (0.01 sec) mysql> show processlist;
+-------+------+-----------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-------+------+-----------+------+---------+------+----------+------------------+
| 17219 | root | localhost | NULL | Query | 0 | starting | show processlist |
+-------+------+-----------+------+---------+------+----------+------------------+
1 row in set (0.01 sec)
3、最大失败连接数:max_connect_errors
mysql> show variables like 'max%errors';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| max_connect_errors | 100 |
+--------------------+-------+
1 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),基于会话;
一个事务做出的修改,
当小于binlog_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用户会话及连接线程的更多相关文章
- MySQL 用户连接与用户线程
本文转载自公众号数据库随笔,作者happypig 微信看起来麻烦 pig已经好长一段时间没有分享文章了,有点对不起订阅的朋友.最近在做比较复杂跟困难的事情,也并不一定最终会有成果,因此必须对此沉默. ...
- mysql中添加一个和root一样的用户用于远程连接
mysql中添加一个和root一样的用户用于远程连接: 大家在拿站时应该碰到过.root用户的mysql,只可以本地连,对外拒绝连接. 下面语句添加一个新用户administrtor: CREATE ...
- mysql 允许远程IP连接, 并查看所有用户的所有权限
添加mysql用户 http://my.oschina.net/u/1179414/blog/202377 允许远程ip连接 GRANT select,insert,update,delete ON ...
- Mysql 用户和权限
创建用户 CREATE USER '用户名'@'localhost' IDENTIFIED BY '密码'; 删除用户 DROP USER '用户名'@'localhost'; 权限列表 ALL 或 ...
- MySQL用户与权限管理
执行mysql select 查询报错: SELECT command denied to user 'root'@'localhost' for table "xxx" 问题原因 ...
- MySQL 用户与授权管理详解
大纲 一.前言 二.创建用户并授权 三.GRANT语句的种类 四.撤权并删除用户 一.前言 做为Mysql数据库管理员管理用户账户,是一件很重要的事,指出哪个用户可以连接服务器,从哪里连接,连接后能做 ...
- MySql 用户 及权限操作
bin/msyql -h host -u user -p bin/mysql -u mysql -p 本地登录 如无密码按回车直接进入mySql bin/mysqladmin -u roo ...
- Mysql用户密码设置修改和权限分配
我的mysql安装在c:\mysql 一.更改密码 第一种方式: 1.更改之前root没有密码的情况 c:\mysql\bin>mysqladmin -u root password " ...
- MySQL优化二(连接优化和缓存优化)
body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10 ...
随机推荐
- 《Android进阶》之第四篇 ViewPagerIndicator的使用
1.先将这个开源框架下载到本地: Administrator@QH-20141231RFQJ /d/hixin $ cd ViewPagerIndicator/ Administrator@QH-20 ...
- 使用 CKEditor 上传图片, 粘贴屏幕截图
之前写过wangEditor,那真是好用,文档也清晰,半天就搞定了,无奈没有对应license,只好选择别的. 外语一般,阅读理解都靠蒙.CKEditor官方文档看的我云里雾里,国内的博客比较少,经过 ...
- object-fit 解决图片指定大小被压缩问题
object-fit 解决图片指定大小被压缩问题 第一次遇到这个属性,是在给video 写 poster的时候,选取的作为poster的img的尺寸有点小,导致video播放器两边有留白.在控制台查看 ...
- java虚拟机学习-JVM调优总结-垃圾回收面临的问题(8)
如何区分垃圾 上面说到的“引用计数”法,通过统计控制生成对象和删除对象时的引用数来判断.垃圾回收程序收集计数为0的对象即可.但是这种方法无法解决循环引用.所以,后来实现的垃圾判断算法中,都是从程序运行 ...
- C# MVC权限验证
前言 之前一直没怎么接触过权限验证这块,刚好公司老平台改版,就有了这篇权限验证.此篇文章大致讲解下 精确到按钮级别的验证如何实现.以及权限验证设计的参考思路(菜鸟一枚,大神勿喷). 在开发大项目的时候 ...
- 《如莲春天》Java开发框架
关于 如莲者,净洁如莲之意,希望打造一个简洁的系统框架.系统主要采用Spring相关技术,故取名:如莲春天. 如莲春天,包括一套系统界面.一个权限管理系统.一个CURD代码生成模块.一些基础模块 ...
- JavaScript中对事件简单的理解(2)
事件(event) event对象 (1)什么是event对象? Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态.事件通常与函数结合使用,函数不会 ...
- (文件)图片上传,Spring或SpringMVC框架
spring或springMVC框架图片(文件)上传 页面部分,用一个简单的form表单提交文件,将图片或文件提交到服务端.一个输入框,用于输入图片的最终名称,一个file文件选择,用于选择图片. 页 ...
- C语言进制转换的一个小错误
今天学妹问了一个问题,问题是这样的 有以下程序 #include <stdio.h> void main(){ int m=0256,n=256; printf("%o %o& ...
- webuploader插件,我踩得坑
我在目前的公司做的项目要么是原生写法去做项目,要么就是vue+webpack做项目,但是vue这部分只是用了模板template,vue其他的都没用. 有一个项目需要做上传图片的功能,老大扔给我一个插 ...