mysql进程号怎么看 mysql查看进程对应的sql

mysql客户端工具中,请问如何查询当前所有的链接进程信息如果要查询服务器上正在跑哪些查询进程,使用show processlist;
如果要查询当地哪些进程正在和mysql交互 , 可以使用操作系统自带的netstat等工具查看mysql所在的IP和3306端口
如何查看Linux下mysql服务的进程是否正常运行?ps
-ef|grep
mysql
可以看到是否有mysql进程mysql进程号怎么看,如果有mysqld这行(一般会有2行以上)则表示正常运行
也可以mysql
-u
root
-p登陆试试看能不能登陆
如果没有启动mysql进程号怎么看 , service
mysqld
start启动下
Linux中如何知道一个文件是被哪个程序创建的?要在用rpm 安装的软件包才能被查询到,如你想查询/etc/my.cnf 文件的由什么软件包构成 。
但是查询不到文件的,创建这个文件的进程是否允许 。
你可以分开查询:
1.用rpm -qf /etc/my.cnf 查询出这个文件的软件包 是 mysql的 。
2.用ps aux|grep mysql 查看mysql 的进程号 。
3.用 lsof 来查看 这个mysql的进程号 就可得知 这个进程调用了 哪个类库,使用哪个文件 。
如果你有什么好的办法 也请你告诉我,我目前是用这种办法来做的 。
使用strace来跟踪mysql查询 , 看看到底是卡在什么地方.先找到mysql进程的pid有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具 。前者使用起来比较简便 。推荐使用 。
1. check table 和 repair table
登陆mysql 终端:
mysql -uxxxxx -p dbname
check table tabTest;
如果出现的结果说Status是OK , 则不用修复,如果有Error,可以用:
repair table tabTest;
进行修复,修复之后可以在用check table命令来进行检查 。在新版本的phpMyAdmin里面也可以使用check/repair的功能 。
2. myisamchk, isamchk
其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表 。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明 。当发现某个数据表出现问题时可以使用:
myisamchk tablename.MYI
进行检测,如果需要修复的话 , 可以使用:
myisamchk -of tablename.MYI
关于myisamchk的详细参数说明,可以参见它的使用帮助 。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉 。
-----------------------------
另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:
[ -x /tmp/mysql.sock ]/pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置 。
需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动!检测修复所有数据库(表)
如何查mysql死锁进程查询死锁进程
采用如下存储过程来查询数据中当前造成死锁的进程 。
drop procedure sp_who_lock
go
CREATE procedure sp_who_lock
as
begin
declare @spid int
declare @blk int
declare @count int
declare @index int
declare @lock tinyint
set @lock=0
create table #temp_who_lock
(
id int identity(1,1),
spid int,
blk int
)
if @@error0 return @@error
insert into #temp_who_lock(spid,blk)
select 0 ,blocked
from (select * from master..sysprocesses where blocked0)a
where not exists(select * frommaster..sysprocesses where a.blocked =spid and blocked0)
union select spid,blocked frommaster..sysprocesses where blocked0
if @@error0 return @@error
select @count=count(*),@index=1 from #temp_who_lock
if @@error0 return @@error
if @count=0
begin
select '没有阻塞和死锁信息'
return 0
end
while @indexA href="mailto:=@count"=@count
begin
if exists(select 1 from #temp_who_lock a where id@index and exists(select 1 from #temp_who_lock where idA href="mailto:=@index"=@index and a.blk=spid))
begin
set @lock=1
select @spid=spid,@blk=blk from #temp_who_lock where id=@index
select '引起数据库死锁的是: 'CAST(@spid AS VARCHAR(10))'进程号,其执行的SQL语法如下'
select@spid, @blk
dbcc inputbuffer(@spid)
dbcc inputbuffer(@blk)
end
set @index=@index 1
end
if @lock=0
begin
set @index=1
while @indexA href="mailto:=@count"=@count
begin
select @spid=spid,@blk=blk from #temp_who_lock where id=@index
if @spid=0
select '引起阻塞的是:' cast(@blk as varchar(10))'进程号,其执行的SQL语法如下'
else
select '进程号SPID:'CAST(@spid AS VARCHAR(10))'被''进程号SPID:'CAST(@blk AS VARCHAR(10))'阻塞,其当前进程执行的SQL语法如下'
dbcc inputbuffer(@spid)
dbcc inputbuffer(@blk)
set @index=@index 1
end
end
drop table #temp_who_lock
return 0
end
GO
--执行该存储过程
exec sp_who_lock
补充:
一、产生死锁的原因
在SQL Server中 , 阻塞更多的是产生于实现并发之间的隔离性 。为了使得并发连接所做的操作之间的影响到达某一期望值而对资源人为的进行加锁(锁本质其实可以看作是一个标志位) 。当一个连接对特定的资源进行操作时 , 另一个连接同时对同样的资源进行操作就会被阻塞,阻塞是死锁产生的必要条件 。
二、如何避免死锁
1.使用事务时,尽量缩短事务的逻辑处理过程,及早提交或回滚事务;
2.设置死锁超时参数为合理范围,如:3分钟-10分种;超过时间,自动放弃本次操作,避免进程悬挂;
3.优化程序,检查并避免死锁现象出现;
4.对所有的脚本和SP都要仔细测试,在正是版本之前;
5.所有的SP都要有错误处理(通过@error);
6.一般不要修改SQL SERVER事务的默认级别 。不推荐强行加锁 。
三、处理死锁
1、最简单的处理死锁的方法就是重启服务 。
2、根据指定的死锁进程ID进行处理
根据第二步查询到的死锁进行,大致分析造成死锁的原因,并通过如下语句释放该死锁进程
kill pid--pid为查询出来的死锁进程号
3、通过存储过程杀掉某个库下面的所有死锁进程和锁
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[sp_killspid]
GO
create proc sp_killspid
@dbname varchar(200)--要关闭进程的数据库名
as
declare @sqlnvarchar(500)
declare @spid nvarchar(20)
declare #tb cursor for
select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
open #tb
fetch next from #tb into @spid
while @@fetch_status=0
begin
exec('kill ' @spid)
fetch next from #tb into @spid
end
close #tb
deallocate #tb
go
--使用方法,“db_name”为处理的数据库名称
exec sp_killspid'db_name'
【mysql进程号怎么看 mysql查看进程对应的sql】关于mysql进程号怎么看和mysql查看进程对应的sql的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读