15 usos prácticos del comando mysqladmin de MySQL

Aqui os dejo 15 usos prácticos del comando de MySQL tan usado por los syadmins, mysqladmin

mysql
MySQL

1. ¿Cómo cambiar la contraseña del usuario root en MySQL

# mysqladmin -u root -pxxx password ‘yyy’
# mysql -u root -pyyy
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 2
Server version: 5.0.67 MySQL Community Server (GPL)
Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the buffer.

2. ¿Cómo chequear si el servidor MySQL está corriendo?

# mysqladmin -u root -p ping
Enter password:
mysqld is alive

3. ¿Cómo saber que versión de MySQL tengo?

# mysqladmin -u root -pxxx version
mysqladmin  Ver 8.42 Distrib 5.0.67 on i686
Copyright (C) 2000-2006 MySQL AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license
Server version          5.0.67
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/lib/mysql/mysql.sock
Uptime:                 100 days 0 hours 0 min 0 sec
Threads: 1 Questions: 241986 Slow queries: 0 Opens: 11097
Flush tables: 2 Open tables: 32 Queries per second avg: 1.23

4. ¿Cuál es el estado actual del servidor MySQL?

# mysqladmin -u root -pxxx status
Uptime: 8640000
Threads: 1 Questions: 241986 Slow queries: 0 Opens: 11097
Flush tables: 2 Open tables: 32 Queries per second avg: 1.23

El comando status muestra la siguiente información:

  • Uptime: segundos desde los que se inició el servidor
  • Threads: numero total de clientes conectados
  • Questions: número total de consultas que el servidor ha ejecutado desde desde su inicio.
  • Slow queries: número total de consulta que el servidor ha ejecutado y que tienen un tiempo mayor de ejecución a la variable long_query_time.
  • Opens: número total de tablas abiertas por el servidor.
  • Flush tables: cuantas tablas han sido «volcadas».
  • Open tables: número total de tablas abiertas en la base de datos.

5. ¿Cómo ver las variables de estado de MySQL y sus valores actuales?

# mysqladmin -u root -pxxx extended-status
+———————————–+———–+
| Variable_name                     | Value     |
+———————————–+———–+
| Aborted_clients                   | 579 |

6. ¿Cómo ver las variables del sistema de MySQL y sus valores?

# mysqladmin  -u root -pxxx variables
+———————————+———————————+
| Variable_name                   | Value                           |
+———————————+———————————+
| auto_increment_increment        | 1 |

7. ¿Cómo ver todos los procesos/consultas ejecutándose en la base de datos?

# mysqladmin -u root -pxxx processlist
+—-+——+———–+—-+———+——+——-+——————+
| Id | User | Host      | db | Command | Time | State | Info             |
+—-+——+———–+—-+———+——+——-+——————+
| 20 | root | localhost |    | Sleep   | 36 |       |                  |
| 23 | root | localhost |    | Query   | 0 |       | show processlist |
+—-+——+———–+—-+———+——+——-+——————+

También puedes correr este comando automáticamente cada un segundo de la siguiente forma:

# mysqladmin -u root -pxxx -i 1 processlist
+—-+——+———–+—-+———+——+——-+——————+
| Id | User | Host      | db | Command | Time | State | Info             |
+—-+——+———–+—-+———+——+——-+——————+
| 20 | root | localhost |    | Sleep   | 36 |       |                  |
| 23 | root | localhost |    | Query   | 0 |       | show processlist |
+—-+——+———–+—-+———+——+——-+——————++—-+——+———–+—-+———+——+——-+——————+
| Id | User | Host      | db | Command | Time | State | Info             |
+—-+——+———–+—-+———+——+——-+——————+
| 24 | root | localhost |    | Query   | 0 |       | show processlist |
+—-+——+———–+—-+———+——+——-+——————+

8. ¿Cómo crear una base de datos MySQL?

# mysqladmin -u root -pxxx create basedeprueba

9. ¿Cómo eliminar una base de datos MySQL?

# mysqladmin -u root -pxxx drop basedeprueba
Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.Do you really want to drop the ‘basedeprueba’ database [y/N] y
Database “basedeprueba” dropped

10. ¿Cómo recargar/refrescar los privilegios de la tabla de permisos?

# mysqladmin -u root -pxxx reload;

El comando refresh hará un flush de todas las tablas y cerrará/abrirá los archivos de log.

# mysqladmin -u root -pxxx refresh;

11. ¿Cuál es el método seguro de detener el servidor MySQL?

# mysqladmin -u root -pxxx shutdown

12. Listado de todos los comandos flush

# mysqladmin -u root -pxxx flush-hosts
# mysqladmin -u root -pxxx flush-logs
# mysqladmin -u root -pxxx flush-privileges
# mysqladmin -u root -pxxx flush-status
# mysqladmin -u root -pxxx flush-tables
# mysqladmin -u root -pxxx flush-threads

13. ¿Cómo matar un proceso pendiente de un cliente MySQL?
Previo a este comando es necesario identificar el thread a eliminar ejecutando el comando processlist de mysqladmin.

# mysqladmin -u root -pxxx kill 20

14. ¿Cómo iniciar y parar la replicación en un servidor esclavo en MySQL ?

# mysqladmin  -u root -pxxx stop-slave
Slave stopped# mysqladmin  -u root -pxxx start-slave

15. ¿Cómo combinar múltiples comandos de mysqladmin juntos?

# mysqladmin  -u root -pxxx process status version
+—-+——+———–+—-+———+——+——-+——————+
| Id | User | Host      | db | Command | Time | State | Info             |
+—-+——+———–+—-+———+——+——-+——————+
| 43 | root | localhost |    | Query   | 0 |       | show processlist |
+—-+——+———–+—-+———+——+——-+——————+Uptime: 3135
Threads: 1 Questions: 50 Slow queries: 1 Opens: 10 Flush tables: 2
Open tables: 0 Queries per second avg: 0.5
mysqladmin  Ver 8.42 Distrib 5.0.67 on i686
Copyright (C) 2000-2006 MySQL AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license

Server version          5.0.67
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/lib/mysql/mysql.sock
Uptime:                 52 min 15 sec

Vía: The Geek Stuff

<a title=»MySQL» href=»https://blogofsysadmins.com/category/mysql»><strong>MySQL</strong></a>

Convertir base de datos latin1 a UTF-8 en MySQL

Desde la version de  MySQl 4.1 que el charset por default es UTF-8. Si tienen una base de datos antigua con datos en latin1 y desean actualizar, deben de hacer lo siguiente:

  1. Para no perder los datos exportamos la informacion de la base de datos en latin1 a un archivo plano con el comando mysqldump:
    :~$ mysqldump -u usuario -p base_de_datos –default-character-set=latin1 &gt; backuplatin1.sql
  2. Entrando a la consola de MySQl (o mariadb) o administracion via web con PhpMyAdmin debemos de crear una nueva base de datos con el set de caracteres UTF8:
    :~$ mysql -u mi_usuario -p
    mysql&gt; CREATE DATABASE nueva_db CHARACTER SET utf8 COLLATE utf8_general_ci;
  3. Ahora procedemos a convertir el set de caracteres del archivo backuplatin1.sql. Para luego con el archivo resultante cambiamos todas las referencias al juego de caracteres latin1:
    :~$ iconv -f ISO-8859-1 -t UTF-8 backup.sql &gt; backup_utf8.sql
    :~$ perl -pi -w -e 's/CHARSET=latin1/CHARSET=utf8/g;' backup_utf8.sql
  4. Ahora con el backup o dump convertido al charset utf8 lo importamos a la nueva base de datos recien creada
    :~$ mysql -u mi_usuario -p  db_destino  –default-character-set=utf8 &lt; backup_utf8.sql

Script para optimizar las tablas fragmentadas en MySQL

Bueno otro buen script a la huchaca… esta escrito en bash aparte de ser utilisisimo porque chequea las tablas fragmentadas y tambien chequea todas las bbdds en busca de tablas MyISAM o INNODB y las optimiza.

#!/bin/bash

VERSION="0.7.2"
log="$PWD/mysql_error_log.txt"

echo "MySQL fragmentation finder (and fixer) v$VERSION, written by Phil Dufault ( http://www.dufault.info/ )"

showHelp() {
echo -e "\tThis script only repairs MyISAM and InnoDB tables"
echo -e "\t--help or -h\t\tthis menu"
echo -e "\t--user username\tspecify mysql username to use\n\t\t\tusing this flag means the script will ask for a password during runtime, unless you supply..."
echo -e "\t--password \"yourpassword\""
echo -e "\t--host hostname\tspecify mysql hostname to use, be it local (default) or remote"
}

#s parse arguments
while [[ $1 == -* ]]; do
case "$1" in
--help|-h) showHelp; exit 0;;
--user) mysqlUser="$2"; shift 2;;
--password) mysqlPass="$2"; shift 2;;
--host) mysqlHost="$2"; shift 2;;
--) shift; break;;
esac
done

# prevent overwriting the commandline args with the ones in .my.cnf, and check that .my.cnf exists
if [[ ! $mysqlUser && -f "$HOME/.my.cnf" ]]; then
if grep "user=" "$HOME/.my.cnf" >/dev/null 2>&1; then
if grep "pass=" "$HOME/.my.cnf" >/dev/null 2>&1; then
mysqlUser=$(grep user= < "$HOME/.my.cnf" | awk -F\" '{print $2}'); mysqlPass=$(grep pass= < "$HOME/.my.cnf" | awk -F\" '{print $2}'); if grep "host=" "$HOME/.my.cnf" >/dev/null 2>&1; then
mysqlHost=$(grep host= < "$HOME/.my.cnf" | awk -F\" '{print $2}'); fi else echo "Found no pass line in your .my.cnf,, fix this or specify with --password" fi else echo "Found no user line in your .my.cnf, fix this or specify with --user" exit 1; fi fi # set localhost if no host is set anywhere else if [[ ! $mysqlHost ]]; then mysqlHost="127.0.0.1" fi # error out if [[ ! $mysqlUser ]]; then echo "Authentication information not found as arguments, nor in $HOME/.my.cnf" echo showHelp exit 1 fi if [[ ! $mysqlPass ]]; then echo -n "Enter your MySQL password: " read -s mysqlPass fi # Test connecting to the database: mysql -u"$mysqlUser" -p"$mysqlPass" -h"$mysqlHost" --skip-column-names --batch -e "show status" >/dev/null 2>&1
if [[ $? -gt 0 ]]; then
echo "An error occured, check $log for more information.";
exit 1;
fi

# Retrieve the listing of databases:
databases=( $(mysql -u"$mysqlUser" -p"$mysqlPass" -h"$mysqlHost" --skip-column-names --batch -e "show databases;" 2>"$log") );
if [[ $? -gt 0 ]]; then
echo "An error occured, check $log for more information."
exit 1;
fi

echo -e "Found ${#databases[@]} databases";
for i in ${databases[@]}; do
# get a list of all of the tables, grep for MyISAM or InnoDB, and then sort out the fragmented tables with awk
fragmented=( $(mysql -u"$mysqlUser" -p"$mysqlPass" -h"$mysqlHost" --skip-column-names --batch -e "SHOW TABLE STATUS FROM $i;" 2>"$log" | awk '{print $1,$2,$10}' | egrep "MyISAM|InnoDB" | awk '$3 > 0' | awk '{print $1}') );
if [[ $? -gt 0 ]]; then
echo "An error occured, check $log for more information."
exit 1;
fi
tput sc
echo -n "Checking $i ... ";
if [[ ${#fragmented[@]} -gt 0 ]]; then
if [[ ${#fragmented[@]} -gt 0 ]]; then
if [[ ${#fragmented[@]} -gt 1 ]]; then
echo "found ${#fragmented[@]} fragmented tables."
else
echo "found ${#fragmented[@]} fragmented table."
fi
fi
for table in ${fragmented[@]}; do
let fraggedTables=$fraggedTables+1;
echo -ne "\tOptimizing $table ... ";
mysql -u"$mysqlUser" -p"$mysqlPass" -h"$mysqlHost" -D "$i" --skip-column-names --batch -e "optimize table $table" 2>"$log" >/dev/null
if [[ $? -gt 0 ]]; then
echo "An error occured, check $log for more information."
exit 1;
fi
echo done
done
else
tput rc
tput el
fi
unset fragmented
done

# footer message
if [[ ! $fraggedTables -gt 0 ]]; then
echo "No tables were fragmented, so no optimizing was done.";
else
if [[ $fraggedTables -gt 1 ]]; then
echo "$fraggedTables tables were fragmented, and were optimized.";
else
echo "$fraggedTables table was fragmented, and was optimized.";
fi
fi

if [[ ! -s $log ]]; then
rm -f "$log"
fi

unset fraggedTables

Link | http://www.dufault.info/blog/a-script-to-optimize-fragmented-tables-in-mysql/

Cambiar la password de root de MySQL

Muchas veces cuando trabajamos con MySQL perdemos la contraseña del root lo cual es un gran problemas si solo tenemos una cuenta con todos los privilegios para acceder a MySQL, como nuestro manejo de mysql es poco, terminamos por eliminar el motor de bases de datos y empezar el trabajo de nuevo esto es una gran perdida de tiempo y hacer de esfuerzo por eso le mostrare una forma para poder cambiar la password del root en MySQL lo primero que debemos hacer es detener el servicio Mysql

#> /etc/rc.d/init.d/mysqld stop

Una vez el servicio este abajo escribimos las siguientes líneas:

#> mysqld_safe –skip-grant-tables –skip-networking

Cuando abrimos el mysqld_safe es como si trabajásemos en el modo a prueba de fallos de Windows

–skip-grant-tables esta opción causa que el servidor no use el sistema de privilegios lo que le da acceso ilimitado a todas las bases de datos a todos los usuarios de la base de datos.

–skip-networking deja de escuchar (LISTEN) conexiones TCP/IP provenientes de la red, es decir MySQL trabajaría en un ambiente totalmente local

Ahora nos logeamos como root pero no damos un password ya que en el modo abierto nos permite obviar la contraseña del usuario root hasta que terminemos de asignar una nueva password :

#>mysql -u root

Una vez dentro de mysql usamos la base de datos mysql:

mysql> use mysql;

Cambiamos la contraseña de ‘root’ agregando la siguiente línea:

mysql> UPDATE user SET password=PASSWORD(‘nuevo_pass’) WHERE user=’root’;

Si lo hacemos bien veremos algo como esto:

Query OK, 1 rows affected (0.07 sec)
Rows matched: 1 Changed: 1 Warnings: 0

Reiniciamos el servicio y listo

#> service mysqld restart

La siguiente vez que entre al monitor (mysql -u root -p) usa la nueva clave o contraseña.

Reparar todas las tablas de todas las bases de datos de MySQL en Plesk

Para reparar todas las tablas de todas las bases de datos de MySQL en Plesk (Linux) tenemos que poner en una sola linea este pedazo churro:

for database in $(mysql --skip-column-names -uadmin -p`cat /etc/psa/.psa.shadow` -e
"show databases" ); do echo "optmizing tables from $database";
for table in $(mysql --skip-column-names -uadmin -p`cat /etc/psa/.psa.shadow` -e
"show tables" $database ); do echo "-> $table " ;
mysql -uadmin -p`cat /etc/psa/.psa.shadow` -e "OPTIMIZE TABLE $table" $database ;
done ; done ;