Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
安全地终止不会响应终止进程的mySQL查询_Mysql - Fatal编程技术网

安全地终止不会响应终止进程的mySQL查询

安全地终止不会响应终止进程的mySQL查询,mysql,Mysql,在MYISAM表上运行常规的优化表查询通常需要几分钟,现在大约需要3天。这也发生在大约一周前,但它确实成功地完成了,我错误地认为桌子已经修好了,这次不会出现问题。不是这样 上一次,进程没有响应KILL进程,最后我不得不重新启动mysqld。错误日志报告了以下警告: [Warning] /usr/sbin/mysqld: Forcing close of thread 24974085 user: 'XXXX' 当mysqld重新启动时,许多其他表已经损坏,必须重新构建。其中一些表很大,我希望

在MYISAM表上运行常规的优化表查询通常需要几分钟,现在大约需要3天。这也发生在大约一周前,但它确实成功地完成了,我错误地认为桌子已经修好了,这次不会出现问题。不是这样

上一次,进程没有响应KILL进程,最后我不得不重新启动mysqld。错误日志报告了以下警告:

[Warning] /usr/sbin/mysqld: Forcing close of thread 24974085  user: 'XXXX'
当mysqld重新启动时,许多其他表已经损坏,必须重新构建。其中一些表很大,我希望避免这种情况再次发生。我知道重启mysqld应该可以安全地关闭表,但它似乎没有

使用mySQL服务器的web服务将进入维护模式,以防止新查询访问数据库。但是,如果FLUSH表被OPTIMIZE查询阻塞,如何安全地关闭所有打开的表呢

SHOW OPEN TABLES;
[etc...]
114 rows in set (0.01 sec)
我真的不想让114张桌子需要修理。有什么建议吗

注:我很清楚,正在优化的表将被破坏,可以接受。我只是想尽量减少其他表的问题

谢谢

更新:

所以FLUSH表接受以逗号分隔的表列表。。。也许它可以像冲洗所有打开的桌子一样简单,但我仍然愿意接受关于这一点的保证,或者任何其他想法。刷新特定表会将其从“打开的表”列表中删除,因此这看起来很有希望


FWIW,这一切都进行得非常顺利。接下来的步骤是这样的。我不确定单独刷新和关闭每个表是否过火,但没有表崩溃,总停机时间约为45分钟,因此值得:

Make a full slave backup
Redirect FQDN for the master to a dead IP so all services are down and master receives no new queries
When master is receiving no new queries, flush and close all tables individually
Stop mysql on master
Ensure OPTIMIZE TABLE does not cause problems for slave if it is replicated out
Stop mysql on slave
Copy all blog tables from slave to master
Restart master
Restart slave
Check for any corrupt tables and allow them to be repaired
Map FQDN back to the master internal IP
Sanity check of posts on main blog
Restart replication on slave and masters 
Make sure replication progresses correctly (multi-master)
Make a full master backup

所以你想终止一个查询而不是整个查询,对吗?@CodeLover-我想终止已经运行了3天的优化表查询。我刚刚在备份上运行了优化,耗时51秒,因此生产服务器上的表/文件出现了严重问题。我已经对查询运行了KILL进程,现在状态为KILL。在此之前,这只是在我重新启动mysqld之前没有改变,mysqld随后损坏了许多其他表。如果必须重新启动mysqld,我希望避免损坏其他表。