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"

관련 정보