如何正确杀死 MySQL?

如何解决如何正确杀死 MySQL?

关闭 mysql 最简单的方法就是运行

mysqladmin -uroot -p -h127.0.0.1 --protocol=tcp shutdown

原因如下:

mysql 服务文件 ( /etc/init.d/mysql) 依赖于套接字文件的存在。从历史上看,回到 MySQL 4.0,socket 文件有时会莫名其妙地消失。这妨碍了标准service mysql stop的工作。

光说还不够

mysqladmin -uroot -p -h127.0.0.1 shutdown

因为如果没有明确启用 TCP/IP root@127.0.0.1, mysqld 将路由用户进入。root@localhost默认情况下,mysqld 会选择阻力最小的路径并通过套接字文件root@127.0.0.1连接。root@localhost但是,如果没有套接字文件,root@localhost则永远不会连接。

甚至也这样说:

如果您在使用 Unix 套接字文件连接到本地服务器时执行 mysqladmin shutdown,mysqladmin 会一直等到服务器的进程 ID 文件被删除,以确保服务器已正确停止。

这就是为什么必须启用 TCP/IP 的原因:

mysqladmin -uroot -p -h127.0.0.1 --protocol=tcp shutdown

早在 2011 年 9 月 30 日,我编写了自己的 call 版本mysqld_multimysqlservice请参阅我的帖子:在同一主机上运行多个实例)。它用作从不同端口连接到 mysqld 的虚拟引擎。你只需要带上你自己my.cnf的自定义参数。在那个脚本中,我发出这样的关闭:

stop() {
  ${ECHO} -n $"Stopping ${PROGNAME}"
  ${MYSQLD_STOP}
  ATTEMPTS=0
  STOPPING_MYSQLD=1
  MINUTES_TO_TRY=10
  (( TICKS_TO_TRY = MINUTES_TO_TRY*240 ))
  while [ ${STOPPING_MYSQLD} -eq 1 ]
  do
    ${ECHO} -n "."
    ${SLEEP} 0.25
    MYSQLD_HAS_BEEN_SHUTDOWN=`${TAIL} ${MYSQL_ERROR_LOG} | ${GREP} -c "Shutdown complete$"`
    (( ATTEMPTS++ ))
    if [ ${ATTEMPTS} -eq ${TICKS_TO_TRY}   ] ; then STOPPING_MYSQLD=0 ; fi
    if [ ${MYSQLD_HAS_BEEN_SHUTDOWN} -eq 1 ] ; then STOPPING_MYSQLD=2 ; fi
  done
  ${ECHO}
  if [ ${STOPPING_MYSQLD} -eq 2 ]
  then
    ${ECHO} "Stopped ${PROGNAME}"
  else
    ${TAIL} -30 ${MYSQL_ERROR_LOG}
  fi
}

但什么是${MYSQLD_STOP}

MYSQL_CONN="-uroot -p<rootpassword> -P${MYSQLD_PORT} -h127.0.0.1 --protocol=tcp"
MYSQLD_STOP="${MYSQLADMIN} ${MYSQL_CONN} shutdown"

请注意我使用127.0.0.1了一个明确的端口。这样,我不依赖套接字文件。

如果挂起,我一直将其用作mysqladmin --protocol=tcp shtudown关闭 mysql 的正确替代方法。service mysql stopkill -9mysqld最后mysqld_safe的最后手段中的最后一个。(是的,我说了最后三遍)。

很多时候,mysqld 在没有警告的情况下删除了 mysql.sock。多年来,其他人也遇到过这个问题:

结语

秘密正如我所说:使用通过 TCP/IP ( --protocol=tcp) 连接到 mysql 并发出shutdown. 这必须有效,因为关闭权限mysql.user用于经过身份验证的关闭。当我在 Linux 服务器上关闭 mysqld 时,我能够从我的 Windows 机器发出远程关闭,这节省了我的工作时间。

更新 2013-03-06 22:48 EST

如果您担心关闭期间发生了什么,有一种方法可以控制关闭时间和数据刷新到磁盘的方式,尤其是在缓冲池中有大量 InnoDB 数据的情况下

建议 #1

如果你有很多脏页,你可以将降低到 0:

SET GLOBAL innodb_max_dirty_pages_pct = 0;

在关机前大约 15-30 分钟设置此项。这将使 mysqld 尽可能少地写入磁盘的脏页。

建议 #2

默认情况下,为 1。此选项有三个值

  • 0 : InnoDB 在关闭之前进行缓慢关闭、完全清除和插入缓冲区合并。
  • 1:InnoDB 在关闭时跳过这些操作,这个过程称为快速关闭。
  • 2:InnoDB 刷新其日志并冷关机,就好像 MySQL 崩溃了一样;没有提交的事务丢失,但是崩溃恢复操作使下次启动需要更长的时间。

文档进一步说明了这一点:

在仍然缓冲大量数据的极端情况下,缓慢关闭可能需要几分钟甚至几小时。在 MySQL 主要版本之间升级或降级之前使用慢速关闭技术,以便在升级过程更新文件格式时做好所有数据文件的准备。

在紧急情况或故障排除情况下使用 innodb_fast_shutdown=2,以便在数据存在损坏风险时获得绝对最快的关闭速度。

在大多数情况下,innodb_max_dirty_pages_pct 和 innodb_fast_shutdown 的默认值应该没问题。

解决方法

我安装了 CPanel 的 CentOS 64 位,我使用:

service mysql stop

它只是一直在滴答作响,而且似乎永远不会停止。在日志中它只是发布了很多:

130303 17:42:38 [Warning] /usr/sbin/mysqld: Forcing close of thread

err.log文件中,我看到了很多:

[Warning] /usr/sbin/mysqld: Forcing close of thread

它曾经是即时的。知道为什么会这样做以及如何解决吗?

现在我必须这样做,killall -9 mysql但有更好的方法吗?

服务器也非常非常活跃。

这是配置问题吗?我的内存设置太高了吗?

[mysqld]
default-storage-engine=MyISAM
local-infile=0
symbolic-links=0
skip-networking
max_connections = 500
max_user_connections = 20
key_buffer = 512M
myisam_sort_buffer_size = 64M
join_buffer_size = 64M
read_buffer_size = 12M
sort_buffer_size = 12M
read_rnd_buffer_size = 12M
table_cache = 2048
thread_cache_size = 16K
wait_timeout = 30
connect_timeout = 15
tmp_table_size = 64M
max_heap_table_size = 64M
max_allowed_packet = 64M
max_connect_errors = 10
query_cache_limit = 1M
query_cache_size = 64M
query_cache_type = 1
low_priority_updates=1
concurrent_insert=ALWAYS
log-error=/var/log/mysql/error.log
tmpdir=/home/mysqltmp
myisam_repair_threads=4
[mysqld_safe]
open_files_limit = 8192
log-error=/var/log/mysql/error.log

[mysqldump]
quick
max_allowed_packet = 512M

[myisamchk]
key_buffer = 64M
sort_buffer = 64M
read_buffer = 16M
write_buffer = 16M

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-