欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

實(shí)例講解MySQL統(tǒng)計(jì)庫(kù)表大小

 更新時(shí)間:2020年07月04日 11:55:07   作者:懂點(diǎn)IT的耿小廚  
這篇文章主要介紹了MySQL統(tǒng)計(jì)庫(kù)表大小的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

統(tǒng)計(jì)每個(gè)庫(kù)每個(gè)表的大小是數(shù)據(jù)治理的其中最簡(jiǎn)單的一個(gè)要求,本文將從抽樣統(tǒng)計(jì)結(jié)果及精確統(tǒng)計(jì)結(jié)果兩方面來統(tǒng)計(jì)MySQL的每個(gè)庫(kù)每個(gè)表的數(shù)據(jù)量情況。

1、統(tǒng)計(jì)預(yù)估數(shù)據(jù)量

mysql數(shù)據(jù)字典庫(kù)information_schema里記錄了統(tǒng)計(jì)的預(yù)估數(shù)據(jù)量(innodb引擎表不準(zhǔn)確,MyISAM引擎表準(zhǔn)確)及數(shù)據(jù)大小、索引大小及表碎片的大小等信息。

如果想了解每個(gè)庫(kù)及表的大概數(shù)據(jù)量級(jí),可以直接查information_schema.tables進(jìn)行統(tǒng)計(jì)即可。例如:

SELECT table_schema,table_name,table_rows,data_length+index_length+ data_free data_size
 FROM information_schema.`TABLES` WHERE table_schema IN ('db1','db2');

其中data_size單位為B

如上文所述,統(tǒng)計(jì)信息里的數(shù)據(jù)條數(shù)及size是根據(jù)部分?jǐn)?shù)據(jù)抽樣統(tǒng)計(jì)的值,與實(shí)際大小存在差異,且表越大,差異越明顯,如果想知道每張表的實(shí)際情況,需用后續(xù)的方法。

2、統(tǒng)計(jì)實(shí)際數(shù)據(jù)量

想要統(tǒng)計(jì)每張表的實(shí)際大小就得去遍歷每個(gè)表算出對(duì)的記錄數(shù),通過查看表空間大?。總€(gè)表獨(dú)立表空間)查看每個(gè)表的size。通過以下步驟即可達(dá)到精確統(tǒng)計(jì)的目的。

創(chuàng)建路徑

創(chuàng)建一個(gè)工作路徑,保存腳本及臨時(shí)文件等

mkdir -p /usr/local/data_size

創(chuàng)建統(tǒng)計(jì)庫(kù)及表

在需要統(tǒng)計(jì)的數(shù)據(jù)庫(kù)實(shí)例上創(chuàng)建統(tǒng)計(jì)庫(kù)

SQL> create database bak_db;

創(chuàng)建統(tǒng)計(jì)的存儲(chǔ)過程

SQL> use bak_db;
SQL>CREATE PROCEDURE `p_db_size`()
BEGIN
DECLARE v_id INT;
DECLARE v_maxid INT;
DECLARE v_tbname VARCHAR(50);
DECLARE v_dbname VARCHAR(50);
DECLARE v_sql_upd VARCHAR(200);
SET v_id =(SELECT MIN(id) FROM bak_db.tb_size);
SET v_maxid =(SELECT MAX(id) FROM bak_db.tb_size);
WHILE v_id <=v_maxid
DO
SET v_tbname = (SELECT tbname FROM bak_db.tb_size WHERE id=v_id);
SET v_dbname = (SELECT dbname FROM bak_db.tb_size WHERE id=v_id);
SET v_sql_upd = CONCAT('update bak_db.tb_size set tb_rows=(select count(*) from ',v_dbname,".",v_tbname,") where id=",v_id);
  SET @v_sql_upd := v_sql_upd;
  PREPARE stmt FROM @v_sql_upd;
  EXECUTE stmt ;
  DEALLOCATE PREPARE stmt;
  SET v_id = v_id +1;
END WHILE;
  END;

創(chuàng)建腳本

vim    data.sh
/* 插入如下內(nèi)容*/

#! /bin/bash
cd /usr/local/data_size
du -s /data/mysql/mysql3306/data/db1/* |grep -v ".frm" |grep -v ".opt" >/usr/local/data_size/data_size     
du -s /data/mysql/mysql3306/data/db2/* |grep -v ".frm" |grep -v ".opt">>/usr/local/data_size/data_size

# 后面4步是拼接成sql 
awk '{print "insert into bak_db.tb_size(size,tb_route)values("""$0}' /usr/local/data_size/data_size >/usr/local/data_size/data_size1  
awk '{print $0";"}' /usr/local/data_size/data_size1 >/usr/local/data_size/data_size.sql
sed -i "s#\t#,'#g" /usr/local/data_size/data_size.sql
sed -i "s#;#');#g" /usr/local/data_size/data_size.sql

# 創(chuàng)建統(tǒng)計(jì)表
 /usr/local/mysql5.7/bin/mysql -uroot -p'Test#123456' -h 192.168.28.132 -e "drop table if exists bak_db.tb_size;CREATE TABLE IF NOT EXISTS bak_db.tb_size ( id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT ,size INT,tb_route VARCHAR(200),tbname VARCHAR(50),dbname VARCHAR(50),tb_rows INT(11));" 

# 導(dǎo)入數(shù)據(jù)
 /usr/local/mysql5.7/bin/mysql -uroot -p'Test#123456' -h 192.168.28.132 -e "use bak_db;truncate table bak_db.tb_size;source /usr/local/data_size/data_size.sql;"

# 生成庫(kù)名及表名,當(dāng)然該步驟也可以從數(shù)據(jù)字段中獲取
 /usr/local/mysql5.7/bin/mysql -uroot -p'Test#123456' -h 192.168.28.132 -e "use bak_db;UPDATE bak_db.tb_size SET tbname=REPLACE(SUBSTRING_INDEX(tb_route,'/',-1),'.ibd','');"
 /usr/local/mysql5.7/bin/mysql -uroot -p'Test#123456' -h 192.168.28.132 -e "UPDATE bak_db.tb_size SET dbname=LEFT (SUBSTRING_INDEX(tb_route,'/',-2),INSTR(SUBSTRING_INDEX(tb_route,'/',-2),'/')-1);"
sleep 10       # 如果之前的步驟在主庫(kù)金學(xué)習(xí)學(xué)習(xí),則建議暫停一段時(shí)間 以免后面統(tǒng)計(jì)的時(shí)候無法獲得表及內(nèi)容,如果前面的步驟都在從庫(kù),則可以省略該步驟
echo 'start call procedure' 
# 調(diào)用存儲(chǔ)過程 統(tǒng)計(jì)每個(gè)表的記錄條數(shù)
/usr/local/mysql5.7/bin/mysql -uroot -p'Test#123456' -h 192.168.28.132 -e "use bak_db;call bak_db.p_db_size();"

# 把表及數(shù)據(jù)導(dǎo)出
/usr/local/mysql5.7/bin/mysqldump -uroot -p'Test#123456' -h 192.168.28.132 --single-transaction bak_db tb_size >/usr/local/data_size/tb_size.sql

# 將表及結(jié)果導(dǎo)入主庫(kù)(從庫(kù)相當(dāng)于刪除在重建了一次)
/usr/local/mysql5.7/bin/mysql -uroot -p'Test#123456' -h 192.168.28.128 -e "use bak_db;source /usr/local/data_size/tb_size.sql;"

結(jié)果如下:

可以看出精確值與統(tǒng)計(jì)信息里的值差異還是很大的,且表越大 差異越明顯。

TIPS:  本文精確統(tǒng)計(jì)的腳本還有許多優(yōu)化空間,寫的比較倉(cāng)促,大家可以按需自行調(diào)整,水平有限,歡迎斧正。如有問題,歡迎與我溝通。

以上就是實(shí)例講解MySQL統(tǒng)計(jì)庫(kù)表大小的詳細(xì)內(nèi)容,更多關(guān)于MySQL統(tǒng)計(jì)庫(kù)表大小的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Mysql事物鎖等待超時(shí)Lock wait timeout exceeded;的解決

    Mysql事物鎖等待超時(shí)Lock wait timeout exceeded;的解決

    本文主要介紹了Mysql事物鎖等待超時(shí)Lock wait timeout exceeded;的解決,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • mysql8.0.21安裝教程圖文詳解

    mysql8.0.21安裝教程圖文詳解

    這篇文章主要介紹了mysql8.0.21安裝教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • MySQL系列之八 MySQL服務(wù)器變量

    MySQL系列之八 MySQL服務(wù)器變量

    其中有些參數(shù)支持運(yùn)行時(shí)修改,會(huì)立即生效;有些參數(shù)不支持,且只能通過修改配置文件,并重啟服務(wù)器程序生效;有些參數(shù)作用域是全局的,且不可改變;有些可以為每個(gè)用戶提供單獨(dú)(會(huì)話)的設(shè)置
    2021-07-07
  • 在CentOS上MySQL數(shù)據(jù)庫(kù)服務(wù)器配置方法

    在CentOS上MySQL數(shù)據(jù)庫(kù)服務(wù)器配置方法

    最近工作中經(jīng)常需要使用到MySQL,有時(shí)候在WINXP,有時(shí)候在Linux中,而這次,需要在CentOS中配置一下,還需要用到phpmyadmin, 在網(wǎng)上搜了不少的資料。
    2010-04-04
  • MySQL主從復(fù)制的原理圖解及Java語(yǔ)言示例使用

    MySQL主從復(fù)制的原理圖解及Java語(yǔ)言示例使用

    這篇文章主要介紹了MySQL的主從復(fù)制原理詳細(xì)分析,讀寫分離是基于主從復(fù)制來實(shí)現(xiàn)的。文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • MySQL的重裝問題解決方法

    MySQL的重裝問題解決方法

    最近在工作上遇到了MySQL重裝的問題,今天記錄一下我的解決過程。不論我用控制面板的卸載刪除程序方式還是安全衛(wèi)士的卸載,都會(huì)遇到一個(gè)問題,就是安裝到如下圖位置,server start時(shí)就程序無響應(yīng)了,一直死在那里
    2013-04-04
  • mysql模糊匹配多個(gè)值的兩種方法實(shí)例

    mysql模糊匹配多個(gè)值的兩種方法實(shí)例

    我們平時(shí)使用msyql需要模糊的匹配字段的時(shí)候,我們第一反應(yīng)就是使用like查詢語(yǔ)句來模糊匹配,下面這篇文章主要給大家介紹了關(guān)于mysql模糊匹配多個(gè)值的兩種方法,需要的朋友可以參考下
    2022-12-12
  • MYSQL拒絕訪問報(bào)錯(cuò)not allowed to connect

    MYSQL拒絕訪問報(bào)錯(cuò)not allowed to connect

    MYSQL拒絕訪問報(bào)錯(cuò)not allowed to connect,下面有個(gè)可行的方法,可以在其它任何的主機(jī)上以root身份登錄
    2014-07-07
  • MySQL數(shù)據(jù)庫(kù)安全秘籍之守護(hù)數(shù)據(jù)金庫(kù)防火防盜防攻擊

    MySQL數(shù)據(jù)庫(kù)安全秘籍之守護(hù)數(shù)據(jù)金庫(kù)防火防盜防攻擊

    MySQL是許多公司和組織的關(guān)鍵數(shù)據(jù)庫(kù),因此其安全性的重要性如此顯而易見,為了確保MySQL的安全性,需要采取多種措施來增強(qiáng)其安全性,本文給大家介紹MySQL數(shù)據(jù)庫(kù)安全秘籍之守護(hù)數(shù)據(jù)金庫(kù)防火防盜防攻擊,感興趣的朋友一起看看吧
    2023-03-03
  • 一個(gè)簡(jiǎn)單的MySQL備份Shell腳本

    一個(gè)簡(jiǎn)單的MySQL備份Shell腳本

    這篇文章主要介紹了一個(gè)簡(jiǎn)單的MySQL備份Shell腳本,本文直接給出代碼實(shí)例,需要的朋友可以參考下
    2015-07-07

最新評(píng)論