Una de tamaños

  • Tamaño de las bases de datos
Para conocer el tamaño de las bases de datos alojadas en el servidor ejecutaremos la siguiente consulta SQL:
SELECT
  table_schema "Data Base Name",  
  sum( data_length + index_length ) / 1024 / 1024 "Data Base Size in MB",  
  sum( data_free )/ 1024 / 1024 "Free Space in MB"  
FROM information_schema.TABLES  
GROUP BY table_schema; 
  • Tamaño de las tablas de una base de datos
Para conocer el tamaño de todas las tablas de alguna de las bases de datos alojadas en el servidor, podemos ejecutar la siguiente consulta SQL:
select  
    table_name,  
    table_rows "# Filas",  
    data_length "Tamaño datos",  
    index_length "Tamaño índices",  
    round(((data_length + index_length) / 1024 / 1024),2) "Ocupado en MB",  
    round((data_free / 1024 / 1024),2) "Libre en MB",  
    round((data_free / (data_length + index_length)),6) "Fragmentación"  
from information_schema.tables  
where table_schema = "miBaseDeDatos"  
order by (data_length + index_length)  
desc;

CMake. Soporte para MySQL/MariaDB y PostgreSQL en C.

Para añadir soporte para MySQL/MariaDB o PostgreSQL en C utilizando CMake podemos partir del siguiente CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(CPasos C)


set(CMAKE_C_FLAGS_DEBUG "-D_ZZSoft_DEBUG_ -Wall")

include(FindPkgConfig)
pkg_check_modules(LIBMYSQLCLIENT REQUIRED mysqlclient)


foreach(FLAG ${LIBMYSQLCLIENT_CFLAGS_OTHER})
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAG}")
endforeach()

pkg_check_modules(LIBPOSTGRESQL REQUIRED libpq)

set (HEADER_FILES variables.h)
set (SOURCES main.c ${HEADER_FILES})
set (THREADS_PREFER_PTHREAD_FLAG ON)

find_package(Threads REQUIRED)

link_directories(${LIBMYSQLCLIENT_LIBRARY_DIRS} ${LIBPOSTGRESQL})

add_executable(${PROJECT_NAME} ${SOURCES})
target_include_directories(${PROJECT_NAME} PRIVATE ${LIBMYSQLCLIENT_INCLUDE_DIRS} ${LIBPOSTGRESQL_INCLUDE_DIRS})
target_link_libraries (${PROJECT_NAME} PRIVATE ${CMAKE_THREAD_LIBS_INIT} ${LIBMYSQLCLIENT_LIBRARIES} ${LIBPOSTGRESQL_LIBRARIES})
Normalmente para añadir el soporte para alguna librería utilizando cmake se utiliza la función find_package que busca dentro de los directorios configurados ficheros con extensión cmake. Las pruebas las hice sobre Ubuntu, y en esta distribución, para el soporte PostgreSQL no me funcionó esta función. Para el soporte MySQL/MariaDB partí de https://mysqlserverteam.com/the-client-library-part-4-how-to-write-a-simple-mysql-client-in-c-using-cmake-and-pkg-config/

Previsión meteorológica desde la línea de órdenes

Personalmente utilizo la línea de órdenes prácticamente para todo lo que hago con el ordenador (aunque tenga instalado entorno gráfico) así que poder conocer la previsión meteorológica desde la línea de órdenes es algo que me resulta bastante práctico. Por ello, gracias a @igor_chubin, consultando mediante curl la web wttr.in/ciudad podemos conocer la previsión para la "ciudad" que indiquemos en la URL.
curl wttr.in/Zanzabornín
Como se puede ver, están permitidos caracteres UTF-8. Al ejecutar la línea anterior, veremos algo como lo siguiente: 


 
Una nota para finalizar. El código fuente de esta aplicación creada por @igor_chubin está disponible en su GitHub.

Conocer IP pública desde la línea de órdenes

En ocasiones suele necesitarse conocer la IP pública de una máquina y si no disponemos de entorno gráfico para poder acceder a alguna de las webs que te la muestran (o si como a mi os resulta más cómoda la línea de órdenes), podemos ejecutar la siguiente línea que sólo necesita de curl:
curl ipinfo.io/ip

Si preferimos utilizar wget, o es la orden que tenemos instalada en nuestra máquina, podemos ejecutar:
wget -qO- ipinfo.io/ip

Añadir un disco a una máquina virtual sin reiniciar

Después de añadir un disco a una máquina virtual es posible que no nos aparezca disponible. Si necesidad de reiniciar, desde la línea de órdenes, y como usuario root podemos ejecutar lo siguiente:


for i in `ls /sys/class/scsi_host/`; do \
  echo "- - -" > /sys/class/scsi_host/$i/scan; \
done
 
Una vez ejecutado esa línea, el nuevo disco ya debería aparecer bajo /dev 

Conexión con una base de datos PostgreSQL en C

Un pequeño ejemplo de como conectarse a una base de datos PostgreSQL y ejecutar una consulta SQL.
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>

#include <libpq-fe.h>

int main(int argc __attribute__ ((unused)), char **argv __attribute__ ((unused))) {
  int pg_lib_version = PQlibVersion();
  PGconn *con;
  PGresult *res;
  int num_registros = 0;

  fprintf(stderr, "Versión de la librería de PostgreSQL: %d\n", pg_lib_version);

  con = PQconnectdb("dbname=qpasos host=pgsql-master user=qpasos password=qpasos");
  if (PQstatus(con) == CONNECTION_BAD) {
    fprintf(stderr, "Error al conectar con la base de datos PostgreSQL\n");
    return EXIT_FAILURE;
  }
  res = PQexec(con, "select * from tabla_pasos where fecha >= '2018-01-01'");
  if (PQresultStatus(res) != PGRES_TUPLES_OK) {
    fprintf(stderr, "No se han obtenido datos\n");
    return EXIT_FAILURE;
  }
  num_registros = PQntuples(res);
  fprintf(stderr, "Se encontraron %d registros\n", num_registros);
  for (int i=0 ; i<num_registros ; i++) {
    for (int j=0 ; j<5 ; j++) {
      fprintf(stdout, "%s\t", PQgetvalue(res, i, j));
    }
  putchar('\n');
  }

  PQclear(res);
  PQfinish(con);

  return EXIT_SUCCESS;
}
Compilaríamos ese código con:
gcc -o fuente fuente.c -I`pg_config --includedir` -L`pg_config --libdir` -lpq

PostgreSQL. Comprobar si la réplica se está realizando.

Para comprobar si la réplica se está realizando podemos lanzar la siguiente consulta SQL en el nodo primario.
select client_addr, state, sent_location, write_location, flush_location, replay_location from pg_stat_replication;
Si la réplica se está ejecutando, veremos una salida como la siguiente:
postgres=# select client_addr, state, sent_location, write_location,
postgres-#         flush_location, replay_location from pg_stat_replication;
 client_addr  |   state   | sent_location | write_location | flush_location | replay_location 
--------------+-----------+---------------+----------------+----------------+-----------------
 192.168.1.68 | streaming | 0/17001AA0    | 0/17001AA0     | 0/17001AA0     | 0/17001AA0
(1 fila)