Comandos para bases de datos MySQL

Estos son algunos comandos útiles usados por MySQL para manejar bases de datos. Es un listado básico donde no hay mucha explicación. Simplemente es una guía para comenzar a trabajar con las bases de datos Mysql.

Obtener información sobre las bases de datos Mysql :

  • show databases; – Listar todas las bases de datos.
  • connect [database]; – Conectarse a esa base de datos.
  • show tables; – Listar todas las tablas de una base de datos.
  • show table status; – Muestra informacion sobre las tablas de la base de datos.
  • describe [table]; – Muestra la estructura de una tabla de la base de datos.

Manejo de bases de datos Mysql :

  • drop table [table]; – Elimina la tabla, incluyendo registros y estructura.
  • drop table if exists [table]; – Elimina la tabla de la base de datos, pero antes verifica que exista.
  • truncate table [table]; – Elimina los registros, pero mantiene la esrtuctura de la tabla.
  • rename table [table] to [nuevo nombre de tabla]; – Renombra una tabla de la base de datos.

Algunos comandos útiles para consultas a las bases de datos Mysql:

  • select * from [table] limit [numero]; – Muestra los registros desde el 1 hasta [numero].
    Ej. select * from tabla limit 10; – Muestra los 10 primeros registros.
    select * from [table] limit [numero inicio],[numero]; – Muestra los registros desde el numero de inicio hasta numero inicio + numero.
    Ej. select * from tabla limit 11,10; – Muestra desde registro 11 hasta el 20.

Bases de datos Mysql en consola :

  • $ mysqladmin -u -p create – crear base de datos.
  • $ mysqladmin -u -p drop – borrar la base de datos.
  • $ mysqladmin -u root -p proc – listar procesos en ejecucion en el servidor de bases de datos Mysql.
  • $ mysqladmin -u root -p -i 5 status – verificar status cada 5 segundos.
  • $ mysqldump –opt -u -h -p > /path/to/file – Exportar base de datos a un archivo.
  • $ mysqldump –opt -u -h –all-databases -p > /path/to/file – Exportar TODAS las bases de datos a un archivo.
  • $ mysql -h -u -p < /path/to/file – Importar un archivo a la base de datos a mysql
  • $ mysqlcheck -o -u root -p –all-databases – Optimizar las bases de datos mysql.

Verificación y reparación de errores en las bases de datos Mysql :

  • check table [table]; – Verificar la tabla.
  • repair table [table]; – Reparar la tabla rota.

Algún otro comando útil de MySQL?? Se aceptan sugerencias¡¡¡

Activar MySQL Log Slow Queries

Comprobamos que, efectivamente, tenemos el log de querys lentas desactivado.

# mysqladmin var -uusario -ppassword |grep log_slow

| log_slow_queries | OFF

Editamos de la siguiente forma el archivo de configuración de MySQL, normalmente ubicado en /etc/my.cnf


log-slow-queries=/var/log/mysql-slow-queries.log
long_query_time = 1
log-queries-not-using-indexes

log-slow-queries, establece el lugar físico del archivo de log
long_query_time, establece a partir de que cantidad de segundos se considera lenta una query
log-queries-not-using-indexes, también logueará las queries lentas que no utilizen índices

Creamos el fichero mysq-slow-queries y ajustamos permisos


# touch /var/log/mysql-slow-queries.log
# chown mysql.root/var/log/mysql-slow-queries.log

Y reiniciamos el servidor

# /etc/init.d/mysqld stop
# /etc/init.d/mysqld start

Cuando tengamos algo de información útil en el archivo, podemos atacar directamente a las consultas más lentas, filtrandolas por la cantidad de tiempo empleado usando mysqldumpslow

# mysqldumpslow -t 10 /var/log/mysql-slow-queries.log

Fuente:  r u b e n o r t i z .es

MySQL – Recuperar password root

Me dejo anotado esto, que nunca se sabe. Mejor no tener que utilizarlo nunca.

# /etc/init.d/mysql stop
# /usr/bin/mysqld_safe –skip-grant-tables &
# mysql -u root

Accedemos dentro de la consola como root y ahora actualizamos el password


# Welcome to the MySQL monitor. Commands end with ; or \g.
# Your MySQL connection id is 24
# Server version: 5.0.48 Source distribution
# Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
# mysql> use mysql;


# mysql> update user set password=PASSWORD("nuestroNUEVOpassword")
where User='root';
# mysql> flush privileges;
# mysql> quit

Paramos e iniciamos el servicio y nos logueamos ya con el nuevo password.

# /etc/init.d/mysqld stop

STOPPING server from pid file /var/run/mysqld/mysqld.pid
080819 15:34:49 mysqld ended

# /etc/init.d/mysqld start

Script al estilo Top para MySQL

mysql

Aunque hay herramientas enfocadas para el seguimiento procesos en MySQL, algunas de pago, otras gratis, pues para mi es mas fácil crear un pequeño script en bash que las mostrara estilo «top».

#!/bin/bash
for i in `seq 1 100000`;
do
tput clear
date
echo "____________________________________________________________________________________"
mysqladmin -uUSUARIO --port=3306 --host=localhost -pPASSWORD processlist | awk '{ if ($12 &gt; 0) print $0}' | grep -v binlog | cut -d \| -f2,5,6,7,8,9
echo " "
uptime
mysqladmin -uUSUARIO --port=3306 --host=localhost -pPASSWORD processlist | wc -l
sleep 5
done

Rapido y sencillo, suficiente para ver los queries que se quedan atascados en MySQL.

Script para optimizar tablas InnoDB en MySQL

Cuando utilizamos MySQL es común optimizar tablas con muchos registros con cierta periodicidad, esto para solventar problemas de fragmentación, entre otros. La verdad esta es una de las cosas del modelo de PostgreSQL que echo en falta, quizás no es tan «amigable» pero todo queda claro desde el inicio.

En PostgreSQL hay un proceso de aspiradora (vacuum) que va eliminando periódicamente registros inutilizados en tablas, su configuración, pan nuestro de cada día para un admin de BBDD que debe ajustarlo con frecuencia.

Bueno…. Volviendo a MySQL, si necesita optimizar tablas InnoDB, lo mejor que puede utilizar son ALTER nulos, estas son instrucciones DDL de tipo ALTER sin parámetros que permiten seguir trabajando con las BBDD, porque realiza copias temporales en disco. La cuestión es que esta herramienta «reconstruye» la tabla y elimina, entre otros, los problemas de fragmentación.

Aquí les dejo un script para optimizar de «un sólo golpe» varias tablas InnoDB:

#!/bin/bash
 
if [ $# -lt 2 ]; then
        echo "You must specify database host"
        echo "Eg. script.sh MY_DATABSE 192.168.10.1"
        exit
fi
 
db="$1"
host="$2"
user="root"
declare -a tables=(Table1 Table2 Table3)
 
stty -echo
read -p "Enter MySQL's Admin password: " password
stty echo
 
for table in ${tables[@]}; do
        echo $table &&
        time mysql -u $user --password=$password -h $host $db -e "ALTER TABLE $table ENGINE=INNODB"
done

Básicamente optimizamos las tablas especificadas (en un arreglo) e imprimimos el tiempo que toma cada instrucción (time).

Si tiene la certeza de que todas las tablas de una BD son InnoDB y quiere optimizarlas todas aún más rápido, puede hacerlo valiéndose del comando «show tables»…

#!/bin/bash
 
if [ $# -lt 2 ]; then
        echo "You must specify database host"
        echo "Eg. script.sh MY_DATABSE 192.168.10.1"
        exit
fi
 
db="$1"
host="$2"
user="root"
 
stty -echo
read -p "Enter MySQL's Admin password: " password
stty echo
 
mysql -u $user --password=$password -h $host --batch --skip-column-names $db -e "SHOW TABLES" |
while read table; do
        echo $table &&
        time mysql -u $user --password=$password -h $host $db -e "ALTER TABLE $table ENGINE=INNODB"
done

La única diferencia es que las tablas ya no son especificadas a través de un arreglo (que recomiendo para BBDD grandes, donde optimizar todas las tablas podría demorar toda la vida), sino que se toman directamente del comando «SHOW TABLES» para una BD especificada.