Sondeo

Escritorios alternativos Linux

¿Cuál prefieres?

  •  Xfce
  •  LXDE
  •  Razor-qt
  •  Enlightenment 0.17

Resultados
Other polls | 3,558 voters | 2 comentarios
· Próximas fechas Curso Global de Servidores con CentOS 6.
· Taller de programación de Python.
· Curso de programación de PHP.
· Prueba ALDOS 1.4.5. Nuestro sistema operativo para escritorio.

Configuración básica de MySQL™.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2014 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector, hace mal uso de éstos.

Introducción.

Acerca de MySQL™.

MySQL™ es un DBMS (DataBase Management System) o sistema de gestión de base de datos SQL (Structured Query Language o Lenguaje Estructurado de Consulta) multiusuario y multihilo con licencia GNU/GPL. Fue propiedad y patrocinio de MySQL AB, compañía fundada por David Axmark, Allan Larsson y Michael Widenius, con base de operaciones en Suecia, la cual poseía los derechos de autor de prácticamente todo el código que lo integraba. MySQL AB desarrolló y se encargó del mantenimiento de MySQL vendiendo servicios de soporte y otros valores agregados, así como también licenciamiento privativos para los desarrollos de equipamiento lógico que requieren mantener cerrado su código fuente. MySQL™ AB fue adquirido en 2008 por Sun Microsystems, que a su vez fue adquirido por Oracle Corporation en 2009.

MySQL™ es actualmente el servidor de base de datos más popular para los desarrollos a través de la red mundial, principalmente sitios de Internet. Es célebre y casi legendario, por considerarse rápido y sólido.

MySQL™ será reemplazado de forma transparente por MariaDB™ —una bifurcación de MySQL dirigida por Michael Widenius— en la mayoría de los distribuciones de GNU/Linux como medida para hacer frente a la mala gestión que ha realizado Oracle sobre el proyecto MySQL™.

URL: http://www.mysql.com/

Equipamiento lógico necesario.

En ALDOS, CentOS y Red Hat™ Enterprise Linux.

Ejecute lo siguiente para instalar los paquetes mysql (cliente) y mysql-server (servidor):

yum -y install mysql mysql-server

En SUSE™ Linux Enterprise.

Ejecute lo siguiente para instalar los paquetes mysql-client (cliente) y mysql (servidor):

yast -i mysql mysql-client

Modificaciones necesarias en el muro cortafuegos.

Es necesario abrir el puerto 3306 por TCP (mysql), pero sólo si requiere hacer conexiones desde anfitriones remotos.

En ALDOS, CentOS y Red Hat™ EnterpriseLinux.

Herramienta system-config-firewall.

Ejecute lo siguiente si utiliza el muro cortafuegos predeterminado del sistema:

system-config-firewall

Habilite el puertos 3306/TCP y aplique los cambios.

Herramienta system-config-firewall habilitando el puerto 3306/TCP para MySQL
Herramienta system-config-firewall habilitando el puerto 3306/TCP para MySQL.

Servicio iptables.

Ejecute lo siguiente:

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

Ejecute lo siguiente para guardar los cambios.

service iptables save

O bien añada lo siguiente al archivo /etc/sysconfig/iptables:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

Reinicie el servicio para aplicar los cambios:

service iptables restart

Shorewall.

La regla para el archivo /etc/shorewall/rules de Shorewall correspondería a lo siguiente:

#ACTION	SOURCE	DEST	PROTO 	DEST		SOURCE
#				PORT		PORT(S)1
ACCEPT	all	fw	tcp	3306

Ejecute lo siguiente para aplicar los cambios:

service shorewall restart

En SUSE™ Linux Enterprise.

Ejecute yast usando firewall como argumento:

yast firewall

Habilite MySQL Server y aplique los cambios. Ésto abrirá todos los puertos necesarios.

Módulo de cortafuegos de YaST, en modo gráfico, habilitando el MySQL™ Server.
Módulo de cortafuegos de YaST, en modo gráfico, habilitando el MySQL Server.

Módulo de cortafuegos de YaST, en modo texto, habilitando MySQL™ Server.
Módulo de cortafuegos de YaST, en modo texto, habilitando MySQL Server.

SELinux y MySQL™ en ALDOS, CentOS y Red Hat™ Enterprise Linux.

Ejecute lo siguiente para que SELinux permita al usuario regular establecer conexiones hacia el zócalo de MySQL™:

setsebool -P allow_user_mysql_connect 1

Ejecute lo siguiente para que SELinux permita al servicio conectarse a cualquier puerto distinto al 3306:

setsebool -P mysql_connect_any 1

Procedimientos.

Activar, iniciar, detener y reiniciar el servicio mysqld.

En ALDOS, CentOS y Red Hat™ Enterprise Linux.

Ejecute lo siguiente para activar el servicio en todos los niveles de ejecución:

chkconfig mysqld on

Ejecute lo siguiente para iniciar por primera vez el servicio y generar la base de datos inicial:

service mysqld start

Ejecute lo siguiente para reiniciar el servicio:

service mysqld restart

Ejecute lo siguiente para detener el servicio:

service mysqld stop

SUSE™ Linux Enterprise.

Ejecute lo siguiente activar el servicio en todos los niveles de ejecución:

insserv mysql

Ejecute lo siguiente para iniciar por primera vez el servicio y generar la base de datos inicial:

rcmysql start

Ejecute lo siguiente para reiniciar el servicio:

rcmysql restart

Ejecute lo siguiente para detener el servicio:

rcmysql stop

Archivos y directorios de configuración.

El archivo /etc/my.cnf es el utilizado para establecer o cambiar opciones permanentes de MySQL. Las bases de datos se almacenan dentro del directorio /var/lib/mysql.

Asignación de contraseña a root en MySQL.

Root carece de contraseña después de iniciado el servicio por primera vez. Ejecute mysql_secure_installation si necesita poner en producción inmediatamente el servidor. Iniciará un asistente que le permitirá asignar la contraseña de root, eliminar el usuario anónimo y la base de datos de pruebas (test), eliminar accesos remoto y otros ajustes de seguridad importantes. Se le solicitará ingresar una inexistente contraseña actual. Sólo pulse la tecla ↵ (ENTER) y luego asigne la nueva contraseña. Responda con Y para todo lo demás.

mysql_secure_installation

En adelante será necesario añadir la opción -p a cualquier sentencia del intérprete de mandatos para mysql, mysqladmin y mysqldump para ingresar la contraseña de root y poder realizar diversas tareas administrativas.

De manera alternativa puede ejecutar mysqladmin con la opción -h con localhost como argumento, la opción -u con root y password como argumentos y la nueva contraseña entre comillas simples:

mysqladmin -u root password 'cualquier-contraseña-que-guste'

Recuperación de la contraseña de root.

Siga el siguiente procedimiento en caso de que haya extraviado la contraseña de root de MySQL™.

Detenga el servicio ejecutando service mysqld stop (ALDOS, CentOS y Red Hat™ Enterprise Linux) o bien rcmysql stop (SUSE™ Linux Enterprise).

Ejecute mysqld_safe con la opción --skip-grant-tables, enviando el proceso a segundo plano:

mysqld_safe --skip-grant-tables &

Ingrese al intérprete de mandatos de MySQL™ ejecutando mysql sin argumentos u opciones:

mysql

Ejecute lo siguiente:

UPDATE mysql.user
SET Password=PASSWORD('nueva-contraseña')
WHERE User='root';
FLUSH PRIVILEGES;

Salga del intérprete de mandatos de MySQL™ ejecutando lo siguiente:

exit;

Detenga el servicio ejecutando mysqladmin con la opción -p y shutdown como argumento. Se solicitará se ingrese la nueva contraseña asignada.

mysqladmin -p shutdown

Inicie MySQL™ ejecutando service mysqld start (ALDOS, CentOS y Red Hat™ Enterprise Linux) o bien rcmysql start (SUSE™ Linux Enterprise).

Verifique el cambio de contraseña ejecutando mysql y la opción -p e ingrese la nueva contraseña.

mysql -p

Salga del intérprete de mandatos de MySQL™ ejecutando lo siguiente:

exit;

Procure memorizar la nueva contraseña asignada a root en MySQL.

Crear y eliminar bases de datos.

Para crear una nueva base de datos, ejecute mysqladmin con create como argumento, la opción -u con root como usuario y la opción -p para indicar que se ingresará una contraseña:

mysqladmin -u root -p create basedatos

Para eliminar una base de datos, ejecute mysqladmin con drop como argumento en lugar de create, la opción -u con root como usuario y la opción -p para indicar que se ingresará una contraseña:

mysqladmin -u root -p drop basedatos

Respaldo y restauración de bases de datos.

Para respaldar una base de datos desde el anfitrión local, ejecute mysqldump con las opciones --opt (que añade automáticamente las opciones --add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset y --disable-keys), la opción -u con el nombre de usuario a utilizar, la opción -p para indicar que se ingresará una contraseña, el nombre de la base de datos, > para guardar la salida estándar (STDOUT) en un archivo y el nombre del archivo donde se guardará el respaldo. Ejemplo:

mysqldump --opt -u root -p basedatos > respaldo.sql

Para restaurar un respaldo, ejecute mysql con las opciones -u con el nombre de usuario con privilegios sobre la base de datos a restaurar, -p para indicar que se utilizará contraseña, el nombre de la base de datos a restaurar, < para indicar que la entrada estándar (STDIN) será un archivo y el nombre del archivo con el respaldo de la base de datos. Ejemplo:

mysql -u root -p basedatos < respaldo.sql

Para respaldar todas la bases de datos hospedadas en MySQL™, ejecute mysqldump con las opciones --opt, --all-databases para indicar que se respaldarán todas la bases de datos, la opción -u con root como usuario, la opción -p para indicar que se utilizará contraseña, el símbolo > para guardar la salida estándar (STDOUT) en un archivo y el nombre del archivo donde se guardará el respaldo. Ejemplo:

mysqldump --opt --all-databases -u root -p > respaldo-todo.sql

Para restaurar todas las bases de datos a partir de un único archivo de respaldo, ejecute mysql con la opción -u con root como usuario, la opción -p para indicar que se utilizará contraseña, el símbolo < para indicar que la entrada estándar (STDIN) será un archivo y el nombre del archivo con el respaldo de todas las bases de datos. Ejemplo:

mysql -u root -p < respaldo-todo.sql

Permisos de acceso a las bases de datos.

Ingrese al intérprete de MySQL™ como root:

mysql -u root -p

Ejecute lo siguiente para asignar los permisos select (seleccionar), insert (insertar), update (actualizar), create (crear), alter (alterar), delete (eliminar) y drop (descartar) sobre las tablas de una base de datos al usuario prueba desde el anfitrión local:

GRANT
 select, insert, update, create, alter, delete, drop
ON
 base-de-datos.*
TO
 usuario@localhost
IDENTIFIED BY
 'contraseña';

Puede otorgar al usuario todos los permisos sobre la base de datos ejecutando algo similar a lo siguiente:

GRANT
 all
ON
 base-de-datos.*
TO
 usuario@localhost
IDENTIFIED BY
 'contraseña';

Ejecute algo similar al ejemplo anterior, pero definiendo el usuario y la dirección IP del anfitrión remoto para permitir el acceso hacia una base de datos desde un anfitrión remoto. Ejemplo:

GRANT
 select, insert, update, create, alter, delete, drop
ON
 directorio.*
TO
 usuario@192.168.70.2
IDENTIFIED BY
 'contraseña';

Puede otorgar al usuario todos los permisos sobre la base de datos ejecutando lo siguiente:

GRANT
 all
ON
 directorio.*
TO
 usuario@192.168.70.2
IDENTIFIED BY
 'contraseña';

Ejecute algo similar a lo anterior, pero definiendo el nombre del usuario entre comillas simples, arroba y el símbolo % entre comillas simples para permitir el acceso hacia una base de datos desde cualquier anfitrión. Ejemplo:

GRANT
 all
ON
 directorio.*
TO
 'usuario'@'%'
IDENTIFIED BY
 'contraseña-usuario-usuario';

Optimización de MySQL.

Deshabilitar la resolución de nombres de anfitrión.

MySQL mantiene un cache de anfitriones utilizados en la memoria, la cual contiene las direcciones IP, nombres de anfitrión y errores de información asociados a éstos. El cache sólo se utiliza para conexiones TCP remotas con otros anfitriones y jamás lo utiliza para conexiones a través de la interfaz de retorno del sistema (loopback, 127.0.0.1) o conexiones hechas a través del archivo de zócalo, tubería o bien memoria compartida.

MySQL™ utiliza la dirección IP del cliente para verificar si el nombre de anfitrión de éste está en el cache de anfitriones por cada nueva conexión. Se intentará resolver el nombre de anfitrión cuando el nombre es inexistente, resolviendo primero la dirección IP, luego resolviendo el nombre, comparando el resultado de la dirección IP original para verificar que correspondan. Luego esta información es almacenada en el cache de anfitriones.

El objetivo del cache es evitar hacer nuevamente una consulta de DNS por cada conexión de cliente y evitar el almacenamiento de información de errores que ocurren en el proceso de conexión de los clientes. Cuando ocurren demasiados errores desde un anfitrión en particular y se rebasa el valor de la variable max_connect_errors (10, de modo predeterminado), se bloquea el acceso desde dicho anfitrión.

Cuando un anfitrión es bloqueado, éste sólo podrá acceder de nuevo si se reinicia el servicio o si se limpia manualmente el cache de anfitriones. Ésto último se realiza ejecutando lo siguiente desde el intérprete de mandatos del sistema:

mysqladmin -p flush-hosts

Cuando se tiene un DNS muy lento, se carece de uno que resuelva los nombres de los anfitriones o bien se tiene demasiados anfitriones haciendo conexiones hacia el servidor, deshabilitar el cache de anfitriones o hacerlo más grande mejora el rendimiento considerablemente. La consecuencia de deshabilitar el cache de anfitriones es que en adelante sólo se podrán otorgar permisos de acceso y realizar conexiones utilizando direcciones IP, es decir utilizando usuario@a.b.c.d en lugar de usuario@anfitrión.dominio.tld.

Para deshabilitar el cache de anfitriones se requiere editar el archivo /etc/my.cnf:

vi /etc/my.cnf

Y añadir la siguiente opción en la sección [mysqld]:

skip-name-resolve

Guarde el archivo, salga del editor del texto y reinicie el servicio para aplicar los cambios.

Si se desea hacer más grande el cache de anfitriones —cuyo valor predeterminado es 128 anfitriones— de debe cambiar el valor de HOST_CACHE_SIZE por cualquier valor entre 0 y 2048 y compilr MySQL™ desde código fuente —motivo por el cual es más práctico deshabilitar el cache de anfitriones.

Aumentar el tamaño de cache de consultas.

Cuando se habilita el cache de consultas en memoria y se dispone de suficiente de ésta, el desempeño del servidor se incrementa considerablemente. El valor predeterminado del tamaño cache de consultas —query_cache_size— es 0, es decir está desactivado. Los valores permitidos son enteros múltiplos de 1024 (bytes). Para establecer un tamaño de cache de consultas de 32 MiB, el valor correspondiente para query_cache_size sería 33882112 bytes.

Ingrese al intérprete de MySQL™ como root:

mysql -u root -p

Verifique el valor de la variable query_cache_size ejecutando lo siguiente:

SHOW VARIABLES LIKE '%query_cache%';

La salida será similar a la siguiente:

+------------------------------+---------+
| Variable_name                | Value   |
+------------------------------+---------+
| have_query_cache             | YES     |
| query_cache_limit            | 1048576 |
| query_cache_min_res_unit     | 4096    |
| query_cache_size             | 0       |
| query_cache_type             | ON      |
| query_cache_wlock_invalidate | OFF     |
+------------------------------+---------+
6 rows in set (0.00 sec)

Ejecute lo siguiente para cambiar el valor de query_cache_size a 32 MiB:

SET GLOBAL query_cache_size = 33882112;

Verifique el cambio ejecutando lo siguiente:

SHOW VARIABLES LIKE '%query_cache%';

La salida será similar a la siguiente:

+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| have_query_cache             | YES      |
| query_cache_limit            | 1048576  |
| query_cache_min_res_unit     | 4096     |
| query_cache_size             | 33882112 |
| query_cache_type             | ON       |
| query_cache_wlock_invalidate | OFF      |
+------------------------------+----------+
6 rows in set (0.00 sec)

Salga del intérprete de MySQL.

exit;

El cambio prevalecerá hasta que sea reiniciado MySQL. Edite el archivo /etc/my.cnf para que el cambio sea permanente:

vi /etc/my.cnf

Añada la siguiente opción en la sección [mysqld]:

query_cache_size = 33882112

Reinicie el servicio para aplicar los cambios:

service mysqld restart

Ingrese al intérprete de mandatos de MySQL™ para verificar el estado del cache de consultas:

mysql -u root -p

Realice algunas consultas al azar hacia cualquier base de datos MySQL™ hospedada en el servidor a fin de generar algo de actividad. Sólo la primera consulta será un considerablemente más lenta que las subsecuentes. El resto de las consultas deberán ser considerablemente más rápidas.

Vuelva a ingresar al intérprete de mandatos de MySQL™ para verificar el estado del cache de consultas:

mysql -u root -p

Ejecute lo siguiente desde el intérprete de mandatos de MySQL™:

SHOW STATUS LIKE '%Qcache%';

La salida puede ser similar a la siguiente:

+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| Qcache_free_blocks      | 1        | 
| Qcache_free_memory      | 33864568 | 
| Qcache_hits             | 0        | 
| Qcache_inserts          | 0        | 
| Qcache_lowmem_prunes    | 0        | 
| Qcache_not_cached       | 61       | 
| Qcache_queries_in_cache | 0        | 
| Qcache_total_blocks     | 1        | 
+-------------------------+----------+
8 rows in set (0.00 sec)

Soporte para UTF-8.

Algunas aplicaciones como vTigerCRM requieren se que configuré UTF-8 como codificación predeterminada. Edite el archivo /etc/my.cnf:

vi /etc/my.cnf

Añada las siguientes líneas resaltadas:

[mysql]
default-character-set=utf8

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
skip-name-resolve
query_cache_size = 33882112
collation_server=utf8_unicode_ci
character-set-server=utf8
init_connect='SET collation_connection = utf8_general_ci'
init_connect='SET NAMES utf8'

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Guarde los cambios y salda del editor de texto. Reinicie el servicio para que surtan efecto los cambios.

Ejecute lo siguiente si utiliza ALDOS, CentOS o Red Hat™ Enterprise Linux:

service mysqld restart

Ejecute lo siguiente si utiliza SUSE™ Linux Enterprise:

rcmysqld restart

Bibliografía.

Última Edición: 16/06/2014, 10:32|Hits: 233,156 Ver la versión para imprimir