Programación y sistemas

MySQL logo

Cómo crear y configurar una replica de base de datos MySQL 8

0

La configuración y creación de réplicas de las bases de datos es un proceso muy importante para poder disponer de escalabilidad en nuestro cluster de bases de datos, pues nos permite escalar de forma horizontal (número de instancias) y no solo vertical (más RAM, más CPU).

Con la nueva versión de MySQL, la 8, que ya lleva un tiempo con nosotros, se cambió la nomenclatura que se le daba a las instancias maestra y esclava. Ahora se llaman «Fuente» (Source) y «Replica» (Replica). Aquí se usarán ambas nomenclaturas para ayudar aquellas personas que se estén actualizando desde MySQL 5.7.

1. Configurando la instancia maestra/fuente

En primer lugar tenemos que configurar la instancia que hará de instancia maestra, y desde ella se replicarán los datos hacia las instancias replicadas.

En el fichero de configuración de MySQL (normalmente estará en /etc/mysql/my.cnf) tendremos que indicar las siguientes líneas:

server_id=1
enforce-gtid-consistency = 1
log_bin                         = /var/log/mysql/mysql-bin
expire_logs_days                = 7
sync_binlog                     = 1
gtid-mode = ON

Esta configuración de MySQL está diseñada para habilitar y gestionar la replicación basada en GTID (Global Transaction Identifiers). Vamos a desglosar cada uno de los parámetros:

  1. server_id=1:
    • Este parámetro asigna un identificador único a la instancia del servidor MySQL. En un entorno de replicación, cada servidor debe tener un server_id único para distinguirse de otros servidores. En este caso, el identificador es 1.
  2. enforce-gtid-consistency = 1:
    • Asegura que todas las transacciones que se ejecutan en el servidor sean compatibles con GTID. Cuando está habilitada (= 1), no se permite el uso de transacciones que no sean compatibles con GTID, lo cual es necesario para mantener la consistencia en un entorno de replicación con GTID.
  3. log_bin = /var/log/mysql/mysql-bin:
    • Especifica la ruta y el nombre base para los archivos de registro binario (bin logs). Los bin logs registran todas las modificaciones de datos y son esenciales para la replicación y recuperación de datos. Aquí, los bin logs se almacenarán en /var/log/mysql/mysql-bin.
  4. expire_logs_days = 7:
    • Define el número de días que los archivos de registro binario se mantienen antes de ser automáticamente eliminados. En este caso, los registros binarios se conservarán durante 7 días.
  5. sync_binlog = 1:
    • Controla la frecuencia con la que MySQL sincroniza el registro binario a disco. Cuando se establece en 1, MySQL sincroniza los bin logs con el disco después de cada transacción. Esto proporciona la máxima seguridad de datos, asegurando que todas las transacciones se registren en disco en caso de un fallo del sistema.
  6. gtid-mode = ON:
    • Habilita el modo GTID en el servidor MySQL. Cuando gtid-mode está activado (ON), MySQL utiliza GTID para identificar y rastrear transacciones de forma global en el entorno de replicación. Esto facilita la gestión y recuperación de las transacciones en un sistema de replicación distribuido.

Esta configuración está orientada a establecer un entorno de replicación robusto y consistente utilizando GTID en MySQL. Se asegura que las transacciones sean compatibles con GTID, los bin logs sean mantenidos y sincronizados de manera adecuada, y que cada servidor en la configuración de replicación tenga un identificador único. Este conjunto de configuraciones es esencial para garantizar la consistencia y la recuperación eficiente de datos en un entorno de replicación MySQL.

2. Crear usuario de replicación en la instancia maestra/fuente

Hay que crear un usuario que tenga solamente el privilegio «REPLICATION_SLAVE», configurado con su respectiva contraseña, y el host correspondiente. Este privilegio le permite a este usuario leer los ficheros binlogs de la instancia fuente.

CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

Sustituye los datos del usuario (nombre del usuario y host) por los que consideres.

Valida que el usuario puede acceder al servidor:

mysql -urepl -p

Verifica los privilegios:

SHOW GRANTS;

3. Haz una copia de seguridad de la instancia maestra/fuente

Voy a explicarte dos formas de hacer una copia de los datos de la instancia maestra. La primera con «mysqldump» y la segunda con «Percona XtraBackup». Dependiendo de el tamaño de la base de datos, del número de bases de datos y del número de peticiones que procese la base de datos, te interesará usar una u otra.

3.1. Copia de seguridad con «mysqldump»

mysqldump es una herramienta de línea de comandos proporcionada por MySQL que se utiliza para crear copias de seguridad de bases de datos. Genera un archivo de texto SQL que contiene todos los comandos necesarios para recrear la base de datos desde cero, incluyendo la estructura de las tablas (definiciones de tablas) y los datos contenidos en ellas (inserciones).

Para asegurarte de que tienes una copia coherente de los datos, bloquea las tablas y obtén el estado actual del registro binario.

FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

Anota el archivo del registro binario y la posición (binlog file y position) que se muestran en la lista.

Ahora ejecuta el siguiente comando para copiar los datos a un fichero:

mysqldump -u root -p --all-databases --master-data > data_dump.sql

Luego, transfiere este archivo al servidor esclavo y restáuralo:

mysql -u root -p < data_dump.sql

3.2. Copia de seguridad con Percona XtraBackup

Percona XtraBackup es una herramienta de código abierto diseñada para realizar copias de seguridad y restauraciones de bases de datos MySQL y MariaDB de manera eficiente y sin tiempos de inactividad. Desarrollada por Percona, XtraBackup permite a los administradores de bases de datos (DBAs) realizar copias de seguridad en caliente, lo que significa que las copias se pueden realizar mientras la base de datos está en funcionamiento y en uso, sin necesidad de interrumpir el servicio.

Características principales de Percona XtraBackup:

  1. Copias de seguridad en caliente: Permite realizar copias de seguridad mientras la base de datos está en uso.
  2. Rápido y eficiente: Utiliza técnicas avanzadas para minimizar el impacto en el rendimiento de la base de datos durante el proceso de copia de seguridad.
  3. Compatibilidad: Funciona con MySQL, MariaDB, y Percona Server, incluyendo versiones específicas de estos sistemas de gestión de bases de datos.
  4. Incrementales y diferenciales: Permite realizar copias de seguridad incrementales y diferenciales, reduciendo el tiempo y el espacio necesarios para las copias de seguridad.
  5. Compresión y cifrado: Soporta la compresión y el cifrado de las copias de seguridad para ahorrar espacio en disco y asegurar los datos.
  6. Restauración rápida: Ofrece mecanismos para una restauración rápida y eficiente de las bases de datos desde las copias de seguridad.
  7. Sin bloqueo: No requiere bloquear las tablas durante la copia de seguridad, lo que ayuda a mantener la disponibilidad del sistema.

Beneficios del uso de Percona XtraBackup:

  • Minimiza el tiempo de inactividad: Al no requerir que la base de datos esté inactiva durante la copia de seguridad, los servicios pueden continuar sin interrupciones.
  • Reducción del uso de recursos: Al ser eficiente en términos de CPU y disco, reduce la carga en el sistema durante las operaciones de copia de seguridad.
  • Seguridad de los datos: Con opciones de cifrado, asegura que las copias de seguridad estén protegidas contra accesos no autorizados.
  • Flexibilidad: Ofrece múltiples opciones de configuración y personalización para adaptarse a diferentes necesidades y entornos de bases de datos.

Percona XtraBackup es ampliamente utilizado en entornos de producción donde la alta disponibilidad y la integridad de los datos son críticas, y es una herramienta esencial para los DBAs que gestionan grandes volúmenes de datos y requieren soluciones de copia de seguridad y recuperación confiables y eficientes.

Para utilizar Percona Xtrabackup para realizar una réplica de una base de datos MySQL, debes seguir una serie de pasos detallados que incluyen realizar una copia de seguridad, preparar la copia de seguridad y restaurarla en el servidor de réplica.

Ejecuta el siguiente comando:

xtrabackup --backup --user=usuarioDB --password=usuarioDBPassword --target-dir=/ruta/al/directorio/del/backup

Aquí, reemplaza «/ruta/al/directorio/del/backup" por la ruta donde deseas almacenar la copia de seguridad, y «usuarioDB" y «usuarioDBPassword" por las credenciales de tu base de datos.

El backup terminará cuando veas el siguiente texto:

xtrabackup: completed OK!

Para que el backup sea consistente ejecuta el siguiente comando:

xtrabackup --prepare --target-dir=/ruta/al/directorio/del/backup

Una vez que finalice, XtraBackup te devolverá el mismo mensaje que antes

Desde la instancia maestra usamos rsync para enviar la copia a la réplica:

rsync -avpP -e ssh /ruta/al/directorio/del/backup Replica:/ruta/al/directorio/del/backup_temporal

Asegúrate que MySQL está parado en la instancia de réplica:

service mysql stop

Asegúrate de que el directorio de datos de MySQL en el esclavo/replica esté vacío o muévelo a otra ubicación antes de restaurar:

mv /ruta/a/mysql/data /ruta/a/mysql/data_bak

Movemos la copia del maestro a donde le corresponde:

xtrabackup --move-back --target-dir=/ruta/al/directorio/del/backup_temporal

Cuando se haya realizado la copia cambia el usuario y el grupo:

chown -R mysql:mysql /ruta/a/mysql/data

5. Configurar el servidor MySQL de la instancia de la réplica

Copia la configuración de la instancia maestra a la instancia de la réplica, bien copiando el fichero o su contenido.

Cuando lo tengas, entra en el fichero y modifica el valor de «server-id»:

server-id=2
enforce-gtid-consistency = 1
log_bin                         = /var/log/mysql/mysql-bin
expire_logs_days                = 7
sync_binlog                     = 1
gtid-mode = ON

Si tuvieras más réplicas, indica el identificador que correspondiese.

Ahora puedes volver a iniciar el servidor de MySQL:

service mysql start

6. Iniciar la replicación

De la instancia maestra tenemos que obtener el valor del registro del binlog en el que se encuentra (si no lo has hecho previamente), de tal forma que se lo podamos indicar a la réplica para que se sincronicen. Por tanto entra a MySQL de la instancia maestra y ejecuta la siguiente consulta:

show master status;

Nos quedaremos con los datos de los campos «File» y «Position» (verás algo como «mysql-bin.000002» y «197» respectivamente).

Ahora, en la instancia de la réplica entramos a MySQL y configuramos la replicación (reemplaza los valores según tu configuración):

change replication source to source_host='instancia_maestraip', source_user='usuario_replica', source_password='usuario_replica_password', source_log_file='valor_campo_File_maestro', source_log_pos=numero_valor_campo_Position_maestro;

Los valores de MASTER_LOG_FILE y MASTER_LOG_POS deben ser obtenidos de los logs de MySQL en el servidor maestro justo antes de hacer la copia de seguridad o durante la configuración inicial de la replicación.

Si todo ha ido bien, ya puedes iniciar la réplica:

start replica;

7. Comprobaciones

Ahora puedes validar que todo va bien en la réplica:

show replica status\G;

Verás un listado de variables como las siguientes:

*************************** 1. row ***************************
             Replica_IO_State: Waiting for source to send event
                  Source_Host: masterdb
                  Source_User: repl
                  Source_Port: 3306
                Connect_Retry: 60
              Source_Log_File: mysql-bin.000002
          Read_Source_Log_Pos: 1955663
               Relay_Log_File: replicadb-relay-bin.000002
                Relay_Log_Pos: 13046
        Relay_Source_Log_File: mysql-bin.000002
           Replica_IO_Running: Yes
          Replica_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Source_Log_Pos: 1955663
              Relay_Log_Space: 13257
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Source_SSL_Allowed: No
           Source_SSL_CA_File: 
           Source_SSL_CA_Path: 
              Source_SSL_Cert: 
            Source_SSL_Cipher: 
               Source_SSL_Key: 
        Seconds_Behind_Source: 0
Source_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Source_Server_Id: 1
                  Source_UUID: 67a9f8bd-f869-11ed-a46a-42010a010032
             Source_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
    Replica_SQL_Running_State: Replica has read all relay log; waiting for more updates
           Source_Retry_Count: 86400
                  Source_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Source_SSL_Crl: 
           Source_SSL_Crlpath: 
           Retrieved_Gtid_Set: 67a9f8bd-f869-11ed-a46a-42010a010032:619401-619424
            Executed_Gtid_Set: 67a9f8bd-f869-11ed-a46a-42010a010032:1-619424
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Source_TLS_Version: 
       Source_public_key_path: 
        Get_Source_public_key: 0
            Network_Namespace: 
1 row in set (0.00 sec)

Asegúrate de que los valores de «Slave_IO_Running» y «Slave_SQL_Running" estén en Yes y que no haya errores en la replicación.

Conclusión

Siguiendo estos pasos, deberías poder configurar con éxito una réplica de base de datos MySQL. La replicación te ayudará a mejorar la disponibilidad y escalabilidad de tus aplicaciones.

Comando screen en Linux: Guía completa y ejemplos de uso

0

Introducción

El comando screen en Linux es una herramienta poderosa que permite a los usuarios manejar múltiples sesiones de terminal dentro de una sola ventana de terminal. Esto es especialmente útil para los administradores de sistemas y desarrolladores que necesitan ejecutar múltiples tareas simultáneamente y mantenerlas funcionando incluso cuando cierran la sesión de su sistema.

Instalación

En la mayoría de las distribuciones de Linux, screen se encuentra disponible en los repositorios oficiales. Para instalarlo, se pueden usar los siguientes comandos según la distribución:

En Debian/Ubuntu y derivados:

sudo apt-get install screen

En Red Hat/CentOS y derivados:

sudo yum install screen

En Fedora:

sudo dnf install screen

Uso Básico

Iniciar una sesión de screen

Para iniciar una nueva sesión de screen, simplemente escribe:

screen

Esto abrirá una nueva ventana de terminal dentro de screen. Puedes comenzar a trabajar normalmente dentro de esta sesión.

Separar (detach) y reanudar (reattach) una sesión

Una de las características más útiles de screen es la capacidad de separar una sesión y luego reanudarla. Esto es particularmente útil si necesitas desconectarte del sistema pero deseas que tus procesos continúen ejecutándose.

Para separar una sesión activa, presiona:

Ctrl + A y luego D

Esto te devolverá a la terminal original, mientras que la sesión de screen continuará ejecutándose en segundo plano.

Para listar todas las sesiones de screen disponibles, usa:

screen -ls

Verás una lista de todas las sesiones activas, similar a esta:

There is a screen on:
    12345.pts-0.hostname    (05/19/24 12:34:56)    (Detached)
1 Socket in /run/screen/S-username.

Para reanudar una sesión específica, usa el siguiente comando seguido del ID de la sesión (en este caso, 12345):

screen -r 12345

Crear una nueva sesión con un nombre específico

Asignar nombres a tus sesiones puede facilitar su gestión, especialmente cuando tienes múltiples sesiones activas. Para crear una nueva sesión con un nombre específico, usa:

screen -S nombre_sesion

Por ejemplo:

screen -S desarrollo

Dividir la pantalla

screen también permite dividir la pantalla en múltiples regiones. Para dividir la pantalla horizontalmente, usa:

Ctrl + A y luego S

Para dividir la pantalla verticalmente, usa:

Ctrl + A y luego |

Para cambiar entre las regiones, usa:

Ctrl + A y luego Tab

Para cerrar una región, navega a ella y usa:

Ctrl + A y luego Q

Comandos de screen

Dentro de screen, puedes usar una variedad de comandos para gestionar tus sesiones y regiones. Aquí hay una lista de comandos comunes:

  • Ctrl + A seguido de C: Crear una nueva ventana.
  • Ctrl + A seguido de N o P: Navegar a la siguiente o anterior ventana.
  • Ctrl + A seguido de ": Listar todas las ventanas.
  • Ctrl + A seguido de K: Cerrar la ventana actual.

Enviar comandos a screen

Puedes enviar comandos directamente a una sesión de screen desde fuera de la misma. Por ejemplo, para enviar un comando a una sesión específica, usa:

screen -S nombre_sesion -X comando

Por ejemplo, para enviar el comando ls a una sesión llamada desarrollo, usa:

screen -S desarrollo -X stuff "ls\n"

Ejemplo de uso práctico

Supongamos que estás ejecutando un servidor en tu máquina local y necesitas mantenerlo funcionando incluso después de cerrar la terminal. Aquí hay un ejemplo de cómo podrías hacerlo usando screen:

  1. Inicia una nueva sesión de screen y nómbrala servidor: screen -S servidor
  2. Dentro de esta sesión, inicia tu servidor (por ejemplo, un servidor Python simple): python3 -m http.server
  3. Separa la sesión para mantener el servidor funcionando en segundo plano: Ctrl + A y luego D
  4. Cierra tu terminal o desconéctate del sistema. El servidor seguirá ejecutándose.
  5. Cuando necesites volver a esta sesión, reanúdala: screen -r servidor

Conclusión

El comando screen es una herramienta versátil y esencial para cualquier usuario de Linux que maneje múltiples tareas en la terminal. Con screen, puedes crear, separar y reanudar sesiones, así como dividir tu pantalla para una mayor productividad. Conocer y utilizar screen puede mejorar significativamente tu eficiencia al trabajar en un entorno de línea de comandos.

LM Studio: ejecutar modelos de IA LLM en un portátil o pc y offline para crear tu chatbot local

0

LM Studio es una aplicación que nos permite probar en local diferentes modelos LLM (Large Language Model) de una forma muy sencilla. Además de su sencillez, estos modelos no transmiten ningún tipo de información a otros servidores, con lo que puedes crear tu propia IA y configurarla como consideres.

LM Studio dispone de versiones para Windows, MacOS X y Linux.

Instalación

Lo primero que tendrás que hacer será descargar la aplicación para tu SO: https://lmstudio.ai/

En el caso de Linux, se descargará un fichero de extensión appImage, el cual hay que darle permisos de ejecución (si no los tiene ya), y con eso ya funcionará.

Descargar un modelo

Una vez instalada la aplicación, ábrela, verás la siguiente pantalla:

Vamos a descargar el modelo llamado «LLama 3 8B Instruct» (el primero que aparece en la captura) que se publicó el 19 de abril de 2024. Para ello vamos a pulsar en el icono de la lupa al lado del nombre del modelo. Nos aparecerá la siguiente pantalla:

El nombre del modelo tiene varias partes que hay que explicar:

  • Meta LLama 3, es el nombre del modelo propiamente dicho. Es un modelo LLM de Meta (Facebook), es la versión 3 del mismo, y es el más pequeño de los modelos de esta versión.
  • 8B: es el número de parámetros con los que ha sido entrenado. En este caso ocho mil millones de parámetros. Para esta versión existen los modelos 70B y 400B (que aun está siendo entrenado).
  • Instruct: se refiere al «Fine Tunning» que se le ha realizado. En este caso se ha entrenado para que ejecute las acciones que se le indiquen. Si en vez de «Insctruct» fuera «Chat«, pues habría sido entrenado para responder preguntas.

La parte importante de la captura anterior está en el listado de ficheros disponible. Como habrás observado hay cinco ficheros con un tamaño bastante diferente. Esto es debido a la «Quantización» que se les ha aplicado. Podríamos definir «Quantización» como una especie de compresión que reduce el tamaño del modelo, pero también lo hace más tonto. La «Quantización» aplicada en el modelo se puede ver en la etiqueta «Q4_K_M«, «Q5_K_M«, «Q6_K«, etc. Cuanto más alta sea la quantización mejor será el modelo, claro que también ocupará más espacio.

El tamaño del fichero es muy importante, porque este también será la cantidad de VRAM que el modelo necesita para poder funcionar. Cuanta más VRAM tenga tu tarjeta gráfica mejor.

Para elegir qué fichero descargar tienes que tener en cuenta la tarjeta gráfica que tengas, sobre todo su VRAM. Si tienes una gráfica de 8GB, posiblemente el fichero de 8GB no te funcione, y tendrás que descargar el de 6GB o el de 5GB. Tienes que entender que tu SO también consume una parte de la VRAM. Aun así, LM Studio nos da ciertas configuraciones para poder ejecutar parte del modelo en la GPU y parte en la CPU, pero se ejecutará mucho más lentamente.

Cuando hayas decidido qué fichero es el mejor para ti pulsa en el botón «Download» del fichero. Al pulsarlo se iniciará la descarga, que podrás seguir en la parte inferior de la pantalla:

Y si pulsas sobre la barra de progreso podrás ver el listado de descargas:

Probando el modelo

Cuando termine de descargar y validar el fichero descargado podrás probar el modelo.

Para ello pulsa en el icono de la burbuja de dialogo con tres puntos del menú de la izquierda:

Esta opción nos mostrará un chat como el de chatGPT. Arriba, en «Select a model to load», despliégalo y seleccionar el modelo que acabas de descargar.

Si al seleccionarlo te aparece este mensaje, simplemente pulsa en «Accept New System Prompt»:

En todo momento podrás ver la cantidad de RAM que consume el modelo y el uso de CPU que está realizando:

Abajo tienes un campo de texto para interacturar con el modelo. Escríbele algo:

Al cargar por primera vez el modelo y escribirle en español, quizás tenga alguna confusión con el idioma. Para corregirlo tenemos que indicarle cómo debe comportarse. Para ello, a la derecha tenemos un listado de opciones que nos permiten configurar diferentes aspectos del modelo:

En este caso la opción que nos interesa es el «System Prompt». Además del texto introducido, le indicamos también «Speak spanish»:

Si le volvemos a saludar ahora responderá correctamente:

Con esta pequeña configuración ya puedes interactuar con el modelo.

Modificar la personalidad del modelo

Aunque lo ideal es que pruebes por ti el modelo, puedes seguir modificando el «System Prompt», por ejemplo indicando que hable como Peppa Pig:

Dominando el comando «less» en Linux: Leyendo ficheros enormes con elegancia

0

Cuando se trata de manejar archivos grandes en sistemas Linux, la eficiencia es clave. El comando less emerge como una herramienta fundamental para leer y explorar archivos de gran tamaño con facilidad y rapidez. A diferencia de su predecesor, less permite navegar hacia adelante y hacia atrás dentro de archivos extensos de una manera fluida y sin consumir grandes cantidades de recursos del sistema. En este artículo, exploraremos a fondo el uso de less para enfrentar el desafío de leer archivos enormes con elegancia y eficiencia.

¿Qué es «less«?

less es una utilidad de línea de comandos que permite ver el contenido de archivos de texto, especialmente útil cuando se trata de archivos demasiado grandes para abrirlos en un editor de texto convencional. A diferencia de otros editores, less no carga el archivo completo en la memoria, lo que lo hace más eficiente para archivos de gran tamaño. Permite navegar hacia adelante y hacia atrás, buscar texto, y ofrece una variedad de características para facilitar la lectura de archivos extensos.

Uso básico de «less«

El uso básico de less es muy sencillo. Simplemente escribe less seguido del nombre del archivo que deseas ver:

less nombre_del_archivo

Esto abrirá el archivo en el visor de less, donde puedes desplazarte hacia arriba y hacia abajo usando las teclas de flecha o las teclas de página arriba y página abajo. Para salir de less, simplemente presiona la tecla q.

Funcionalidades avanzadas de «less«

  1. Búsqueda de texto: Puedes buscar texto dentro del archivo usando / seguido de la palabra o frase que deseas buscar. Por ejemplo, para buscar la palabra «error», escribe /error y presiona Enter. less resaltará todas las ocurrencias de «error» en el archivo.
  2. Navegación con etiquetas: less permite definir etiquetas en el archivo para facilitar la navegación. Para hacerlo, presiona la tecla m seguido de una letra para crear una etiqueta. Luego, puedes saltar a esa etiqueta en cualquier momento usando ' (Comilla simple) seguido de la letra de la etiqueta. Por ejemplo, para marcar una etiqueta con la letra «a», escribe ma, y luego para saltar a esa etiqueta, escribe 'a.
  3. Control de líneas largas: Los archivos grandes pueden contener líneas que exceden el ancho de la pantalla. less permite que estas líneas se envuelvan automáticamente o que se recorten. Puedes cambiar este comportamiento añadiendo el parámetro -S para recortar las líneas largas o --chop-long-lines para cortarlas al escribir el comando para abrir el fichero.
  4. Vista de línea y columna: Si necesitas conocer la posición exacta de una línea o columna en el archivo, less te permite habilitar una visualización en la parte inferior de la pantalla que muestra la línea y la columna actual. Para hacerlo, presiona la tecla =.
  5. Modo silencioso: Si solo estás interesado en saber si un archivo contiene texto y no necesitas ver su contenido, puedes usar less en modo silencioso con el parámetro -q. Esto evitará que less muestre el contenido del archivo y solo te informará si está vacío o no.

Conclusiones

El comando less es una herramienta poderosa y versátil para leer y explorar archivos enormes en sistemas Linux. Con su capacidad para cargar archivos grandes de manera eficiente, buscar texto, navegar con etiquetas y más, less proporciona una experiencia de lectura fluida y efectiva. Ya sea que estés trabajando con archivos de registro, archivos de datos o cualquier otro tipo de archivo de texto grande, less te ayuda a enfrentar el desafío con elegancia y eficiencia.

¡Así que adelante, domina el arte de leer archivos enormes en Linux con less y lleva tu productividad al siguiente nivel!

Dominando el comando SCP en Linux para transferir archivos: Una guía para usuarios iniciados

0

En el vasto mundo de la administración de sistemas y la transferencia de archivos, el comando «scp" (Secure Copy Protocol) emerge como una herramienta fundamental. Si eres nuevo en el mundo de la administración de sistemas o simplemente estás comenzando tu viaje en el mundo de la línea de comandos, «scp" es una herramienta que pronto se convertirá en tu mejor aliado. En este artículo, exploraremos qué es «scp«, cómo funciona y cómo puedes empezar a usarlo para transferir archivos de forma segura entre sistemas remotos.

¿Qué es SCP?

«scp» es un comando utilizado en sistemas basados en Unix y Unix-like que permite la transferencia segura de archivos entre sistemas locales y remotos a través de SSH (Secure Shell). Utiliza el mismo protocolo de autenticación y encriptación que SSH, lo que garantiza que tus datos se transfieran de manera segura a través de redes inseguras como Internet.

Sintaxis Básica de SCP

La sintaxis básica de «scp" es bastante sencilla. La estructura general del comando es la siguiente:

scp [opciones] origen destino
  • origen: Especifica la ubicación del archivo o directorio que deseas transferir. Puede ser un archivo local o remoto.
  • destino: Especifica la ubicación a la que deseas transferir el archivo o directorio. Al igual que el origen, puede ser una ubicación local o remota.

Ejemplos Prácticos

Copiar un Archivo Local a un Servidor Remoto

Para copiar un archivo desde tu sistema local a un servidor remoto, puedes usar el siguiente comando:

scp archivo.txt usuario@servidor:/ruta/destino

Esto copiará el archivo «archivo.txt" al servidor remoto especificado en la ruta «/ruta/destino«, autenticándote con el nombre de usuario usuario.

Copiar un Archivo Remoto a tu Sistema Local

Si deseas copiar un archivo desde un servidor remoto a tu sistema local, simplemente invierte el orden del origen y el destino:

scp usuario@servidor:/ruta/archivo_remoto.txt /ruta/destino_local

Esto copiará el archivo «archivo_remoto.txt" del servidor remoto a la ruta local «/ruta/destino_local«.

Opciones Útiles de SCP

scp ofrece una variedad de opciones que puedes utilizar para personalizar tu experiencia de transferencia de archivos. Algunas de las opciones más útiles incluyen:

  • -r: Permite la copia recursiva de directorios y sus contenidos.
  • -P puerto: Especifica el puerto SSH a utilizar en lugar del puerto estándar (22).
  • -v: Habilita el modo verboso, lo que proporciona una salida detallada para depurar problemas.
  • -C: Habilita la compresión durante la transferencia para mejorar el rendimiento en conexiones lentas.

Conclusiones

«scp" es una herramienta poderosa y fácil de usar para transferir archivos de forma segura entre sistemas remotos y locales. Con su integración con SSH, puedes estar seguro de que tus datos se transfieren de manera segura en todo momento. A medida que te familiarices más con la línea de comandos y la administración de sistemas, «scp» se convertirá en una herramienta indispensable en tu caja de herramientas.

Cómo copiar y restaurar un repositorio Subversion en Linux

0

Subversion es un software de control de versiones que precedió a Git, y que en su momento disponía del monopolio de este tipo de software.

Debido a que aun quedan algunos repositorios en Subversion (el mismo WordPress aun lo usa), es posible que puedas verte en la situación de disponer de código legado que aun use este CVS.

Si has llegado hasta aquí, bien porque el repositorio de Subversion te ha dado un error y quieres restaurar un backup de tu repositorio, o bien porque estás moviendo el repositorio a una nueva máquina, o simplemente porque quieres asegurarte de no perder los datos, te voy a indicar cómo realizar una copia o backup de tu repositorio de Subversion y restaurarlo donde lo necesites.

Realizar una copia de respaldo (backup) de un repositorio Subversion usando «svnadmin dump»

El comando «svnadmin dump» es el que realizará el trabajo por nosotros. creará un fichero de los datos del repositorio.

svnadmin dump [ruta_del_repositorio] > [nombre_del_fichero_de_respaldo]

Por ejemplo, para realizar un backup del repositorio localizado en la ruta /var/repos/mi_repo habría que ejecutar el siguiente comando:

svnadmin dump /var/repos/mi_repo > backup_mi_repo.dump

Restaurar una copia de respaldo (backup) desde un fichero usando «svnadmin load»

El funcionamiento del comando «svnadmin load» es igual de simple:

svnadmin load [ruta_del_repositorio] < [nombre_del_fichero_de_respaldo]

Por ejemplo, si quisieramos restaurar la copia del repositorio en el fichero anterior al nuevo repositorio que se encuentra en /var/repos/mi_nuevo_repo:

svnadmin load /var/repos/mi_nuevo_repo < backup_mi_repo.dump

Este ejemplo considera que el directorio en el que se restaura la copia es un repositorio nuevo, creado con el comando:

svnadmin create /var/repos/mi_nuevo_repo

Realizar una copia de respaldo (backup) incremental usando «svnadmin dump»

Si realizas backups frecuentes es posible que solo te interesen los cambios realizados desde la última vez que realizaste el backup, para ello la mejor forma es usar el parámetro «–incremental» y especificar la revisión desde la que comenzar (y terminar) usando «-r»:

svnadmin dump [ruta_del_repositorio] --incremental -r [revision_inicio]:[revision_final] > [nombre_del_fichero_de_respaldo]

El parámetro «-r» puede tener como valor solo la revisión de inicio, o bien usar «HEAD» para la revisión final:

svnadmin dump /var/repos/mi_repo --incremental -r 10:HEAD > backup_mi_repo_incremental.dump

Restaurando una copia de respaldo (backup) usando «svnadmin load»

No es diferente a la restauración de la copia de respaldo normal:

svnadmin load /var/repos/mi_nuevo_repo < backup_mi_repo_incremental.dump

Comprimir el fichero de la copia de respaldo

Esto se puede hacer fácilmente con «gzip»:

gzip backup_mi_repo.dump

Este comando generará un fichero con extensión «.gz» y un tamaño mucho más reducido respecto al fichero original, que fácilmente pueden ser cientos de gigabytes.

Para descomprimir el fichero hay que utilizar «gunzip»:

gunzip backup_mi_repo.dump.gz
Logo Cassandra

Cassandra 2.x y PHP para desarrolladores SQL: El modelo de datos

0

Si has trabajado con una base de datos relacional tal vez te resulte algo confuso al principio comprender el modelo de datos que usa Cassandra, intentaré ser lo más claro posible, pero si te surgen preguntas no dudes en dejarlas en los comentarios.

 

Columns

El elemento más básico de la base de datos Cassandra es la columna, se compone de tres elementos: nombre de la columna, valor y timestamp. Os muestro un ejemplo como un array:

array(
  "nombre" => "email",
  "valor" => "webmaster@localhost.com",
  "timestamp" => time(),
);

Cassandra añade el timestamp automáticamente, con lo que otra forma de representarlo es como un conjunto clave:valor:

nombre_columna:valor

Super columnas (En desuso) y Columnas Compuestas

Las super columnas son un conjunto de columnas con sus correspondientes valores:

array(
  "nombre_superColumna" => array(
    "usuario1" => array(
      "nombre" => "email",
      "valor" => "webmaster@localhost.com",
      "timestamp" => time()
    ),
    "usuario2" => array(
      "nombre" => "email",
      "valor" => "email@email.com",
      "timestamp" => time()
    ),
    "usuario3" => array(
      "nombre" => "email",
      "valor" => "otroemail@otroemail.com",
      "timestamp" => time()
    ),
  ),
)

Las super columnas tienen algunos problemas de rendimiento, sobre todo al ordenarlas. Para solucionarlo se crearon las columnas compuestas que se benefician de los comparadores compuestos, y sobretodo, de CQL 3 (Cassandra Query Language).

Familia de columnas

Es el conjunto de columnas o super columnas. Me explico:

Las column Family o  familia de columnas se puede configurar de dos maneras: como Super o como Standard. Si se elige la opción Standard, en la column family solo se podrán guardar columnas, no super columnas. En cambio si la column family está configurada como Super podrá guardar, además de las columnas, las super columnas. Esta flexibilidad permite jugar con la base de datos y adaptarla a nuestras necesidades.

Ejemplo:

array(
  "name" => "ColumnFamily",
  array( "name" => "SuperColumn",
    array( "colums" )
  ),
)

Keyspace

El keyspace es nuestra base de datos, donde alojaremos todas las columFamilies que necesitemos.

Ejemplo:

array(
  "name" => "keyspace",
  array("name" => "columnFamily",
    array(
      [...]
    ),
  ),
)

Solución: Error en NetBeans al conectar con un repositorio Subversion: handshake_failure

0

Hace unos días me encontré con este problema. Fue después de actualizar Java a su versión más actual. Al ir a realizar un commit desde NetBeans 8.1 a un repositorio Subversion me devolvió este error, y claro, no pude realizar el commit.

Después de mucho indagar en el problema encontré que el JDK 1.8 ha abandonado el cifrado RC4 por inseguro, que es el cifrado que utilizaba el servidor donde tengo el repositorio. Así que como no tengo acceso al servidor, lo más adecuado es instalar la versión 1.7 de JDK y modificar NetBeans para que utilice esa versión.

Para indicarle a NetBeans la versión de JDK que debe usar debemos buscar un archivo llamado netbeans.conf, que habitualmente estará en el siguiente directorio:

C:\Program Files\NetBeans 8.x\etc\netbeans.conf

En ese archivo hay que buscar la variable netbeans_jdkhome y añadir la ruta de la versión del JDK:

netbeans_jdkhome="C:\Program Files\Java\jdk1.7xxxxx"

En mi caso ya tenía instalada la versión 1.7 de JDK, si tu no la tuvieras tendrás que instalarla primero

Guardamos el archivo, abrimos NetBeans y volvemos a hacer ese commit que se resistía.

Logo Cassandra

Cassandra 2.x y PHP para desarrolladores SQL: Instalación

0

La base de datos No-SQL Cassandra fue creada por Facebook a causa de la necesidad de disponer de una base de datos distribuida de alto rendimiento, flexible, tolerante a fallos, escalable y que fuese capaz de procesar grandes cantidades de datos. Más tarde fue liberada bajo licencia Apache y actualmente es utilizada principalmente por empresas de internet con proyectos con un alto uso de base de datos como Twitter.

En esta serie de artículos iré desgranando la instalación, funcionamiento y desarrollo de aplicaciones en PHP con Cassandra, comparando las sentencias utilizadas para insertar, actualizar, etc de SQL con los métodos a utilizar en Cassandra. Por desgracia al ser algo completamente distinto a cualquier base de datos SQL tendré que añadir algo de teoría, pero intentaré que os resulte lo más ameno posible.

Al toro.

REQUISITOS

Para la realización de esta guía se utilizará Debian 8 Jessie como sistema operativo.

Doy por hecho que ya se dispone de un servidor web Apache con PHP instalado en la máquina de testeo que se esté usando. Las aplicaciones que se van a instalar han sido probadas en una máquina virtual Debian 8 Jessie utilizando como aplicación de virtualización VirtualBox, instalado en un host Debian 8 Jessie.

En un servidor de producción recomiendo que tenga bastante RAM (por encima de 1GB, ya veremos más adelante el porqué. En la máquina virtual que uso de testeo dispone de 700 MB y funciona bien, pero en producción no es lo recomendable).

Instalaremos la base de datos Cassandra y PHP-Driver que nos dará la extensión para PHP y una abstracción de la base de datos donde tenemos los métodos básicos para trabajar con Cassandra: insertar, actualizar, borrar, crear, etc.

PREPARANDO EL SISTEMA

Antes de empezar a instalar debemos actualizar el sistema operativo de la forma habitual:

apt-get update
apt-get upgrade

Una vez actualizado el sistema empezamos a instalar.

INSTALANDO CASSANDRA

Lo primero que necesitamos hacer para instalar Cassandra es editar los repositorios de Debian:

nano /etc/apt/sources.list

Una vez que se abra el editor añadimos las siguientes lineas:

deb http://www.apache.org/dist/cassandra/debian/ 21x main
deb-src http://www.apache.org/dist/cassandra/debian/ 21x main

Como podrás observar después de la ruta del repositorio se ha añadido «21x» esto indica el número de versión a obtener, en este caso es la versión actual de cassandra al crear este post. No se indica el número de parche, es decir, actualmente se puede descargar Cassandra 2.1.

Si dentro de unos meses sale la versión «2.2» solo tendrás que cambiar el uno por el dos.
Volvemos a consola y actualizamos los repositorios.

apt-get update

Nos dará un error en las claves gpg. Procedemos a actualizarlas con las siguientes instrucciones:

gpg --keyserver pgp.mit.edu --recv-keys F758CE318D77295D
gpg --export --armor F758CE318D77295D | sudo apt-key add -

Ojo con el guión del final, hay que añadirlo, sino dará error.

Con el paquete 0.7.5 nos da otro error de clave gpg así que también instalamos esta de la misma manera:

gpg --keyserver pgp.mit.edu --recv-keys 2B5C1B00
gpg --export --armor 2B5C1B00 | sudo apt-key add -

También necesitarás añadir la siguiente clave:

gpg --keyserver pgp.mit.edu --recv-keys 0353B12C
gpg --export --armor 0353B12C | sudo apt-key add -

Verificamos que tenemos el sistema actualizado.

apt-get update
apt-get upgrade

Actualizamos todos los paquetes que aparezcan.

Procedemos a instalar el paquete de la base de datos NoSQL Cassandra:

apt-get install cassandra

Cassandra necesita Java para funcionar. Debian 8 ya dispone de OpenJDK en su versión 7, y aunque desde los desarrolladores de Cassandra no recomiendan su uso, para los ejemplos que vamos a desarrollar nos sirve.

En producción, o si vas a desarrollar un proyecto con Cassandra tendrás que instalar la última versión de Java de Oracle.

Por último, ejecutamos el siguiente comando para construir las dependencias:

dpkg-buildpackage -uc -us

Si el sistema no te reconoce el comando es porque te falta el paquete dpkg-dev. Instálalo de la forma habitual, y vuelve a intentarlo:

apt-get install dpkg-dev

INSTALANDO DATASTAX PHP-DRIVER PARA CASSANDRA

Datastax PHP driver, es el controlador y abstracción de base de datos que utilizaremos para conectar con Cassandra desde PHP. Este controlador nos da la posibilidad de trabajar tanto con CQL (Cassandra Query Language. Parecido a SQL) y/o el protocolo binario de Cassandra.

Aunque en la página del repositorio nos indican varias formas de instalar el controlador (https://github.com/datastax/php-driver/blob/master/ext/README.md), el único que me ha funcionado correctamente ha sido el de descargar las fuentes y compilarlo. Tú puedes probar los otros métodos, pero el que te voy a indicar funciona en Debian 8.

Las siguientes instrucciones deberías ejecutarlas en el ordenador de desarrollo y no en el servidor o máquina virtual donde tengas instalada la base de datos. (A no ser que la hayas instalado en el ordenador de desarrollo).

Instalamos algunos paquetes necesarios para realizar la compilación:

apt-get install g++ make cmake libuv-dev libssl-dev libgmp-dev php5 php5-dev openssl libpcre3-dev git

Primero necesitamos descargar las fuentes desde GitHub, utiliza el directorio que prefieras:

git clone https://github.com/datastax/php-driver.git
cd php-driver
git submodule update --init
cd ext
./install.sh

Estos comandos nos ha creado un archivo llamado cassandra.so en /usr/lib/php5/20131226/ (el número del directorio puede variar en tu instalación. Revísalo).
Ahora creamos un archivo .ini para la extensión de PHP:

nano /etc/php5/mods-available/cassandra.ini

Dentro de ese archivo añadimos las siguientes líneas:

; configuration for PHP driver Cassandra
extension=cassandra.so

Guardamos.

Le indicamos a PHP que nos active la extensión

php5enmod cassandra

Y reiniciamos Apache:

/etc/init.d/apache2 restart

Ahora si ejecutamos el siguiente comando para mostrar los módulos de PHP debería aparecernos Cassandra, si no es así es que algo a fallado:

php -m

INICIANDO CASSANDRA POR PRIMERA VEZ

Ahora que ya tenemos todo instalado es el momento de arrancar Cassandra. Esto es algo muy sencillo, solo tienes que ejecutar el siguiente comando:

cassandra -f

También tienes otras maneras de iniciar Cassandra. Por ejemplo como servicio:

service cassandra start

Si al iniciar Cassandra te da un error de memoria, haz lo siguiente:

Accede a /etc/cassandra y edita el archivo cassandra-env.sh:

cd /etc/cassandra
nano cassandra-env.sh

Busca las siguientes dos líneas:

#MAX_HEAP_SIZE="4G"
#HEAP_NEWSIZE="800M"

Descomenta las dos líneas, y sustituye los valores por unos más bajos. En mi caso he bajado MAX_HEAP_SIZE a 2G y HEAP_NEWSIZE lo he dejado como está.

Estas dos líneas permiten configurar la cantidad de memoria RAM que Cassandra utilizará.

Ahora vamos a utilizar el código de ejemplo que hay en el repositorio de PHP-Driver para probar que todo funciona correctamente.

Crea un archivo PHP con el siguiente contenido:

[codesyntax lang=»php»]

<?php
$cluster   = Cassandra::cluster()                 // connects to localhost by default
                 ->build();
$keyspace  = 'system';
$session   = $cluster->connect($keyspace);        // create session, optionally scoped to a keyspace
$statement = new Cassandra\SimpleStatement(       // also supports prepared and batch statements
    'SELECT keyspace_name, columnfamily_name FROM schema_columnfamilies'
);
$future    = $session->executeAsync($statement);  // fully asynchronous and easy parallel execution
$result    = $future->get();                      // wait for the result, with an optional timeout

foreach ($result as $row) {                       // results and rows implement Iterator, Countable and ArrayAccess
    printf("The keyspace %s has a table called %s\n", $row['keyspace_name'], $row['columnfamily_name']);
}

[/codesyntax]

Este código devuelve las tablas que contiene el Keyspace «system» (Más adelante explicaré que es eso). Si te da error como este: «No hosts available for the control connection», puede ser por dos razones, o bien no está funcionando Cassandra, con lo que tendrás que iniciarla con uno de los comandos anteriores, o bien no la tienes en localhost sino en un servidor externo o máquina virtual.

Para resolverlo tendrás que sustituir las siguientes líneas:

[codesyntax lang=»php»]

<?php
$cluster   = Cassandra::cluster()                 // connects to localhost by default
                 ->build();

[/codesyntax]

Por estas otras:

[codesyntax lang=»php»]

<?php
$cluster   = Cassandra::cluster()
                 ->withContactPoints('127.0.0.1')
                 ->build();

[/codesyntax]

Sí, solo añadimos «->withContactPoints(‘127.0.0.1’)», con este método le estamos indicando la ip de nuestro servidor. En tu caso es posible que tengas que sustituir «127.0.0.1» por la ip de tu servidor o máquina virtual. Más adelante explicaré cada método, pero para verificar que está funcionando todo correctamente es suficiente.

 

Con esto finalizamos la instalación de Cassandra para que pueda ser utilizada por PHP.

Subversion y Apache, corregir el error 413 Request Entity Too Large

0

Algunas veces, cuando realizamos commits con muchos archivos, Subversion no es capaz de procesar el commit y nos devuelve el error «413 Request Entity Too Large». Este error se produce porque el commit que estás realizando tiene un tamaño superior al que tiene configurado Subversion al hacer la petición.

Para corregirlo hay que añadir los siguientes parámetros al virtual host del servidor de Subversion:

[codesyntax lang=»apache»]

LimitXMLRequestBody 0
LimitRequestBody 0

[/codesyntax]

Con estos dos parámetros eliminarás el límite impuesto por Subversion.

Si lo deseas, en vez de eliminar el límite puedes aumentarlo a 64MB,256MB, etc.

 

Ir arriba