mysql innodb ログファイルのサイズを表示する Bash スクリプト

mysql innodb ログファイルのサイズを表示する Bash スクリプト

mysql innodbログファイルのサイズを提供するbashスクリプトを作成しています。MB。現在の出力をバイト単位で受信しています。次のスクリプトを確認し、出力をMB単位で取得するのに役立ちます。

#! /bin/sh

  a=$(mysql -uroot -proot -e  "SHOW VARIABLES" | grep innodb_log_file_size | cut -f2)
  b=$(echo "$a/$10240" )

 echo {"Innodb_log_file_size":"'$b'"' }

答え1

Bashではこれを行うことができます。

あなたは(( ))それを使用して強制することができます算術コンテキスト

あなたが持っているサイズに関してはMB対MiB、右図をご覧ください。

#!/bin/bash

psize()
{
    local name="$1"
    local -i val="$2";
    local u=""

    case "$3" in
    "B") u="B"  ;;
    "K") u="KiB"; ((val /= 1024 ));;
    "G") u="GiB"; ((val /= 1024 * 1024 * 1024 ));;
    # Defaults to MiB
      *) u="MiB"; ((val /= 1024 * 1024 ));;
    esac

    printf "%-22s: %d %s\n" "$name" "$val" "$u"
}

unit=""

# Check if wanted size is given by user
if [[ "$1" =~ ^(B|K|M|G)$ ]]; then
    unit="$1"
fi

# Use tab as delimiter and read into variables "name" and "value"
while IFS=$'\t' read -r name value; do
    case "$name" in
    "innodb_log_file_size"|"innodb_log_buffer_size")
        psize "$name" "$value" "$unit"
        ;;
    esac
done < <(mysql -uroot -ppass -e "SHOW VARIABLES")

grepを使う

grepなどを混在させるには:

psize()
{

    local -i a=$(mysql -uroot -ppass -e "SHOW VARIABLES" | \
            grep innodb_log_file_size | cut -f2)
    local -i b=0;
    local u=""

    case "$1" in
    "B") u="B"  ;   b="$a";;
    "K") u="KiB"; ((b = a / 1024 ));;
    "G") u="GiB"; ((b = a / 1024 / 1024 / 1024 ));;
     *)  u="MiB"; ((b = a / 1024 / 1024 ));;
    esac

    printf "Innodb_log_file_size: %d %s\n" "$b" "$u"
}

unit="M"

if [[ "$1" =~ ^(B|K|M|G)$ ]]; then
    unit="$1"
fi

psize "$unit"

次の方法で使用できます。

./myscript   # Defaults to MiB
./myscript B # Print in bytes
./myscript G # Print in GiB
...

参考用。

awkを使用してください:

psize()
{
awk -v unit="$1" '
BEGIN {
    if (unit == "")
        unit="M"
    switch (unit) {
    case "B":
        ratio = 1;
        break;
    case "K":
        ratio = 1024;
        break;
    case "G":
        ratio = 1024 * 1024 * 1024;
            break;
    default:
        ratio = 1024 * 1024;
        break;
    }
    if (unit != "B")
        unit = unit "iB"
}
/^innodb_log_file_size\s/ {
    printf("Log size   : %d %s\n", $2 / ratio, unit);
}
/^innodb_log_buffer_size\s/ {
    printf("Buffer size: %d %s\n", $2 / ratio, unit);
}
' <(mysql -uroot -e "SHOW VARIABLES" -ppass)
}

psize "$unit"

関連情報