这篇文章给大家介绍MySQL服务怎么关闭,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
1。停止复制
在一些特殊环境下,奴隶节点可能会尝试从错误的位置(位置)进行启动。为了减少这种风险,要先停止io线程,从而不接收新的事件信息。
mysql>, stop slave io_thread;
等sql线程应用完所有的事件之后,也将sql线程停掉。
mysql> show slave 状态\ G mysql>, stop slave  sql_thread;
这样io线程和sql线程就可以处于一致性位置,这样中继日志就只是包含被执行过的事件,relay_log_info_repository中的位置信息也是最新的。
对于开启了多线程复制的奴隶,确保在关闭复制之前,已经填充了空白
mysql>, stop 奴隶; mysql>, start slave  until sql_after_mts_gaps;, #应用完relay 日志中的差距 mysql>, show slave 地位\ G #要确保在之前已经停掉了sql_thread mysql>, stop slave ;
2。提交,回滚或杀死长时间运行的事务
1分钟内可以发生很多的事,在关闭时,innodb必须回滚未提交的事务。事务回滚的代价是非常昂贵的,可能会花费很长时间。任何事务回滚都可能意味着数据丢失,因此理想情况下关闭时没有打开任何事务。
如果关闭的是读写的数据库,写操作应该提前路由到其他节点。如果必须关闭还在接收事务的数据库、下面的查询会输出运行时间大于60秒的会话信息。根据这些信息再决定下一步:
mysql>, SELECT trx_id,, trx_started,,(现在(),安康;trx_started), trx_duration_seconds,, id processlist_id,,用户,如果(左(主机,(定位(& # 39;:& # 39;,,主机),安康;1)),=,& # 39;& # 39;,,,,离开(主机,(定位(& # 39;:& # 39;,,主机),安康;1))),主持人,,,,,,取代(SUBSTRING(信息,1,25)& # 39;\ n # 39;, & # 39; & # 39;), info_25 得到information_schema.innodb_trx JOIN information_schema.processlist 提醒innodb_trx.trx_mysql_thread_id =, processlist.id WHERE (现在(),安康;trx_started),祝辞,60,ORDER BY trx_started; + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | |,trx_id trx_started ,,,,,,,, |, trx_duration_seconds |, processlist_id |, user |, host ,,,,, |, command |, time |, info_25 ,,,,,,,,,,,,,,,,, | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + |,511239,|,2020 - 04 - 22,16:52:23 |,,,,,,,,,,,,,,,,, 2754, |,,,,,,,,,,, 3515, |, dba , |, localhost |, Sleep ,, |, 1101, |, NULL ,,,,,,,,,,,,,,,,,,,, | |,511240,|,2020 - 04 - 22,16:53:44 |,,,,,,,,,,,,,,,,,,, 74, |,,,,,,,,,,, 3553, |, root |, localhost |, Query ,, |,,, 38, |, update t1 set name=皌est" | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 2,rows set 拷贝;(0.00,sec)
3。清空processlist
mysql要断开连接并关闭了。我们可以手动帮助mysql一下。
使用pt-kill查看并杀死活跃和睡眠状态的连接。这时应该不会有新的写连接进来。我们只是处理读的连接。
pt-kill ——主机=發ocalhost",——受害者=癮ll",,间隔=10,——忽略用户=皃mm | orchestrator",,繁忙时间=1,,空闲时间=1,——print [——杀死]
这里可以选择性地排除某些用户建立的连接。
4。配置innodb完成最大刷新(冲洗)
SET GLOBAL innodb_fast_shutdown=0; SET GLOBAL  innodb_max_dirty_pages_pct=0; SET GLOBAL  innodb_change_buffering=& # 39;没有# 39;;
禁用掉innodb_fast_shutdown可能会使得关闭过程花费几分钟甚至个把小时,因为需要等待undo日志的清洗和changebuffer的合并。
为了加速关闭,设置innodb_max_dirty_pages_pct=0并监控下面查询的结果。期望值是0,但并不总是能保证,如果mysql中还有活动的话。那么,查出的结果不再继续变小的话,就可以继续下一步了: