【mysql】重启的问题

来源:互联网 发布:淘宝详情分割线素材 编辑:程序博客网 时间:2024/05/20 11:19

今天把生产机搞宕机了,紧张了好一会儿。

 

事情是这样的:我这几天发现一卡通生产机数据库有死锁的现象,今天查到了原因,原来是有一种交易的事务执行时间太长(几十分钟,最后交易是成功的),导致其他事务无法拿到锁而失败。

 

我在测试环境上测试这种交易,没有问题;在生产环境的测试库上测试,可以重现,说明是生产的数据库问题(生产环境的mysql建了两个库,一个用于测试,一个用于生产)。但是重现了以后发现生产库也开始死锁了,难道是整个库的锁?为了让生产库不影响交易,我决定重启mysql(大错特错呀,后来发现生产库的死锁跟测试库木有关系,而是恰巧当时生产环境也有一笔死锁交易),先把数据库停掉:

/etc/init.d/mysql stop

再启动

/usr/bin/mysqld_safe &

妈妈呀,起不来了!!!

 

查看系统日志 /var/log/messages,有这样的记录:

Dec  1 13:25:19 xyykt last message repeated 6 times
Dec  1 13:27:05 xyykt setroubleshoot: SELinux is preventing mysqld (mysqld_t) "append" to /home/db/mysql/xyykt.err (var_lib_t). For complete SELinux messages. run sealert -l cc26f951-40ce-4250-aa7b-ed653eec324a
Dec  1 13:27:05 xyykt setroubleshoot: SELinux 正在阻止访问使用file_t标签的文件。 For complete SELinux messages. run sealert -l 45d58241-5f23-4688-a18d-d4545c9f88cf

问了好多人,知道是系统SELinux的限制(以后再研究)。

 

解决办法:

修改/etc/selinux/config配置文件,设置 SELINUX=disabled

然后重启SELinux:

    重启生效,如果不想重启,用命令
    [root@mail topic]# setenforce
    usage: setenforce [ Enforcing | Permissive | 1 | 0 ]

    [root@mail topic]# setenforce 0
    setenforce: SELinux is Permissive

    查看Selinux状态:
    [root@mail topic]# getenforce
    Permissive

 

 

再重启mysql就正常了。

 

 

此时服务已经停了2个小时!

 

为了不影响正常交易,将出现死锁的访问数据库的部分注释掉。

 

然后慢慢解决死锁的问题,还要研究一段时间。

 

死锁解决后还有把注释掉的代码恢复,然后将这段时间的异常交易处理掉。加油!

 

原创粉丝点击