Mysqlhotcopy

Para realizar backups de bases de datos MySQL, se suele usar el comando mysqldump. Este comando, se encarga de generar las consultas necesarias para recrear toda la estructura de tablas y su contenido, a base de sentencias SQL. Sin embargo, este comando, puede resultar muy lento, para bases de datos grandes.

Si se quiere hacer un backup de una base de datos con tablas MyISAM, desde la propia documentación oficial de MySQL se insta a usar mysqlhotcopy en lugar de mysqldump:

«If you are doing a backup on the server and your tables all are MyISAM tables, consider using the mysqlhotcopy instead because it can accomplish faster backups and faster restores»
Fuente: aquí

Continuar leyendo «Mysqlhotcopy»

Mysql resetear password de root

Espero no tener que encontrarme nunca en esta situación, pero por si las moscas, me apunto el proceso para resetear el password de root para un mysql sobre linux, cuando no se dispone de la contraseña de root. Los pasos, los he sacado de aquí y de aquí.

  1. Detener el servicio mysql: killall mysqld
  2. Ejecutar mysql en modo seguro, sin cargar las tablas de usuarios: mysqld_safe –skip-grant-tables
  3. Conectar con el mysql que acabamos de arrancar: mysql –user=root mysql
  4. Ejecutar el cambio de contraseña (en este paso, he usado un password fácil como paso intermedio): update user set Password=PASSWORD(‘new-password’) where user=’root’;
  5. Recargar las credenciales y salir: flush privileges; exit;
  6. Detener el servicio mysql: /etc/init.d/mysqld stop
  7. Iniciarlo: /etc/init.d/mysqld start
  8. Comprobar que podemos acceder con el password indicado en el punto 4: mysql -u root -p
  9. Salir del mysql: exit;
  10. Ejecutar mysqladmin para cambiar el password definitivamente: mysqladmin -u root password ‘NEWPASSWORD’ -p
  11. Comprobar de nuevo que el acceo con el nuevo password es correcto: mysql -u root -p
  12. Apuntar el password en un lugar seguro 😀

 

MySQL usuario de lectura

Resulta que crear un usuario de mysql con acceso desde hosts remotos no es tan intuitivo como podría pensarse. Durante la creación de un usuario en mysql, ya sea con el comando apropiado o mediante utilidades como «mysql_setpermission», se debe indicar si el usuario mysql podrá conectar con el motor SQL únicamente desde el localhost, o si por el contrario, tendrá acceso desde un host remoto específico o desde cualquier host (%).

Sin embargo, para que el acceso remoto funcione, deberá crearse primero el usuario localhost y posteriormente el mismo usuario para %:

mysql> create user ‘readonly’@’localhost’ identified by ‘mipassword’;
Query OK, 0 rows affected (0.00 sec)

mysql> grant select on *.* to ‘readonly’@’localhost’;
Query OK, 0 rows affected (0.00 sec)

mysql> create user ‘readonly’@’%’ identified by ‘mipassword’;
Query OK, 0 rows affected (0.00 sec)

mysql> grant select on *.* to ‘readonly’@’%’;
Query OK, 0 rows affected (0.00 sec)

 

Esto se puede leer en la documentación oficial de MySQL:

«It is necessary to have both accounts for monty to be able to connect from anywhere as monty

Con estas instrucciones se habrá creado un usuario llamado «readonly» con únicamente permisos de lectura (selects) contra todas las bases de datos existentes, tanto desde el host local como desde cualquier otro host remoto.

Límite de conexiones en MySQL

MySQL tiene un límite de conexiones simultáneas que acepta, que por defecto en las versiones actuales está en 150. En realidad, 151, puesto que esta 1 está reservada para el administrador poder conectar en local y ver qué está pasando.

Podemos consultar el límite actual, tal y como se muestra en el siguiente ejemplo:

mysql> show variables like «max_connections»;
+—————–+——-+
| Variable_name | Value |
+—————–+——-+
| max_connections | 151 |
+—————–+——-+
1 row in set (0.00 sec)

Si quisiéramos incrementar el límite por ejemplo a 300 conexiones simultáneas, únicamente deberíamos añadir la siguiente línea al archivo de configuración de MySQL, típicamente en /etc/my.cnf:

max_connections = 300

Una vez hecho esto, y después del posterior reinicio del servicio, deberíamos poder confirmar el incremento del límite:

mysql> show variables like «max_connections»;
+—————–+——-+
| Variable_name | Value |
+—————–+——-+
| max_connections | 300 |
+—————–+——-+
1 row in set (0.00 sec)

Actualización: También podemos cambiar este parámetro «al vuelo» con el comando siguiente:

mysql> SET GLOBAL max_connections = 300;

Decir, que tenemos un par de opciones para ver el número de conexiones actuales:

mysql> SHOW STATUS WHERE `variable_name` = ‘Threads_connected’

O directamente,

mysql> SHOW PROCESSLIST;

Fuentes:
http://www.electrictoolbox.com/update-max-connections-mysql/
http://forums.mysql.com/read.php?24,15350,28036

Migración de hosting

Ya hacía tiempo que quería cambiar de hosting, y he aprovechado estas fechas tal señaladas para realizar la migración de mi web de un proveedor de hosting a otro. Me he decidido por 000webhost.com, después de pasar los últimos 2 años con 1and1, en su plan de bienvenida.

Durante estos dos años en 1and1, no he tenido problemas, a excepción del acceso con cliente FTP, que se ha llegado a hacer tedioso e incomprensiblemente lento y “fallón”.

En cuanto al nuevo proveedor, 000webhost.com, para mis necesidades tiene sus ventajas e inconvenientes. Como ventaja principal, tiene un plan gratuito que parece tener buena pinta. Como desventaja, su utilidad fantástico para la instalación «sencilla» de programas como «WordPress» no funciona, y lleva así un buen tiempo (tanto, que empiezo a pensar que únicamente les funciona el fantástico a los usuarios con cuentas de pago).

En cualquier caso, para la migración manual del WordPress, he seguido estos pasos:

  1. Descargar la última versión de todos los archivos de WordPress de mi antiguo servidor.
  2. Realizar un backup de la base de datos con un el plugin de wordpress wp-database-backup (que ha resultado no funcionar).
  3. En el nuevo hosting, crear una base de datos mysql cualquiera desde el cPanel de 000webhosts, para alojar la base de datos de Wordress (al finalizar la creación aparece el resumen de los detalles que necesitaremos para la instalación manual de Wordress).
  4. Subir por FTP todos los archivos de WordPress al nuevo servidor.
  5. Modificación del archivo config.php de WordPress, para usar los detalles de la base de datos creada en el punto 4, siguiendo estas indicaciones.
  6. Subir el archivo config.php al servidor.
  7. Ejecutar https://helloit.es/wp-admin/install.php
  8. Seguir el asistente, para al finalizar, tener nuestro nuevo blog vacío pero funcionando.
  9. Entrar con phpMyAdmin a la administración del antiguo blog, y realizar un backup por defecto de las tablas de WordPress.
  10. Editar la consulta sql generada para reemplazar todas las alusiones a mi anterior hosting por el nuevo (buscando http://s229103401.mialojamiento.es y reemplazando por https://helloit.es). Eliminar todas las querys del tipo CREATE TABLE para dejar únicamente las del tipo INSERT INTO.
  11. Entrar con phpMyAdmin a la administración del nuevo blog, y vaciar (que no eliminar) todas las tablas de la base de datos de WordPress (pero sin remover la base de datos).
  12. Ejecutar la sentencia sql modificada con el backup del blog.

Después de realizar todos estos pasos, he conseguido migrar el blog de un hosting a otro, al parecer, con éxito. Finalmente, he necesitado modificar mi registro DNS para que mi dominio apunte a la ip del nuevo servidor.

Ahora tocará postear, más a menudo 🙂