关于关闭MySQL服务的安全教程

正常关闭

我的MySQL是你下载的TAR包,我安装了安装目录来安装它。

MySQL服务被停止,简单地说,但是我不知道它是否困难。

正确的方法是进入MySQL的bin目录,然后执行


。 / mysqladmin -中- P关机



然后输入密码。

ps:当然,如果root没有密码,则不需要p选项。

PS:有人问起的方法,和正确的方式开始是去到MySQL的bin目录下,然后使用nohup。 / mysqld_safe是好的。

安全关闭MySQL实例

关闭过程:

1。启动关机、发送SIGTERM信号

2。如果有必要,创建一个新的关闭线程(关闭线程)

如果是客户机启动的关机,将创建一个新的关闭线程。

如果sigterm信号直接关停,负责信号处理线程将负责关闭工作或建筑负责此事的一个独立的线程。

当未创建单独的闭合线程(例如内存不足)时,MySQL服务器发出类似的警报信息:


错误:无法创建线程来杀死服务器




3,MySQL服务器不再响应新的连接请求

关闭TCP/IP网络监控,关闭unix套接字和其他通道

4。逐步关闭当前的连接和事务

空闲连接将立即终止;

目前,有交易活动之间的连接和SQL。它将被认定为死亡,定期检查它的状态,所以它将关闭,下次检查;(指杀死的语法)。

当活动业务处于活动状态时,它将回滚。如果事务被修改,修改后的数据不能回滚,它可能只完成一些更改。

如果它是主/从复制场景中的主,那么复制线程的处理与普通线程的处理相同。

如果它是主/从复制场景中的奴隶,它将依次关闭IO和SQL线程。如果2个线程是活动的,它们也会添加死标志,然后关闭它。

在从服务器上,允许SQL线程直接停止当前的SQL操作(为了避免复制问题),然后再次关闭线程;

在MySQl 5.0.80及以前的版本中,如果SQL线程只执行一个事务中,事务将回滚。从5.0.81,将等待所有操作结束,除非用户发起的取消操作。

当强制的SQL线程在非事务表上执行操作时,可能会导致主数据和从数据不一致;

5,MySQL服务器进程关闭所有线程并关闭所有存储引擎;

刷新所有表缓存并关闭所有打开的表。

每个存储引擎负责相关业务,如MyISAM会等待所有的写操作将刷新;InnoDB缓冲池刷新到磁盘(从MySQL 5.0.5如果innodb_fast_shutdown不设置为2的话),当前LSN记录表空间,然后关闭所有的内螺纹。

6,MySQL服务器进程退出

论杀人指令

从5年初开始,杀了两个连接查询|支持所指定的选项:

终止连接,因为它是停止回滚事务,关闭线程连接,并释放相关资源。

终止查询只会停止当前线程的操作,而其他线程将保持不变。

在提交杀操作之后,线程上设置了一个特殊的杀标记位,通常需要一段时间才能真正关闭线程,因为只在特定情况下检查杀伤标记位。

1,当执行SELECT查询时,按顺序或按循环分组,每次读取一些行块时,我们都会检查杀标志位。如果找到它,它将终止。

2,当我们执行修改表时,在读取原始表中的每个行块后,我们将检查杀标记位。如果找到该语句,语句将终止并删除临时表。

3,在执行更新和删除时,检查和更新每行行和块,或将检查杀死。如果找到该语句,语句将终止并回滚事务。如果操作在非事务表上,更改的数据将不会回滚。

4、get_lock()函数返回null;

5,插入延迟线程将在内存中快速添加新记录,然后终止;

6,如果当前线程持有一个表锁,它将被释放并终止。

7,如果线程写了等待释放磁盘空间的调用,它将直接抛出磁盘完整错误,然后终止;

8、当MyISAM表被杀时执行修表或表执行优化,使表不可用和指导维修完成受损。

MySQL安全闭包的几点建议

确保mysqld服务过程的安全,建议遵循以下步骤:

0,用最高权威的超级,所有帐号和其他帐号连接到mysql,最好的方法是使用unix套接字连接;

1、在5及以上版本,设置innodb_fast_shutdown = 1,允许快速关闭InnoDB(没有完全清除,插入缓冲合并),如果要升级或降级的MySQL版本,不设置。

2、设置innodb_max_dirty_pages_pct = 0,让InnoDB刷新所有脏页的磁盘;

3、建立max_connections和max_user_connections是1,除了自己的当前连接,不允许创建新的连接。

4,关闭所有不活动线程,即线程ID处于休眠状态,时间大于1;

5、执行SHOW PROCESSLIST确认是否有活跃的线程,尤其是产生表锁的线程,如大数据集的选择,或者大范围的更新,或DDL,要特别谨慎;

6、显示引擎InnoDB历史执行列表长度确认值低(一般小于500),很少有不清除事务日志序列号和确认,冲到最后一个检查点记录,在三的状态值,这是已经完成了所有的功能检查点;

7、然后执行刷新lockal表操作,刷新所有表缓存和关闭打开的表(局部动作,此操作不记录binlog);

8,如果从服务器,最好是关闭io_thread,等待所有的中继日志后,所有的应用程序,然后关闭sql_thread sql_thread,避免进行大型交易终止,耐心地等到整个程序完成后,如果被迫关闭,等待最好的然后关闭sql_thread服务在事件发生后;

9。最后,执行mysqladmin shutdown。

10、如果急救,你可以设置innodb_fast_shutdown = 1,和mysqladmin shutdown可直接执行,甚至直接在操作系统层称为杀死或杀死9杀掉mysqld进程(当innodb_flush_log_at_trx_commit = 0可能失去了交易的一部分),但是mysqld进程再次启动时,它会崩溃恢复,你需要权衡。

啰嗦了这么多,其实,在正常情况下,mysqladmin shutdown是不够的,如果发生阻塞,然后参照上面的内容分析和解决它,哈哈)。