2014年3月12日星期三

MySQL的計劃停機時間和其他狀態變量進行審查

Original post: http://anothermysqldba.blogspot.com/2014/03/planning-mysql-downtime-and-other.html

我們都知道,而MySQL是穩定的,並可以運行了很長一段時間沒有重新啟動。 幾乎每隔一段時間,我們需要重新啟動它調整一些變量或升級雖然。 有些人可能會認為是在一夜之間做到這一點的最好時機,因為他們的用戶都睡著了。 然而,經常通宵還包括備份,並且可以做不同的數據挖掘等其他相關的crontab腳本

所以你怎麼能得到時,你有服務器上的活動最少的指引? 現在,每個應用程序和數據庫是不同的,所以你需要考慮哪些相關的活動正在運行時,不同的時間框架內。 如果你開始記錄“threads_connected的”狀態變量每分鐘5到10分鐘,這同樣取決於如何加載你的系統是一小時一次可能被罰款,你會很快聚集在您登錄不同的MySQL連接的數量時,框架。

這可以做一個無數的方法。 它已經提供了很多企業級的工具,你可以編寫腳本等,但只是為了保持它在MySQL。 我將使用一個事件和日常的這個簡單的例子。

創建一個簡單的表:

CREATE TABLE `threads_count` (
`threads_count_id` int(11) NOT NULL AUTO_INCREMENT,
`variable_value` varchar(255) DEFAULT NULL,
`time_recorded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`threads_count_id`)
) ENGINE=InnoDB;

創建一個簡單的程序:

delimiter //
CREATE PROCEDURE threads_tally()
BEGIN
INSERT INTO threads_count SELECT NULL , VARIABLE_VALUE , NOW() FROM information_schema.GLOBAL_STATUS WHERE VARIABLE_NAME IN ('Threads_connected');
END//
delimiter ;

創建一個簡單的事件:

SET GLOBAL event_scheduler = ON;
CREATE EVENT `threads_tally`
ON SCHEDULE EVERY 5 MINUTE
DISABLE ON SLAVE
COMMENT 'keeps a count of Threads_connected'
DO
CALL threads_tally();
DELIMITER ;

但現在執行上面的例子中,你將有你可以從(可能放到一個圖形或只是進行審查)中選擇值,以便可以看到,當存在服務器上的最少連接數的表。 根據您的應用程序和流量,你可以保持這個運行足夠長的時間來獲得一個有效的角度,然後禁用事件。

select variable_value , time_recorded FROM threads_count;

現在,你當然可以藉此更進一步,如果你沒有企業工具,並保持一個日誌中的所有審查你的狀態變量的:

表中的值:

CREATE TABLE `status_review` (
`status_review_id` int(11) NOT NULL AUTO_INCREMENT,
`variable_name` varchar(255) DEFAULT NULL,
`variable_value` varchar(255) DEFAULT NULL,
`time_recorded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`status_review_id`)
) ENGINE=InnoDB;

日常收集的值:

delimiter //
CREATE PROCEDURE status_reviews()
BEGIN
INSERT INTO status_review SELECT NULL , VARIABLE_NAME, VARIABLE_VALUE , NOW() FROM information_schema.GLOBAL_STATUS;
END//
delimiter ;

事件執行例程:

SET GLOBAL event_scheduler = ON;
CREATE EVENT `status_reviews`
ON SCHEDULE EVERY 1 HOUR
DISABLE ON SLAVE
COMMENT 'keeps a eye on status values'
DO
CALL status_reviews();
DELIMITER ;

您可能只希望某些變量名和值進行審核,並可以在常規相應地調整查詢。 運行時間取決於您的需要,我在這個例子中使用一個小時。

當然,這也將隨著時間的推移,產生了大量的信息,因此,如果相關的一些清潔這些表隨著時間的推移可能需要。 這一切都取決於你如何經常登錄並查看所提供的信息。

雖然你會看到,因為你的數據增長和系統的許多價值的穩步增長使用,你也將能夠確定數據的尖峰在數據和關聯,為您的應用程序和系統中使用。

MySQL的企業,例如已經將圖中所有此類信息對你,但是這是一種方式,你也可以做自己的數據一點時間和審查。