mysql

Generar backup de base de datos usando MySQLDump

Saturday, August 14th, 2010

mysqlMySQL nos premite generar backups de determinada forma, una que ya comentamos hace tiempo, es usando Mysqlhotcopy, la otra manera tradicional es usando Mysqldump. La manera de realizar el backup es bastante fácil, y dependiendo del tamaño de tu base de datos, será rápida o lenta (si tienes una bd de 5 GB, demorará mucho, si tienes una de 20 MB, será super rápido):

mysqldump -u root -p nombre_de_base_de_datos > fichero.sql

Asegúrate de cambiar los datos de nombre_de_base_de_datos y fichero.sql por los deseados. Esto te permitirá generar un archivo .sql listo para restaurar, cosa que veremos otro día. Mysqldump permite muchas otras opciones, como por ejemplo la que vimos hace tiempo en la entrada Respaldo completo de servidor de Bases de Datos MySQL al usar la opción –all-databases. Por más información correr:

mysqldump --help

/usr/share/mysql/english/errmsg.sys had only 480 error messages

Monday, May 31st, 2010

Hoy al actualizar el sistema con yum, donde uso los repos de Jason Litka, me encontré luego del upgrade que MySQL no funcionaba como esperaba, daba un fallo al iniciar el servicip:

100531  8:21:27 [ERROR] Error message file ‘/usr/share/mysql/english/errmsg.sys’ had only 480 error messages,
but it should contain at least 481 error messages.
Check that the above file is the right version for this program!
100531  8:21:27 [ERROR] Aborting

La solución la encontré en la misma web de Jason, y es sencilla, descargamos paquete, descomprimimos y reemplazamos el archivo de idiomas que da problmeas:

cp /usr/share/mysql/english/errmsg.sys /usr/share/mysql/english/errmsg.sys.backup
wget http://downloads.mysql.com/archives/mysql-5.0/mysql-5.0.86.tar.gz
tar -xzvf http://downloads.mysql.com/archives/mysql-5.0/mysql-5.0.86.tar.gz
cp mysql-5.0.86/sql/share/english/errmsg.sys /usr/share/mysql/english/errmsg.sys
mysql_install_db
service mysqld start
chkconfig mysqld on

Espero que sirva a alguien.

Actualizar MySQL 5.0 a MySQL 5.1.x

Monday, May 3rd, 2010

Actualizar de MySQL 5.x a MySQL 5.1 no es nada difícil, pero supone un trabajo extra cuando nos encontramos en alguna distribución como CentOS o RHEL donde los paquetes nativos están por debajo de las versiones requeridas, por que simplemente se enfocan en la estabilidad.

Aclaro que no he probado este procedimiento para actualizar, sólo para instalar desde cero, pero de igual manera debería funcionar, cualquier corrección o tip es bienvenido.

El procedimiento es sencillo, tanto para instalar por primera vez MySQL 5.1 como para actualizar:

1.- Backup de nuestras bases de datos mediante mysqldump o mysqlhotcopy en caso de que algo salga mal.

2.- Descargamos el repo de Remi Collet para nuestra distro:

cd /etc/yum.repos.d
wget http://rpms.famillecollet.com/enterprise/remi.repo

3.- Corremos el update (o bien reemplazamos por install para instalar por primera vez):

yum --enable remi update mysql-server

4.- Reiniciamos el servicio:

service mysqld restart

Starting MySQL.Manager of pid-file quit without updating fi [FAILED]

Monday, April 26th, 2010

Muchas veces al reiniciar el servidor MySQL, vamos a encontrarnos con este molesto error: “Starting MySQL.Manager of pid-file quit without updating fi[FAILED]“. El problema, en general se soluciona de forma rápida, ya que en la mayoria de los casos basta con matar los procesos activos e iniciar nuevamente el server SQL:

ps -aux | grep mysql
kill número.de.proceso
service mysql start

2.- Si eso no funciona, intenta rebootear tu servidor.

shutdown now -r

3.- Si eso tampoco funciona, te sugiero reparar las tablas de mysql de esta manera e iniciar el servicio:

cd /var/lib/mysql/mysql
myisamchk -r *.MYI
service mysql start

4.- Si aún sigues cagado, no quedará otra que intentar ver los logs del server.

Convertir tablas MyISAM a NDBCluster

Thursday, March 11th, 2010

mysql myisamHace unos días estuvimos trabajando en un clúster MySQL basado en NDB, la tecnología de clustering de MySQL. El hecho es que nos encontramos con que para que la base de datos funcionara de manera óptima al importarla desde un server MySQL común, debes primero transformar el motor desde myisam a ndbcluster.

Puedes hacerlo de dos formas, la primera desde el shell mysql:

ALTER TABLE nombredetabla ENGINE=NDBCLUSTER;

O bien directamente sobre el archivo .sql exportado de MyISAM reemplazando todo:

replace MyISAM ndbcluster -- archivo.sql

MySQL: Error No. 1033 Incorrect information in file: ‘filename’

Wednesday, January 20th, 2010

mysql innodbSi tienes el siguiente error al trabajar con alguna tabla InnoDB, no te alarmes y pienses que tu base de datos está destruida por completo, puede que si, quien sabe, pero primero vamos a comentar posibles  soluciones:

MySQL: Error No. 1033 Incorrect information in file: ‘filename’

1.- Sucede algunas veces que la partición /tmp cambia de permisos y esto evita que ciertos demonios como MySQL puedan hacer updates o inserts debidamente al no poder usar la partición temporal del sistema. Intentemos asignar permisos y probar nuevamente:

chmod 0777 /tmp

2.- Muchas configuraciones de my.cnf, el archivo de config de MySQL presentan una línea que impide el correcto uso de tablas InnoDB. Fíjate que exista una línea como esta:

skip-innodb

Remueves esa línea, guardas el archivo y luego reinicias MySQL.

3.- Tablas corruptas, mucha suerte pues no es lo mismo que con MyISAM, sugiero leer estos enlaces:

http://code.google.com/p/innodb-tools/

http://www.softwareprojects.com/resources/programming/t-how-to-fix-mysql-database-myisam-innodb-1634.html

http://www.mysqlperformanceblog.com/2008/07/04/recovering-innodb-table-corruption/

Resetear password root de MySQL

Wednesday, March 18th, 2009

Seguramente alguna vez por descuido hayas perdido información sobre el password de root de un servidor MySQL, si es el caso, este post te ayudará a resetearla en un par de simples pasos que describo a continuación. Este tutorial se aplica bajo sistemas RHEL y derivados (CentOS, Fedora, etc).

Resetear root password de MySQL:

# Primero detenemos el servidor MySQL:
/etc/init.d/mysqld stop

# Luego iniciamos sin tener en cuenta privilegios de usuario:
/usr/bin/mysqld_safe --skip-grant-tables

# Conectamos con el cliente MySQL:
mysql -u root

# Reseteamos el password a que más nos guste.
# reemplaza “nuevopassword” por el tuyo.
UPDATE mysql.user SET Password=PASSWORD('nuevopassword') WHERE User='root';
flush privileges;
quit;

# Reiniciamos servidor MySQL:
/etc/init.d/mysqld restart