MySQL memory usage

Script to get information about used memory by a MySQL server

ubuntu@localhost:~$ ./mysql-memusage.sh
+------------------------------------------+--------------------+
|                          key_buffer_size |           8.000 MB |
|                         query_cache_size |           0.000 MB |
|                  innodb_buffer_pool_size |       65536.000 MB |
|          innodb_additional_mem_pool_size |           0.000 MB |
|                   innodb_log_buffer_size |        2048.000 MB |
+------------------------------------------+--------------------+
|                              BASE MEMORY |       67592.000 MB |
+------------------------------------------+--------------------+
|                         sort_buffer_size |           0.250 MB |
|                         read_buffer_size |           0.125 MB |
|                     read_rnd_buffer_size |           0.250 MB |
|                         join_buffer_size |           0.250 MB |
|                             thread_stack |           1.000 MB |
|                        binlog_cache_size |           0.031 MB |
|                           tmp_table_size |          16.000 MB |
+------------------------------------------+--------------------+
|                    MEMORY PER CONNECTION |          17.906 MB |
+------------------------------------------+--------------------+
|                     Max_used_connections |                 51 |
|                          max_connections |                256 |
+------------------------------------------+--------------------+
|                              TOTAL (MIN) |       68505.219 MB |
|                              TOTAL (MAX) |       72176.000 MB |
+------------------------------------------+--------------------+
#!/bin/sh
# you might want to add some user authentication here
mysql -e "show variables; show status" | awk '
{
    VAR[$1]=$2
}
END {
    MAX_CONN = VAR["max_connections"]
    MAX_USED_CONN = VAR["Max_used_connections"]
    BASE_MEM=VAR["key_buffer_size"] + VAR["query_cache_size"] + VAR["innodb_buffer_pool_size"] + VAR["innodb_additional_mem_pool_size"] + VAR["innodb_log_buffer_size"]
    MEM_PER_CONN=VAR["read_buffer_size"] + VAR["read_rnd_buffer_size"] + VAR["sort_buffer_size"] + VAR["join_buffer_size"] + VAR["binlog_cache_size"] + VAR["thread_stack"] + VAR["tmp_table_size"]
    MEM_TOTAL_MIN=BASE_MEM + MEM_PER_CONN*MAX_USED_CONN
    MEM_TOTAL_MAX=BASE_MEM + MEM_PER_CONN*MAX_CONN
    printf "+------------------------------------------+--------------------+\n"
    printf "| %40s | %15.3f MB |\n", "key_buffer_size", VAR["key_buffer_size"]/1048576
    printf "| %40s | %15.3f MB |\n", "query_cache_size", VAR["query_cache_size"]/1048576
    printf "| %40s | %15.3f MB |\n", "innodb_buffer_pool_size", VAR["innodb_buffer_pool_size"]/1048576
    printf "| %40s | %15.3f MB |\n", "innodb_additional_mem_pool_size", VAR["innodb_additional_mem_pool_size"]/1048576
    printf "| %40s | %15.3f MB |\n", "innodb_log_buffer_size", VAR["innodb_log_buffer_size"]/1048576
    printf "+------------------------------------------+--------------------+\n"
    printf "| %40s | %15.3f MB |\n", "BASE MEMORY", BASE_MEM/1048576
    printf "+------------------------------------------+--------------------+\n"
    printf "| %40s | %15.3f MB |\n", "sort_buffer_size", VAR["sort_buffer_size"]/1048576
    printf "| %40s | %15.3f MB |\n", "read_buffer_size", VAR["read_buffer_size"]/1048576
    printf "| %40s | %15.3f MB |\n", "read_rnd_buffer_size", VAR["read_rnd_buffer_size"]/1048576
    printf "| %40s | %15.3f MB |\n", "join_buffer_size", VAR["join_buffer_size"]/1048576
    printf "| %40s | %15.3f MB |\n", "thread_stack", VAR["thread_stack"]/1048576
    printf "| %40s | %15.3f MB |\n", "binlog_cache_size", VAR["binlog_cache_size"]/1048576
    printf "| %40s | %15.3f MB |\n", "tmp_table_size", VAR["tmp_table_size"]/1048576
    printf "+------------------------------------------+--------------------+\n"
    printf "| %40s | %15.3f MB |\n", "MEMORY PER CONNECTION", MEM_PER_CONN/1048576
    printf "+------------------------------------------+--------------------+\n"
    printf "| %40s | %18d |\n", "Max_used_connections", MAX_USED_CONN
    printf "| %40s | %18d |\n", "max_connections", MAX_CONN
    printf "+------------------------------------------+--------------------+\n"
    printf "| %40s | %15.3f MB |\n", "TOTAL (MIN)", MEM_TOTAL_MIN/1048576
    printf "| %40s | %15.3f MB |\n", "TOTAL (MAX)", MEM_TOTAL_MAX/1048576
    printf "+------------------------------------------+--------------------+\n"
}'