Mysql

表中的數據庫增長 - MySQL

  • November 14, 2016

我想每天將特定數據庫的數據庫大小儲存到一個表中,這將有助於了解數據庫在一段時間內的增長。

SELECT table_schema AS "Database", ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)" FROM information_schema.TABLES where table_schema = 'testdb' GROUP BY table_schema;

我得到上述查詢的輸出,例如 10456.3。

我需要將此數字插入應包含三列的表中。數據庫名稱、日期和數據庫大小。

我怎樣才能通過自動化每天做到這一點?

如果您將它儲存到您正在測量的同一個數據庫中,您可以使用 MySQL 計劃事件在特定時間執行查詢。

一個例子是:

DELIMITER $$
CREATE 
   EVENT IF NOT EXISTS db_measurement    
   ON SCHEDULE EVERY 1 DAY
   STARTS '2016-11-15 00:00:00'
   ENABLE
   DO 
   INSERT INTO tableName 
   SELECT 
       table_schema AS "Database", 
       ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)" 
   FROM information_schema.TABLES 
   where table_schema = 'testdb' 
   GROUP BY table_schema$$
DELIMITER ;  

如果它是不同的數據庫,則需要使用某種 shell 腳本。


請記住,我遠非 Linux 專家(忽略圍繞permissions,passwords in scripts等的討論SSL),您可以執行以下操作:

mysql -hxxxx -Pxxxx -uxxxx -pxxxx -se"SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS Size FROM information_schema.TABLES where table_schema = 'dbtest' GROUP BY table_schema;" | { read dbSizeVal; mysql -hxxxx -Pxxxx -uxxxx -pxxxx -e"INSERT INTO dbname.tablename VALUES(${dbSizeVal})"}

它從遠端數據庫中獲取大小值,並將其should載入到本地數據庫中的表中。


我剛用過:

CREATE TABLE `tableName` ( 
   `dbsize` varchar(45) NOT NULL
);

進行測試,但您可能需要一個decimal, integer,float數據類型,具體取決於您返回的數據以及您需要它的準確性。

這也不包括dbnameortime欄位。您可以使用timeVal TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMPwhich 將為您提供時間戳欄位。

數據庫名稱很棘手,因為您需要攜帶兩個變數,而我的腳本(上面)只允許一個(如果您只查看一個數據庫,您可以直接將其輸入到查詢中/設置預設值) .

引用自:https://dba.stackexchange.com/questions/155167