1. 程式人生 > >阿里雲伺服器 mysql經常自動停止掛掉重啟的完美解決方式

阿里雲伺服器 mysql經常自動停止掛掉重啟的完美解決方式

阿里雲伺服器 MySQL 經常自動停止、掛掉、重啟。

開啟 MySQL 的 error.log 錯誤資訊,在阿里雲 CentOS 的路徑為 /alidata/log/mysql/error.log,如下:

2016-03-13 00:16:37 0[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use--explicit_defaults_for_timestampserver option(see documentationformore details).
2016-03-13 00:16:37 30576[Note] Plugin'FEDERATED
'is disabled. 2016-03-13 00:16:37 30576[Note] InnoDB: Using atomics to ref count buffer pool pages 2016-03-13 00:16:37 30576[Note] InnoDB: The InnoDB memory heap is disabled 2016-03-13 00:16:37 30576[Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins 2016-03-13 00:16:37 30576[Note] InnoDB: Memory barrier is not
used 2016-03-13 00:16:37 30576[Note] InnoDB: Compressed tables use zlib 1.2.3 2016-03-13 00:16:37 30576[Note] InnoDB: Using Linux native AIO 2016-03-13 00:16:37 30576[Note] InnoDB: Using CPU crc32 instructions 2016-03-13 00:16:37 30576[Note] InnoDB: Initializing buffer pool, size=64.0M 2016-03-13 00:16:37 30576[Note] InnoDB: Completed initialization of
buffer pool 2016-03-13 00:16:37 30576[Note] InnoDB: Highest supported file format is Barracuda. 2016-03-13 00:16:37 30576[Note] InnoDB: The log sequence numbers 52296883 and 52296883inibdata filesdonot match the log sequence number 93636989inthe ib_logfiles! 2016-03-13 00:16:37 30576[Note] InnoDB: Database was not shutdown normally! 2016-03-13 00:16:37 30576[Note] InnoDB: Starting crash recovery. 2016-03-13 00:16:37 30576[Note] InnoDB: Reading tablespace information from the .ibd files... 2016-03-13 00:16:37 30576[Note] InnoDB: Restoring possible half-written data pages 2016-03-13 00:16:37 30576[Note] InnoDB: from the doublewrite buffer...InnoDB: Last MySQL binlog file position 0 9828, file name mysql-bin.000335 2016-03-13 00:16:37 30576[Note] InnoDB: 128 rollback segment(s)are active. 2016-03-13 00:16:37 30576[Note] InnoDB: Waitingforpurge to start 2016-03-13 00:16:37 30576[Note] InnoDB: 5.6.21 started;log sequence number 93636989 2016-03-13 00:16:38 30576[Note] Recovering after a crash using mysql-bin 2016-03-13 00:16:38 30576[Note] Starting crash recovery... 2016-03-13 00:16:38 30576[Note] Crash recovery finished. 2016-03-13 00:16:40 30576[Note] Server hostname(bind-address):'*';port: 3306 2016-03-13 00:16:40 30576[Note] IPv6 is not available. 2016-03-13 00:16:40 30576[Note] -'0.0.0.0'resolves to'0.0.0.0'; 2016-03-13 00:16:40 30576[Note] Server socket created on IP:'0.0.0.0'. 2016-03-13 00:16:41 30576[Note] Event Scheduler: Loaded 0 events 2016-03-13 00:16:41 30576[Note] /alidata/server/mysql/bin/mysqld: readyforconnections.Version:'5.6.21-log'socket:'/tmp/mysql.sock'port: 3306 MySQL Community Server(GPL)160313 00:16:41 mysqld_safe Number of processes running now: 0160313 00:16:41 mysqld_safe mysqld restarted

MySQL 的 error.log 中,我們很難找出出是哪裡出了問題。去 Google 了一下,給出的答案基本是修改”/alidata/server/mysql/my.cnf”:

innodb_buffer_pool_size=64M# 預設為128M,修改成64M、32M或者8M,但實際上重啟 MySQL 之後以為能執行,實際上過了一會 MySQL 還是會出現不知原因地自動關閉。

注意去看其中的2016-03-13 00:16:37 30576[Note] InnoDB: Database was not shutdown normally!說明了 MySQL 非正常關閉,MySQL 也不知道自己為什麼被關閉掉了。。。於是, MySQL 覺得真奇怪,自己又重啟了自己的程序開始 Crash Recoverying,如下:

接著,大家又猜想這條2016-03-13 00:16:37 30576[Note] InnoDB: The log sequence numbers 52296883 and 52296883inibdata filesdonot match the log sequence number 93636989inthe ib_logfiles!Google,發現原來就是這裡搗鬼,才出現了 MySQL 再重啟之後,又繼續自動關閉,再重啟。於是,嘗試按照 StackOverflow 上面的 suggestions 去做:

重啟,又可以了。。。沒一會,嚓,MySQL 又宕了!這次不僅宕,而且 error.log 又多了因 * innodb_force_recovery = 6 * 而引起的錯誤。

怎麼辦?現在我們回到下面這條日誌:

2016-03-13 00:16:37 30576[Note] InnoDB: Database was not shutdown normally!

現在我們要看看,為什麼 MySQL 會不正常關閉呢!?現在我們開啟top看看。下面使用htop進行檢視:

這裡寫圖片描述

一看 mysql 程序佔用的 VIRT 怎麼這麼多!這時,你要是多重新整理幾下你伺服器上搭建的 WordPress 網站的主頁的話,會出現 mysql 記憶體佔用率超過 50% 的情況,這時候 mysql 程序就會被 linux 核心殺死。也就出現了我們在 MySQL 的 error.log 中看到的“[Note] InnoDB: Database was not shutdown normally!” 日誌了。

為了確定這個猜測是否真實,我們去看看 kernel 日誌。

接著你會看到:

看到最後的兩條:

好了,終於找出原因了,記憶體不夠,殺死了 mysqld 程序。

下面是我的優化方案:

1.建立 SWAP 分割槽:
檢查系統Swap檔案資訊

sudo swapon -s
free -m

檢查硬碟可用空間

df -h

建立Swap檔案

sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024

啟用Swap

sudo /sbin/mkswap /var/swap.1
sudo /sbin/swapon /var/swap.1

使Swap在主機重啟後依然生效

sudo nano /etc/fstab

加入以下內容

/var/swap.1 swap swap defaults 0 0
All done!

2.降低資料庫 InnoDB 引擎的緩衝區大小,以及限制 MySQL 的最大連線數(max_connections):
降低 InnoDB 緩衝區大小為 64M 或者 32M(到mysql配置檔案中修改)

innodb_buffer_pool_size=64M

限制最大連線數為100,在伺服器配置很低時可以繼續降低

max_connections=100

修改完重啟 MySQL:

service mysqld restart

註釋:max_connections 的預設值是 151,可以動態更改這個值。參見:max_connections

如有必要,可以重啟伺服器: reboot

相關推薦

阿里伺服器 mysql經常自動停止完美解決方式

阿里雲伺服器 MySQL 經常自動停止、掛掉、重啟。 開啟 MySQL 的 error.log 錯誤資訊,在阿里雲 CentOS 的路徑為 /alidata/log/mysql/error.log,如下: 2016-03-13 00:16:37 0[Wa

記錄阿里伺服器mysql被黑

前言 比上次伺服器被黑還要恐怖的資料庫被黑,再次強調,資料庫不備份不做安全,你就可以準備跑路了。 這次記錄一下整個被黑的過程,以及整個檢查和處理的過程。 發現 上個月某一天,網站出現了無法登入的情況,出現了大量的錯誤日誌報警,然後就牛逼了,上伺服器一查發現數據庫裡面就剩了一個名叫PLEASE_READ的

連線阿里伺服器MySql資料庫

      首先先說一個坑,也是自己很久沒有使用linux原因導致的,自己也是的,最近忙於工作,買了阿里雲伺服器之後一直都沒有去弄了,感覺自己白花錢了,廢話不多說了,直接進入正題      第一:     肯

阿里伺服器mysql遠端無法訪問

問題 最近在阿里雲伺服器上搭建了mysql的docker映象,並運行了容器,狀態如下: 於是,在本地客戶端嘗試連線mysql,但是死活連線不上,於是cmd,嘗試telnet,發現也不通,於是懷疑是伺服器防火牆未開啟,於是,關閉防火牆,之後還是不行,最後上官網檢視伺服器後臺埠開放規則。

阿里伺服器mysql密碼置、遠端連線設定

密碼重置 第一步在linux上輸入:mysqladmin -u root -p password 結果:Enter password: 輸入原密碼 New password: 輸入新密碼 Confirm new password:輸入新密碼 遠端連線 第一步輸入:mysql -uroot -

解決Navicat連線阿里伺服器MySql時報錯問題

因為經常需要使用資料庫的操作,所以就在阿里雲的伺服器中安裝了MySql,這樣使用起來方便得多,但是在剛剛使用的時候問題還是很多的,就比如你無法用資料庫的視覺化軟體(Navicate等)進行連線,出現這種情況一般產生的產生的原因有兩種: 一:阿里雲伺服器安全組中的安全組例項沒有給訪問

阿里伺服器-mysql遠端連線

這兩天買了個阿里雲伺服器,自己搞了一下,裝了mysql,因為平時Navicat用習慣了,想著陪一下伺服器的資料庫,這樣就方便操作了,然後搞了變天,設定bind-address,修改伺服器埠,結果一番下來,還是沒成功。 然後今天看到了一個帖子Ubuntu Server 16.04下配置MySQL並

阿里伺服器MySQL,不能遠端連線

最近參加了一個比賽,需要用到阿里雲伺服器。但是,伺服器的MySQL始終不能遠端連線,在網上百度一番後並根據我的問題總結如下:      1.MySQL的使用者配置錯誤——資料庫裡面的user表未設定遠端登陸賬戶。因此把user表下的host選項裡的

Navicat連不上遠端阿里伺服器MySQL資料庫的幾個原因

背景: 今天在阿里雲CentOs裡部署MySQL,用ssh連上可以進入資料庫,但是本地Navicat就是連不上。如圖: 過程:到處看帖子,各種嘗試,過程如下: 1.有的帖子提醒要先開啟mysql服務:systemctl satrt mysqld.service

阿里伺服器mysql安裝

1、安裝mysql 安裝之前先apt-get update更新資源索引,安裝執行下面命令安裝mysql,安裝過程中需要你設定mysql的登入密碼。 apt-get install mysql-serve

伺服器】遠端連線阿里伺服器Mysql資料庫

首先:很重要的一點如果配置沒問題但無論如何也連不上請檢查你自己的網路是否有問題,我當時搞了三個小時最後發現用我們學校的校園網無論如何也連不上,但換成自己的熱點就能連上。 配置MySQL: 1:新增阿里雲安全組規則的MySQL 3306埠  點選左側導航欄安全組 &nb

阿里伺服器MySQL(5.7V)資料庫用Navicat連線

1、linux連線資料庫,並輸入密碼 mysql -uroot -p 2、輸入以下命令進行授權: grant all privileges on *.* to 'root'@'%' identified by '資料庫密碼' with grant optio

本地Navicat for Mysql 連線不上遠端阿里伺服器mysql(windows系統)

一.      首先看看 ip地址 使用者名稱 密碼 埠號(3306代替)是否正確 二.      以下都是再遠端伺服器進行操作(windows系統)      在遠端命令欄 裡輸入  netstat -na   檢視埠是否開啟(埠是否在執行中)      如果沒有3306

阿里伺服器 mysql遠端連線時,出現連線不上的解決辦法

主要現象是,命令列輸入mysql會提示:Accessdeniedforuser'root'@'localhost' (using password: YES)  折騰了蠻久,找了多種方式就是連不上,最後以下處理搞定: 1、配置無需驗證登入方式 vi /etc/my.

阿里伺服器mysql遠端登入

利用xshell登入伺服器 #mysql -u root -p 回車鍵 輸入資料庫密碼 mysql> show databases; mysql>user mysql mysql>update user set host='%' where user='r

阿里伺服器ssh經常一段時間就斷掉解決辦法

#vim /etc/ssh/sshd_config 找到下面兩行 #ClientAliveInterval 0 #ClientAliveCountMax 3 去掉註釋,改成 ClientAliveInterval 30 ClientAliveCountMax 86400 這

阿里伺服器MySql的安裝

遠端登入伺服器 sudo apt-get update 如果是第一次開啟,需要更新一下 sudo apt-get install mysql-server mysql-client 安裝mysql 中

關於阿里伺服器中使用Docker啟動Tomcat過程很慢的解決方案

最近在阿里雲伺服器使用Docker啟動Tomcat,發現tomcat伺服器啟動過程很慢。但是在本地啟動很快,一直找不到問題所在,檢視Tomcat伺服器啟動日誌發現打印出這麼一段日誌:二月 12, 2018 9:20:02 上午 org.apache.catalina.util

阿里伺服器安裝tomcat 8080埠外網不可訪問問題解決

案例 5:允許公網通過HTTP、HTTPS等服務訪問例項 如果您在例項上架設了一個網站,希望您的使用者能通過HTTP或HTTPS服務訪問到您的網站,您需要在例項所在安全組中新增以下安全組規則。 VP

FTP連線長時間不操作後自動斷開/的原因和解決

資料庫、FTP等連線在長時間不使用之後會自動斷開,導致下次使用時尚未登入而直接進行操作,將會導致出錯。 原因 FTP或資料庫伺服器設定了會話無操作的timeout,當無操作的時間大於這個值的時候,將會導致伺服器將連線切斷(connection reset b