#1 楼
MySQL中任何“请求的”关闭序列(短于kill -9
)都比较合适,因为正在进行的事务(在事务表上)会回滚,但这是使重新启动尽可能干净的两种方法。注意:如果要关闭服务器进行升级,则不要使用此过程;相反,请按照此答案中详细介绍的过程进行操作。
否则,如果您只是重新启动运行状况良好的服务器,以便可以更改只读全局变量或类似内容,则可以使用路径:
首先,启用
innodb_fast_shutdown
(如果尚未启用)。这与关闭的正常程度没有直接关系,但是可以使您的服务器恢复更快。mysql> SHOW VARIABLES LIKE 'innodb_fast_shutdown';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| innodb_fast_shutdown | 0 |
+----------------------+-------+
1 row in set (0.00 sec)
mysql> SET GLOBAL innodb_fast_shutdown = 1;
Query OK, 0 rows affected (0.01 sec)
接下来,指示服务器关闭所有打开的表,如下所示:没有当前运行的查询引用它们。此步骤也与正常关机无关,但是它将使后续步骤更快:
mysql> FLUSH LOCAL TABLES;
Query OK, 0 rows affected (41.12 sec)
FLUSH TABLES
语句(带有可选的LOCAL
关键字,避免不必要的但无害的任何从属刷新)将会阻塞,并且在关闭所有表之前,您的提示不会返回。一旦每个表都被“清除”(关闭),如果查询随后引用了该表,它将自动重新打开,但这没关系。我们通过此步骤完成的工作是减少最后一步的工作:mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (13.74 sec)
mysql>
该语句刷新所有表(因此从中删除了一些表的优点(使用上一步的方式来减少破坏性),并获得对它们的全局(服务器范围)只读锁定。
在完成每个当前运行的“写入”查询(即,除
SELECT
以外的几乎所有内容)之前,您无法拥有全局读取锁。发出锁定请求将允许现有查询完成,但不允许新查询开始。直到您持有此全局锁,您的提示才会返回,因此,当您请求该锁时,正在进行的每个查询都能够完成,并且您知道它们已完成,因为您会收到提示。任何后续尝试向表写入任何内容的查询都将停止,不更改任何数据,无限期地等待锁,直到...
您改变了重新启动和释放的思路手动锁定(
UNLOCK TABLES;
)您重新启动服务器,或者
意外或有意断开命令行客户端与此线程的连接(因此请勿这样做)。保持此窗口处于连接状态,并坐在mysql提示符下:
阻止关闭它的诱惑。
mysql>
这个空闲的控制台提示符是什么原因为您提供全局锁定。
从另一个控制台窗口中,以通常的方式重新启动MySQL,方法是使用初始化脚本(例如,
service mysql.server restart
的本地变体)或mysqladmin shutdown
,然后手动重新启动。 br />#2 楼
简而言之,关闭MySQL之前应考虑的一些最佳做法是:确认要关闭的实例,以免错误地停止另一个实例。
如果要关闭从属服务器
mysql> STOP SLAVE;
,请停止复制。 在关闭
mysql> SET GLOBAL innodb_max_dirty_pages_pct = 0;
时转储缓冲池,并在启动时重新加载它。mysql> SHOW PROCESSLIST;
对缓冲池进行预热。
然后,在确认之前的要点后,可以安全地重新启动MySQL
mysql> kill thread_id;
有关更多详细信息,请参阅我的文章在关闭MySQL之前检查这些内容!
评论
为什么这被否决?我还不了解什么命令不好,但是我想知道所以我可以避免它们。
–乔恩
17-2-27在23:44
我不知道上述任何命令是错误的。我正在执行上述步骤,因此有很多人这样做。仅第4步应格外小心,在确定自己正在做什么之前,请勿杀死任何查询,否则,请等待长时间运行的查询结束。尝试一下,如果有帮助,请对其进行投票;否则,请对其进行投票!
–Moll
17年2月28日在21:17
评论
使用innodb_fast_shutdown = 1真的可以确保MySQL启动更快吗?查看文档,似乎可以提高关机速度(以启动速度为代价吗?)。
–克里斯
18/12/17在15:43
@Chris的想法是,它可以帮助确保整个关闭+启动过程与实际操作一样快,但这有点奇怪,因为理论上完成的工作量是相同的-只是移至序列的另一端-由于某种原因,它总体上似乎总是比较快,就像关闭时发生的效率低下,而启动时却没有。很难说。
– Michael-sqlbot
18/12/18在0:08