feb 02 2011

Cambiar password de root en mysql

Category: MysqlDavid González @ 20:30

Más veces de las que queremos nos ha pasado esto. Que vayas a acceder al servicio mysql y no recuerdes la clave de root. Nuestro compañero rm-rf.es ya nos dio una solución para este problema.

Yo voy a explicar otra manera. De una forma u otra tiene que funcionar.

Iniciamos el modo FULL

 mysqld --skip-grant-tables --skip-networking

con la opción “–skip-grant-tables” conseguimos que el servicio mysql no use el sistema de privilegios y conectemos sin password.

con la opción “–skip-networking” deja de escuchar conexiones externas, por lo que sólo se podrá trabajar localmente.

Ahora vamos a entrar en la consola de mysql, como root, ya que no nos pedirá clave.

mysql -u root

Dentro de la consola de mysql, haremos uso de la base de datos “Mysql”

mysql> use mysql;

Actualizamos la contraseña de root, con un simple UPDATE

mysql> UPDATE user SET password=PASSWORD('nuevo_pass') WHERE user='root';
Query OK, 1 rows affected (0.07 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> exit

Ya sólo queda, reiniciar el servicio:

service mysqld restart

Entradas relacionadas

Etiquetas:


ago 06 2010

Recalcular cuota Mysql en Cpanel

Category: CpanelDavid González @ 9:00

Ya vimos en otro post como afectaban los ficheros de mailman  a la cuota total, hoy vamos a ver como suma las bases de datos.

En las últimas versiones de Cpanel, dentro de las muchas novedades que nos encontramos, disponemos de la posibilidad de contabilizar en el espacio total del alojamiento, el espacio ocupado por mysql.

El problema que han tenido siempre con este tema, era que las bases de datos, pertenecen al propio usuario mysql y no se contabiliza para la “quota” del usuario. La solución que han dado, es calcular el espacio ocupado por mysql y sumarlo a la cuota del usuario.

Recalcular el espacio ocupado por mysql, es una tarea automática que se hace cada 4 horas, pero si quisiéramos forzarlo debemos usar este script.

/scripts/update_db_cache

Así recalcula los valores de todos los usuario. Si queremos retocar a mano estos valores o incluso ponerlos a 0, los ficheros están en esta ruta.

root@tureceta [/root]# cd /var/cpanel/datastore/tureceta
root@tureceta [/var/cpanel/datastore/tureceta]# l
total 28K
drwxr-x---   2 root tureceta 4,0K jul 20 16:33 ./
-rw-r--r--   1 root root        7 ago  5 08:32 mysql-disk-usage
-rw-r--r--   1 root root       70 ago  5 08:32 mysql-db-usage
-rw-r--r--   1 root root        1 ago  5 08:32 mysql-db-count

El fichero “mysql-db-count” es el número de bases de datos creadas, “mysql-db-usage” muestra las bases de datos con el tamaño de cada una y “mysql-disk-usage” muestra el espacio total ocupado por todas las bases de datos del usuario.

Entradas relacionadas

Etiquetas: , ,


jul 09 2010

mysql Error code 24: Too many open files

Category: MysqlDavid González @ 22:00

Cuando mysql nos devuelve alguno de estos errores, lo más común suele ser que no tiene reservados suficientes descriptores de archivo para el servidor MySQL.

root@tureceta [/]# perror 23
OS error code  23:  File table overflow

root@tureceta> perror 24
OS error code  24:  Too many open files

root@tureceta> perror 25
OS error code  11:  Resource temporarily unavailable

El problema es que mysql está intentando mantener demasiados archivos abiertos de manera simultánea. Las opciones son, que mysql no abra tantos archivos a la vez, o incrementar el número de descriptores disponibles para mysql.

Podemos configurar mysql, para que no mantenga abiertos tantos archivos de manera simultánea. Para ello reduciremos el valor de variable de sistema table_cache (el valor por defecto es 64). Reducir el valor de max_connections también reduce el número de archivos abiertos (el valor por defecto es 100).

Otra opción es aumentar el número de descriptores de archivo disponibles para mysql, para ello se puede modificar el parámetro –open-files-limit.

Cualquiera de estos cambios, podemos hacerlos añadiendo las lineas en el fichero my.cnf y reiniciando mysql para que tengan efecto.

Entradas relacionadas

Etiquetas: ,


jul 07 2010

Mysql sensible a mayúsculas y minúsculas

Category: MysqlDavid González @ 15:30

En MySQL, las bases de datos  corresponden con directorios dentro del directorio de datos donde tenemos instalado mysql.

Del mismo modo, las tablas son fichero dentro de nuestro directorio de la base de datos.

Veamos un ejemplo:

root@turceta [/var/lib/mysql/tureceta_blog]# l

-rw-rw----   1 mysql mysql  104 mar 17 23:20 wp_users.MYD
-rw-rw----   1 mysql mysql 4,0K mar 18 00:03 wp_users.MYI
-rw-rw----   1 mysql mysql 1,9K abr 30 20:59 wp_TERMS.MYD
-rw-rw----   1 mysql mysql 8,0K may  1 00:30 wp_TERMS.MYI

Como podemos ver, tenemos una base de datos tureceta_blog y las tablas wp_users y wp_TERMS.

Por lo tanto, es la sensibilidad a mayúsculas y minúsculas del sistema operativo instalado la que determina la sensibilidad  en los nombres de las tablas y sus bases de datos, en mysql.

De este modo, en los sistemas operativos Windows, no tendremos ningún problema, pero con la mayoría de las variadades UNIX sí.

En primer lugar, lo más recomendable para evitar problemas de este tipo es utilizar siempre minúsculas, pero en caso de no poder cambiar nuestras tablas y bases de datos, vamos a ver la solución.

Podemos especificar en mysql como almacenar las tablas y bases de datos con la variable lower_case_table_names. Para ello, simplemente editamos el fichero my.cnf.

lower_case_table_names = 1

Lo valores que puede tomar esta variable son:

  • 0       Los nombres de tablas y bases de datos se almacenan en disco usando el esquema de mayúsculas y minúsculas especificado en las sentencias CREATE TABLE o CREATE DATABASE. Las comparaciones de nombres son sensibles a mayúsculas. Esto es lo predeterminado en sistemas Unix. Nótese que si se fuerza un valor 0 con –lower-case-table-names=0 en un sistema de ficheros insensible a mayúsculas y se accede a tablas MyISAM empleando distintos esquemas de mayúsculas y minúsculas para el nombre, esto puede conducir a la corrupción de los índices.
  • 1       Los nombres de tablas se almacenan en minúsculas en el disco y las comparaciones de nombre no son sensibles a mayúsculas. MySQL convierte todos los nombres de tablas a minúsculas para almacenamiento y búsquedas. En MySQL 5.0, este comportamiento también se aplica a nombres de bases de datos y alias de tablas. Este valor es el predeterminado en Windows y Mac OS X.
  • 2       Los nombres de tablas y bases de datos se almacenan en disco usando el esquema de mayúsculas y minúsculas especificado en las sentencias CREATE TABLE o CREATE DATABASE, pero MySQL las convierte a minúsculas en búsquedas. Las comparaciones de nombres no son sensibles a mayúsculas. Nota: Esto funciona solamente en sistemas de ficheros que no son sensibles a mayúsculas. Los nombres de las tablas InnoDB se almacenan en minúsculas, como cuando lower_case_table_names vale 1.

Si queréis más información, desde la web de mysql tenéis la explicación e incluso pros y contras de usar un valor u otro.

Entradas relacionadas

Etiquetas:


abr 15 2010

Gestión de usuarios en mysql

Category: MysqlDavid González @ 23:46

Vamos a ver con unos ejemplos, como gestionar los usuario en mysql. En concreto, veremos como crear, eliminar, otorgar permisos, y revocarlos.

Lo primero, será acceder a la consola mysql:

dgonzalez@David:~$ mysql -u root -p

Para otorgar permisos a un usuario ya creado, sobre una base de datos, usaremos la siguiente sintaxis:

mysql>GRANT ALL PRIVILEGES ON base_de_datos.* TO 'usuario'@'localhost'

En este caso, con el * especificamos todas las tablas de la base de datos (base_de_datos), pero se podrían especificar.

Para quitar o revocar los permisos a un usuario:

mysql> REVOKE ALL PRIVILEGES ON base_de_datos.* FROM 'usuario'@'localhost';

También podemos crear un usuario mysql y otorgarle permisos sobre una base de datos directamente:

mysql> GRANT ALL PRIVILEGES ON base_de_datos.* TO 'usuario'@'localhost' IDENTIFIED BY 'password';

Cada acción que hagamos, que tenga que ver con los privilegios, ya sea crear un usuario, modificar permisos de un usuario, etc.. será necesario realizar este comando para recargar los privilegios:

mysql> FLUSH PRIVILEGES;

Esta es una manera, pero existen otras. Mysql, guarda toda la información de los usuarios en la tabla ‘user’ de la base de datos ‘mysql’, que es de sistema. Por tanto, nos podemos manejar con esta tabla; vamos a ver unos ejemplos.

Para ver los usuario creados:

mysql> SELECT User,Host,Password FROM mysql.user;
+------------------+-----------+-------------------------------------------+
| User             | Host      | Password                                  |
+------------------+-----------+-------------------------------------------+
| root             | localhost | *A104D53E7F84512A600F950D1E8D2C5D6C45C605 |
| user_tureceta    | localhost | *A104D53E7F84512A600F950D1E8D2C5D6C45C605 |
| user2_tureceta   | localhost | *51228B5734FF3617AF47D1BCB70D3A1EA4E6BE20 |
+------------------+-----------+-------------------------------------------+

Crear un usuario:

mysql> CREATE USER 'user2_tureceta' IDENTIFIED BY 'pass_2';

Borrar un usuario:

mysql> DROP USER 'user2_tureceta'@'%';

Renombrar un usuario:

mysql> RENAME USER 'user2_tureceta'@'%' TO 'user3_tureceta'@'localhost';

Cambiar la clave de un usuario mysql:

mysql> SET PASSWORD FOR 'user3_tureceta'@'%' = PASSWORD('pass_3');

Cuando creemos un usuario de esta forma, habrá que otorgarle permisos con un GRANT.

Recordad que igual que antes, habrá que recargar los privilegios con un “flush privileges”.

Como último apunte, en todos los comandos que hemos visto la respuesta del mysql será así:

Query OK, 0 rows affected (0.00 sec)

Entradas relacionadas

Etiquetas: , ,


abr 02 2010

mysql ERROR 1062 (23000) at line XX: Duplicate entry

Category: MysqlDavid González @ 10:38

Receta ante el error de entrada duplicada de mysql.

Más de una vez a la hora de restaurar una base de datos, nos ha devuelto un error similar a este:

ERROR 1062 (23000) at line XX: Duplicate entry

Además de darnos este error, la restauración se queda en esta línea, sin terminar de volcar todo el contenido.

Para completar la restauración podemos utilizar este comando:

mysql -f --line-numbers basedatos1 < backup_basedatos1.sql

Los parámetros que estamos usando son ‘-f‘ de force para forzar la acción y ‘–line-numbers‘ para que muestre los número de lineas donde ha dado error.

Realmente, de esta forma conseguimos que a pesar de encontrar errores en la sentencia siga adelante y vuelque toda la base de datos, pero no corrige las entradas con valores duplicados

Entradas relacionadas

Etiquetas: , ,


mar 13 2010

Hacer backups y restaurar base de datos Mysql

Category: MysqlDavid González @ 16:48

Vamos a comenzar este blog con unas recetas, para algunas de las tareas más cotidianas que hacemos normalmente los administradores de sistemas. En este primer post, trataremos como hacer un backup de una base de datos para posteriormente restaurarla.

Para hacer el backup vamos a usar el comando mysqldump. Vamos a poner varios ejemplos:

- Backup de todas las bases de datos

mysqldump -u root -p --all-databases > /root/backup.sql

- Backup de una base de datos en concreto.

mysqldump -u root -p nombre_bd > /root/backup_nombre_bd.sql

- Backup de la estructura:

mysqldump -u root -p --no-data nombre_bd > /root/nombre_bd.sql

- Backup de sólo datos (inserts):

mysqldump --complete-insert --no-create-info -u root -p nombre_bd > /root/nombre_bd.sql

A veces es útil saber, que se puede poner la contraseña en la misma linea, a continuación de la opción “-p” sin espacios. Por ejemplo:

mysqldump -u root -pCLAVE --all-databases > /root/backup.sql

Por si queréis más información, en la página de mysql esta toda la información así como las opciones que tiene este comando. También podéis probar a sacar la ayuda de mysqldump con:

mysqldump --help

Para restaurar una base de datos, el proceso es el siguiente:

mysql -u root -p nombre_bd < /root/nombre_bd.sql

Entradas relacionadas

Etiquetas: , , , ,