Snippets — Base de datos
MySQL
Backup rápido
Restaurar un backup
Matar queries lentas que están colgadas
Exportar solo la estructura (sin datos)
Docker + MySQL
Entrar a MySQL dentro de un contenedor
Hacer backup desde afuera del contenedor
Restaurar dentro del contenedor
Cambiar el group_concat_max_len para evitar truncamientos
Porque
Esto es necesario porque el valor por defecto de group_concat_max_len es bastante bajo (1024 bytes) y si una consulta devuelve un resultado que supera ese límite, se trunca y no se obtiene toda la información. Cambiarlo a un valor alto asegura que no haya truncamientos en los resultados de consultas que usan GROUP_CONCAT.
Cambiar el group_concat_max_len para evitar truncamientos en DO
import axios from "axios";
const doTocken = '....';
const idDb = '....';
const url = 'https://api.digitalocean.com';
const instance = axios.create({
baseURL: url,
headers: {
Authorization: `Bearer ${doTocken}`
}
})
const getConfig = async () => {
const { data } = await instance.get(`/v2/databases/${idDb}/config`);
console.log(data);
}
getConfig();
const changedConfig = async () => {
const { data } = await instance.patch(`/v2/databases/${idDb}/config`, {
config: {group_concat_max_len: 1000000000,
default_time_zone: "America/Argentina/Buenos_Aires"
}
});
console.log(data);
}
changedConfig();
Tienes que poner el token de DO y el id de la base de datos que querés modificar. Esto va a cambiar el group_concat_max_len a un valor muy alto para evitar truncamientos en los resultados de consultas que usan GROUP_CONCAT. También aprovecho para cambiar la zona horaria por si las fechas que se guardan en la base de datos no están en UTC.
Porque
DO no deja cambiar esto desde su panel solamente api
Pasar .dbt a MySQL
Los archivos .dbt son bases de datos tipo SQLite. Para pasarlos a MySQL, se puede usar la herramienta dbf2mysql:
#!/bin/bash
DB_HOST="192.168.0.202"
DB_USER="root"
DB_PASS="genus2041"
DB_NAME="test"
DBF_DIR="/home/pablo/Descargas/datos_fiol/DATA"
for dbf_file in "$DBF_DIR"/*.dbf; do
# Obtener el nombre del archivo sin la extensión
table_name=$(basename "$dbf_file" .dbf)
# Importar el archivo DBF a MySQL con el nombre de la tabla correspondiente
dbf2mysql -h "$DB_HOST" -U "$DB_USER" -P "$DB_PASS" -d "$DB_NAME" -c -t "$table_name" "$dbf_file"
echo "Importado $dbf_file como $table_name"
done
Se tiene que cambiar las variables de conexión y la ruta a los archivos .dbf antes de correr el script. Esto va a importar cada archivo .dbf como una tabla con el mismo nombre en la base de datos MySQL.