碼版本:5.7.29
簡單記錄訊號如何生效的。poll收到訊號後如何中斷後如何處理的,需要確認。
一初始化訊號處理方式,設定訊號的處理的處理方式,遮蔽某些訊號,並且繼承到子執行緒(pthread_sigmask),主要遮蔽的為sigterm、sigquit、sighup、sigtstp四個。其他訊號按照預設處理方式,但是處理前列印crash棧,handle_fatal_signal
對於siguser1 進行捕獲,處理函式為空empty_signal_handler
#0 my_init_signals () at /home/mysql/soft/percona-server-5.7.29-32/sql/mysqld.cc:2225
#1 0x00000000015fefc9 in mysqld_main (argc=79, ar**=0x2e22368) at /home/mysql/soft/percona-server-5.7.29-32/sql/mysqld.cc:4846
#2 0x0000000000e8795d in main (argc=4, ar**=0x7fffffffe538) at /home/mysql/soft/percona-server-5.7.29-32/sql/main.cc:32
二啟動訊號處理執行緒start_signal_handler執行緒呼叫函式為 signal_hand,
使用sigwait獲取未決訊號集合,如果為sigterm和sigquit,設定abort_loop= true;
並且傳送sigusr1個主線程,準備正常退出pthread_kill(main_thread_id, sigusr1)) //給主線程傳送sigusr1訊號
如果為sighup則過載一下reload_acl_and_cache相關快取。
start_signal_handler執行緒呼叫函式為 signal_hand
#0 start_signal_handler () at /home/mysql/soft/percona-server-5.7.29-32/sql/mysqld.cc:2301
#1 0x00000000015fff70 in mysqld_main (argc=79, ar**=0x2e22368) at /home/mysql/soft/percona-server-5.7.29-32/sql/mysqld.cc:5407
#2 0x0000000000e8795d in main (argc=4, ar**=0x7fffffffe538) at /home/mysql/soft/percona-server-5.7.29-32/sql/main.cc:32
三、如果為sigterm和sigquit,主線程(main)正在poll接受連線,收到了sigusr1 訊號後進行中斷處理,接下來進行判斷
全域性變數abort_loop,然後進入正常退出流程。
#0 empty_signal_handler (sig=32767) at /home/mysql/soft/percona-server-5.7.29-32/sql/mysqld.cc:2219
#1 #2 0x00007ffff5f20c3d in poll () from /lib64/libc.so.6
#3 0x00000000015ec077 in mysqld_socket_listener::listen_for_connection_event (this=0x35a76f0) at /home/mysql/soft/percona-server-5.7.29-32/sql/conn_handler/socket_connection.cc:883
#4 0x0000000001607542 in connection_acceptor::connection_event_loop (this=0x35a70e0)
at /home/mysql/soft/percona-server-5.7.29-32/sql/conn_handler/connection_acceptor.h:73
#5 0x00000000016001f2 in mysqld_main (argc=79, ar**=0x2e22368) at /home/mysql/soft/percona-server-5.7.29-32/sql/mysqld.cc:5513
#6 0x0000000000e8795d in main (argc=4, ar**=0x7fffffffe538) at /home/mysql/soft/percona-server-5.7.29-32/sql/main.cc:32
main thread
mysqld_socket_acceptor->connection_event_loop(); //監聽3306 埠
#endif /* _win32 */
server_operational_state= server_shutting_down; //這裡開始進行關閉處理
dbug_print("info", ("no longer listening for incoming connections"));
mysql_audit_notify(mysql_audit_server_shutdown_shutdown, mysqld_socket_listener::listen_for_connection_event
mysql_audit_server_shutdown_reason_shutdown,
mysqld_success_exit);
terminate_compress_gtid_table_thread();
mysql賦權的簡單記錄
怕自己以後忘記,寫在這裡當作備份 給某台電腦所有mysql操作許可權 grant all privileges on to wjs 192.168.100.209 identified by 123456 給任意一台電腦mysql增刪改查許可權 grant insert,update,delete,...
MYSQL觸發器簡單記錄
介紹 觸發器是與表有關的資料庫物件,指在insert update delete之前或之後,觸發並執行觸發器中定義的sql語句集合.觸發器的這種特性可以協助應用在資料庫端確保資料的完整性,日誌記錄,資料校驗等操作.觸發器型別 new 和 old 的使用 insert 型觸發器 new 表示將要或者已...
mysql 命令記錄 mysql命令記錄
慢查詢日誌記錄狀態 show variables like slow 查詢慢查詢日記記錄超時時間 show variables like long query time 設定慢查詢超時時間 set global long query time 1 設定慢查詢 set global slow quer...