2014-01-14 65 views
2

MySQL服務器頻繁重啓。在不到24小時內75次。最後不用重新開始就結束了!MySQL服務器頻繁自動重啓,後來永久關機

請檢查細節,在這裏記錄:mysqld.log

140113 10:18:22 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended 

140113 10:18:31 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql 
140113 10:18:31 InnoDB: Initializing buffer pool, size = 8.0M 
140113 10:18:31 InnoDB: Completed initialization of buffer pool 
140113 10:18:31 InnoDB: Started; log sequence number 16 1064411530 
140113 10:18:32 [Note] Event Scheduler: Loaded 0 events 
140113 10:18:32 [Note] /usr/libexec/mysqld: ready for connections. 
Version: '5.1.61' socket: '/var/lib/mysql/mysql.sock' port: 3306 Source distribution 

140113 18:45:09 mysqld_safe Number of processes running now: 0 
140113 18:45:10 mysqld_safe mysqld restarted 
140113 18:45:10 InnoDB: Initializing buffer pool, size = 8.0M 
140113 18:45:10 InnoDB: Completed initialization of buffer pool 
140113 18:45:10 InnoDB: Started; log sequence number 16 1064411530 
140113 18:45:11 [Note] Event Scheduler: Loaded 0 events 
140113 18:45:11 [Note] /usr/libexec/mysqld: ready for connections. 
Version: '5.1.61' socket: '/var/lib/mysql/mysql.sock' port: 3306 Source distribution 

......

140114 9:50:12 InnoDB: Initializing buffer pool, size = 8.0M 
140114 9:50:12 InnoDB: Completed initialization of buffer pool 
140114 9:50:12 InnoDB: Started; log sequence number 16 1064411530 
140114 9:50:13 [Note] Event Scheduler: Loaded 0 events 
140114 9:50:13 [Note] /usr/libexec/mysqld: ready for connections. 
Version: '5.1.61' socket: '/var/lib/mysql/mysql.sock' port: 3306 Source distribution 

140114 09:55:07 mysqld_safe Number of processes running now: 0 
140114 09:55:07 mysqld_safe mysqld restarted 
140114 9:55:08 InnoDB: Initializing buffer pool, size = 8.0M 
140114 9:55:08 InnoDB: Completed initialization of buffer pool 
140114 09:55:08 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended 

同時其殺死62個處理因內存不足。請檢查詳細日誌:messages

Jan 14 09:41:53 centos63 kernel: Out of memory: Kill process 16795 (mysqld) score 20 or sacrifice child 
Jan 14 09:41:53 centos63 kernel: Killed process 16795, UID 27, (mysqld) total-vm:574508kB, anon-rss:20488kB, file-rss:164kB 

我在每次5分鐘,這是影響約20萬,5萬,在三個表25000個數據的一些表上運行一個cronjob。 選擇超過1257個會員然後在9844個member_boards,然後用下面的僞代碼插入/更新超過168624個member_cards:

<?php 
    $qry = _("SELECT _members"); 
    while($member = mysql_fetch_assoc($res)) 
    {//1,257 
     $qry = _("SELECT _member_boards"); 
     while($db_board = mysql_fetch_assoc($board_res)) 
     {//9,844 
      $s_lists = curl_download("https://api.com/boards/lists"); 
      foreach ($lists as $list) {//9,844 
       if(!strcmp('SOMETHING', $list->name)){//Matching with API and DB 
        $curl = "https://api.com/lists/cards"; 
        foreach ($cards as $card) {//168,624 
         $qry = _("SELECT _member_cards"); 
         if($card_row = mysql_fetch_assoc($card_res)){ 
          $qry = _("UPDATE _member_cards"); 
         } 
         else{ 
          echo $qry = _("INSERT _member_cards"); 
         } 
        } 
       } 
      } 

     } 
     $qry = _("UPDATE _member_cards"); 
    } 
?> 

那麼什麼能的原因,如何解決這個問題呢?

RAM 512 MB直到現在。

CentOS

擴展RAM可達1 GB解決這個問題嗎?

+1

是的,它只是因爲'OOM'殺手而停止。 (1)定義mysql在其配置中使用的最大值,你可以計算它需要多少(2)限制其他進程(即:你的cron job)以達到最大值(3)如果你仍然用完內存,添加交換(慢)或實際內存(更快但可能更昂貴)。 – Wrikken

回答

0

你的MySQL服務器因爲使用太多內存而被殺;你可以添加更多的RAM到服務器,或者通過改變配置文件中的一些值來降低MySQL的內存使用率;但是這可能會影響性能。

看看這個questionthis one關於調整MySQL的配置指南 - 這不是一件容易的事,它是基於反覆試驗,直到你得到的性能和內存使用之間的良好平衡,你應該嘗試不同的值。

相關問題