【mysql】重启的问题

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

 

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

 

我在测试环境上测试这种交易,没有问题;在生产环境的测试库上测试,可以重现,说明是生产的数据库问题(生产环境的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个小时!

 

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

 

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

 

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

 

<think>好的,我现在需要帮助用户了解如何正确重启MySQL服务。根据用户提供的引用内容,我需要整合不同操作系统下的方法,并确保步骤正确。首先,我应该先区分不同系统,比如Windows和Linux,因为两者的操作步骤不同。 用户提供的引用中,引用[1]和[2]提到Windows下使用net命令或者服务管理器来重启,而引用[3]和[4]则涉及Linux下使用systemctl或service命令。另外,用户可能还关心是否正确操作,比如避免直接结束进程,这在引用[2]中被指出是错误的做法。 接下来,我需要整理步骤,确保每个系统下的方法清晰。对于Windows,正确方法是使用命令提示符执行net stop和net start,或者通过服务管理器界面操作。对于Linux,使用systemctl命令是较新的方式,而service命令适用于旧版本系统。同时,要提醒用户注意权限问题,比如在Linux中使用sudo。 另外,用户可能还会遇到权限不足的问题,或者服务名称不同的情况,比如mysql服务可能被命名为mysqlmysqld,需要根据实际情况调整命令。还要提到重启后验证服务状态的步骤,确保MySQL确实已经成功重启。 最后,应该生成相关问题,覆盖用户可能进一步想了解的内容,比如服务无法启动的解决方法,检查运行状态,设置开机启动等。这些相关问题可以帮助用户更全面地处理MySQL服务管理的问题。</think>### 如何正确重启 MySQL 服务 #### **Windows 系统** 1. **通过命令提示符重启** 使用管理员权限打开命令提示符,依次执行以下命令: ```bash net stop mysql # 停止MySQL服务 net start mysql # 启动MySQL服务 ``` 若服务名称为`mysqld`或其他自定义名称,需替换`mysql`为实际名称[^1][^2]。 2. **通过服务管理器操作** - 按`Win + R`打开运行窗口,输入`services.msc`后回车 - 找到`MySQL`服务,右键选择“重启”或先“停止”再“启动”。 --- #### **Linux 系统** 1. **使用 systemctl 命令(推荐)** ```bash sudo systemctl restart mysql # 重启服务 sudo systemctl status mysql # 验证状态 ``` 部分系统可能使用`mysqld`作为服务名称,需替换`mysql`为`mysqld`[^3]。 2. **使用 service 命令(旧版本系统)** ```bash sudo service mysql restart ``` --- #### **注意事项** - **避免强制终止进程**:直接结束进程可能导致数据损坏,需通过系统服务管理工具操作。 - **权限问题**:Linux 下需使用`sudo`或 root 权限执行命令[^3]。 - **配置文件修改后**:若修改了 MySQL 配置(如`my.cnf`),需重启服务生效。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值