天天看點

mysql 兩個時間相差大于24小時的資料_MySQL 資料庫崩潰(crash)的常見原因和解決辦法...

mysql 兩個時間相差大于24小時的資料_MySQL 資料庫崩潰(crash)的常見原因和解決辦法...

檢查 MySQL 資料庫的啟動時間

Linux 系統中的 systemd 會在 mysqld 程序 crash 後自動重新啟動 MySQL 的服務,需要注意的是使用 kill -9 殺死 mysqld 程序系統會自動重新啟動,而隻使用 kill 指令則不會重新啟動,因為執行 kill 指令,系統會發送一個 SIGTERM 信号給 mysqld,mysql 資料庫會正常關閉,日志中會出現類似下面的記錄:

2020-10-26T09:06:48.435181Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.19)  MySQL Community Server - GPL.           

MySQL 資料庫 crash 後都會重新啟動,是以我們有時可能不知道 MySQL 資料庫已經 crash 過了,但我們可以從mysql資料庫啟動時間上找到線索,下面介紹四種檢查 MySQL 資料庫啟動時間的方法。

檢查 MySQL 服務狀态

[email protected]:~$ service mysql status
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2020-10-21 05:54:18 NDT; 4 days ago
  Process: 774 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid (code=exited, status=0/SUCCESS)
  Process: 708 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
 Main PID: 791 (mysqld)
    Tasks: 27 (limit: 2328)
   CGroup: /system.slice/mysql.service
           └─791 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid           

顯示 MySQL 資料庫已經運作 4 天多。

檢查 MySQL 中的 uptime 狀态

mysql> show global status like 'uptime';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| Uptime        | 428334 |
+---------------+--------+
1 row in set (0.32 sec)           

這個值是以秒為機關,下面換算成以天為機關是 4 天多。

mysql> select 428334/60/60/24;
+-----------------+
| 428334/60/60/24 |
+-----------------+
|  4.957569444444 |
+-----------------+
1 row in set (0.01 sec)           

查詢 uptime 狀态的另一種方法是使用 mysqladmin version 或在 mysql 用戶端裡用 “s” 進行查詢。

使用 ps 檢查程序啟動時間

使用 ps 指令查詢發現 mysqld 啟動了4天23小時3分種54秒

[email protected]:~$ ps -eo pid,user,args,etime|grep mysqld
  791 mysql    /usr/sbin/mysqld --daemoniz  4-23:03:54           

檢查 MySQL 日志

找關鍵字 “ready for connections”,可以查到啟動資訊。

2020-10-21T08:24:18.986765Z 0 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.7.28-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)           

MySQL 資料庫 crash 的常見原因

MySQL 資料庫 crash 的最常見原因有兩個,一個是 mysql 的 bug , 另一個是 mysql 申請系統資源失敗。

MySQL 的 bug

MySQL資料庫 crash 的最常見的一個原因當然是 MySQL 的bug。95% 的 bug 都是和具體的 sql 相關,通常是 MySQL crash 前執行的最後一個 sql 有問題,是以定位 bug 時應打開 general query log ,根據最後一個 sql 來查找線索。

當你确定了 crash 的原因後,應該檢查一下 MySQL 的 bug 庫(https://bugs.mysql.com),通常采用 Advanced search,看看有沒有類似的問題。如果你找到了可能與你相關的 bug,确認它是否修複了。如果已經修複了,那麼把 MySQL 更新到 bug 已經修複的版本。

mysql 兩個時間相差大于24小時的資料_MySQL 資料庫崩潰(crash)的常見原因和解決辦法...

在每個版本的 Release Notes 裡面有一節 Bugs Fixed ,可以查到修複的 bug 。

MySQL 申請系統資源失敗

...

✨ 接下來内容請點選【原文】進行檢視~

更多資料庫相關内容,可通路【墨天輪】進行浏覽。

mysql 兩個時間相差大于24小時的資料_MySQL 資料庫崩潰(crash)的常見原因和解決辦法...