Diferencia entre revisiones de «Mysql Instalación»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 316: Línea 316:
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
SET GLOBAL max_connections = 1000;
 
SET GLOBAL max_connections = 1000;
 +
</syntaxhighlight>
 +
 +
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 +
SET SESSION sort_buffer_size = 10*1024*1024;
 
</syntaxhighlight>
 
</syntaxhighlight>
  

Revisión del 17:38 24 sep 2017

Requerimientos de software previos

  • Para gestionar Mysql disponemos de varias herramientas clientes, entre las cuales están.
  • El front-end MysqlWorkBench
  • El gestor web PhpMyAdmin
  • Para poder instalar el segundo, es necesario tener instalado un servidor web, ya que PhpMyAdmin no es más que un sitio web de página PHP para gestionar un servidor Mysql.


  • A mayores, cuando instalamos el Mysql disponemos de utilidades tipo consola, que nos permite conectarnos al gestor Mysql y realizar múltiples operaciones. Por ejemplo el programa mysql o el mysqladmin. Para ver la lista completa, abrir un terminal y escribir mysql pulsando después dos veces la tecla 'tabulador'.


  • Como en este curso vamos a trabajar con las dos herramientas, necesitamos tener instalado localmente un servidor web.
Para ello podemos hacer uso de un paquete denominado XAMPP o instalar cada componente por separado. En nuestro caso vamos a hacer la instalación individual.
  • Nota: Aunque en ocasiones se indicará como se realiza alguna operación en Windows, casi todo el manual está orientado al uso con S.O. Linux.

Instalación

  • Tanto en windows como en Linux disponemos de un paquete de software en el que está integrado Apache, Mysql, soporte para PHP,posibilidad de ejecutar Servlets/jsp en Apche...Se denomina XAMPP.
Podéis ver como se instala en el siguiente enlace, pero nosostros vamos a hacer una instalación individual por componentes.
Xampp es utilizado para entornos de desarrollo, normalmente de sitios web, [http://wiki.cifprodolfoucha.es/index.php?title=Drupal utilizando CMS, páginas php con acceso a datos,....y no se debe utilizar para entornos de producción.


LINUX

  • Instalación y configuración de Mysql:
  • Podemos hacerlo a través de consola: Seguir este enlace.
  • Podemos bajarnos los paquetes necesarios en función del S.O. que tengamos e instalarlos uno a uno.
En este caso es mejor añadir el repositorio de Mysql para el S.O. correspondiente siguiendo estas instrucciones.


  • Instalación de MySqlWorkBench, programa que permite gestionar gráficamente el Mysql: sudo apt-get install mysql-workbench
  • Instalación de phpmyadmin, sitio web que permite gestionar mysql a través de un servidor web. Usado en los alojamientos compartidos de Internet: sudo apt-get install phpmyadmin
Tendréis que seguir los pasos indicados en este enlace. Para acceder al sitio tendréis que escribir en un navegador: http://localhost/phpmyadmin


WINDOWS

  • Descargar e instalar el servidor web Apache: Seguir los pasos indicados en este enlace.
  • Descargar e instalar o soporte PHP para windows: Seguir los pasos indicados en este enlace.
  • Descargar e instalar el gestor de bases de datos Mysql junto con la herramienta de administración MysqlWorkBench y el PhpMyAdmin.Seguir este enlace.



Configuración

Estado inicial

  • La instalación crea en el sistema el usuario 'mysql' y el grupo 'mysql'.
  • La instalación crea en el servidor de bases de datos el usuario 'root', La contraseña fue solicitada durante la instalación. Dicho usuario tiene control total sobre todas las bases de datos del servidor.
Para ponerle contraseña debemos escribir el la línea de comandos, en caso de que no tenga una previa:
1 sudo mysqladmin -u root password nueva_contraseña
En caso de tener una contraseña puesta y queramos cambiarla:
1 sudo mysqladmin -u root -p password nueva_contraseña


Los usuarios de la base de datos no tienen nada que ver con los usuarios del sistema operativo.


  • Por defecto hay una base de datos 'mysql' con información de MySQL y usuarios, y otra base de datos 'information_schema' con información de bases de datos.


  • Ficheros y directorios importantes (pueden variar en otras instalaciones):
  • /var/lib/mysql/
  • Guarda las bases de datos del servidor.
A cada base de datos corresponderá un directorio con el mismo nombre.
A cada tabla MyISAM corresponderán varios ficheros con el mismo nombre que la tabla y diferente extensión (*.frm = formato, *.myd = datos tablas, *.myi = índices) dentro de un directorio con el mismo nombre que su base de datos.
A cada tabla InnoDB corresponderán un fichero con el mismo nombre que la tabla y extensión .frm (formato) dentro de un directorio con el mismo nombre que su base de datos, y varios ficheros con nombre 'ibdata1','ibdata2',... (tablespace") que compartirá con otras bases de datos en el directorio principal de datos.
El propietario de los ficheros es el usuario 'mysql' y el grupo 'mysql'.
  • /var/log/mysql/
  • Anotaciones y alertas del servidor.
  • /etc/mysql/
  • Ficheros de configuración general (my.cnf).
Cada vez que cambiemos la configuración deberemos reiniciar el servidor para que se activen los nuevos cambios.
  • /etc/init.d/mysql
Script para arrancar, parar y reiniciar el servidor (lo utiliza la orden service mysql start, vista posteriormente).
  • /usr/bin/ , /usr/sbin/ , /usr/share/mysql/
Programas de MySQL


  • El puerto por defecto del servidor MySQL es el TCP/UDP 3306.
  • Para acceder remotamente al servidor debo modificar /etc/mysql/my.cnf y comentar la línea "bind-address" o comentar la línea "skip-networking"
  • Para saber la versión de Mysql instalada debemos ejecutar la orden: mysqld --version

Inicio / Parada / Estado

  • Cuando se instala Mysql en Linux, este pasa a ser un servicio (proceso que se ejecuta automáticamente cuando se inicia el ordenador, no tiene interface gráfica).
  • Podemos iniciar, parar o ver el estado del proceso con los siguientes comandos:


También se pueden parar con la orden:
1 mysqladmin -u root -p shutdown


  • Cuando arrancamos el servicio se crea un proceso de nome mysqld. Este es el proceso que va a estar escuchando en un puerto determinado (lo especificamos en el archivo de configuración) las peticiones de consultas u órdenes de gestión sobre el Mysql.
Podemos comprobar, con el servidor Mysql iniciado como aparece dicho proceso:
1 sudo ps aux | grep mysqld


Mysql conf 5.jpg



  • En LINUX, cada vez que iniciamos el servicio se crea el directorio /var/run/mysqld y cuando el servicio se para, dicho directorio se borra.
Si quisiéramos iniciar el servidor Mysql desde la linea de comandos con el comando mysqld y poder pasarle diferentes opciones de configuración, deberíamos primero crear dicho directorio y darle permiso de acceso al usuario 'mysql'
Para ello, podemos ejecutar la sentencia:
1 sudo install -m 755 -o mysql -g root -d /var/run/mysqld
Debemos de tener en cuenta que dicho directorio es el indicado en el archivo de configuración de mysql.cnf (/etc/mysql/mysql.conf.d/mysqld.cnf) en la sección [mysqld_safe] y [mysqld]:
 1 [mysqld_safe]
 2 socket          = /var/run/mysqld/mysqld.sock
 3 nice            = 0
 4 
 5 [mysqld]
 6 #
 7 # * Basic Settings
 8 #
 9 user            = mysql
10 pid-file        = /var/run/mysqld/mysqld.pid
11 socket          = /var/run/mysqld/mysqld.sock
Por lo tanto, si cambiamos el directorio en dicho archivo tendremos que modificar la orden anterior y crear el directorio correspondiente.


  • Podemos comprobar si conectamos al servidor desde la línea de comandos con los programas que nos suministra mysql:
1 sudo mysqlshow -p
Muestra las bases de datos creadas.
Nota: Lleva el parámetro '-p' ya que el usuario root tiene un password. En caso de que no tenga una password asignada, podríamos no ponerlo.
1 sudo mysqlshow -p mysql
Muestra las tablas de la base de datos mysql, donde se guarda información de mysql e información de los usuarios.
1 mysql  -p -e "select * from mysql.user"
Muestra los usuarios de la tabla user de la base de datos mysql.

Nota: Todo lo anterior podría ser ejecutado desde cualquier herramienta cliente de las instaladas, como MysqlWorkBench o PhpMyAdmin.

Archivo de configuración del servidor

  • El archivo de configuración de Mysql es my.cnf, que se encuentra en la carpeta de instalación de Mysql.
  • En Linux es /etc/mysql/. Este archivo es en realidad un acceso directo el cual va a acabar apuntando al archivo mysql,cnf del mismo directorio.
Mysql conf 4.jpg


  • El contenido del archivo de configuración global tiene las siguientes líneas:
1 !includedir /etc/mysql/conf.d/
2 !includedir /etc/mysql/mysql.conf.d/



  • Estas líneas lo que indican es que van a buscar en los dos directorios indicados, todos los archivos de configuración que encuentren. Dichos archivos pueden tener cualquier nombre, pero deben acabar con la extensión .cnf
  • El archivo de configuración del servicio Mysql (mysql deamon=>mysqld) se encuentra en la carpeta: /etc/mysql/mysql.conf.d/mysqld.cnf y tiene como nombre de sección [mysqld].
Podemos ver todas las opciones de configuración en este enlace.
1 sudo mysqld --verbose --help
  • El archivo de configuración de la utilidad mysql de consola, que nos permite conectarnos al servidor y realizar las operaciones sobre el mismo, dispone de un archivo de configuración en /etc/mysql/conf.d/mysql.cnf.
Podemos ver todas las opciones de configuración en este enlace.
Para ver todas las opciones que podemos modificar en este archivo de configuración, debemos ejecutar desde una consola la siguiente orden:
1 sudo mysql --help


Nota: Podemos tener diferentes archivos de configuración que sean configurados para diferentes usuarios. El archivo de configuración situado en /etc/mysql/my.cnf afectará a todos los usuarios, pero el situado en el directorio "~/.my.cnf" (que es el directorio home de un usuario determinado) afectará a ese usuario.

Como cambiar las opciones de configuración

  • En Mysql existen multitud de variables del sistema que podemos configurar.
Los valores de estas variables fueron establecidos en el/los archivo de configuración de Mysql (visto anteriormente)
  • Para saber los valores actuales de dichas variables debemos ejecutar la orden (desde Mysql):
1 show variables
Nota: Desde mysql quiere decir que debemos estar conectados a mysql ya que es una orden SQL.
Para hacerlo desde consola debemos conectarnos a mysql de la forma:
1 sudo mysql -u root -p
Y después de escribir la contraseña de root podemos ejecutar las órdenes SQL que queramos, las cuales deben acabar en punto y coma.
Para salir al shell debemos escribir: exit (y pulsar enter)


  • Los valores de dichas variables (algunos de ellos) están establecidos en el archivo de configuración de Mysql, que como hemos visto anteriormente, las relacionadas con el servidor Mysql, se encuentran en el archivo /etc/mysql/mysql.conf.d/mysqld.conf.
Si editamos dicho archivo podemos ver asignaciones a variables del sistema.
Dichos valores pueden modificarse en este archivo o a través de las herramientas cliente de Mysql.
El cambio de valor en alguna de las variables del sistema que sean de tipo Global (lo veremos después) llevará consigo la necesidad de reiniciar el servicio, para que coja los valores modificados.


Variables del sistema

Tipos
  • En base a su alcance las variables puede ser:
  • Globales: Afectan al funcionamiento de gestor Mysql y de todos los usuarios conectados.
  • De sesión: Sólo afectan a cada cliente conectado, de tal forma que una modificación en el valor de una variable sólo afectará a los nuevos clientes que se conecten, mientras el resto siguen teniendo sus propios valores.


  • Cuando un servidor Mysql se inicia, carga por defecto un valor para cada una de las variables globales.
Dicho valor, si es global puede ser modificado cambiándolo en el archivo de configuración o enviándolo como parámetro cuando el gestor se inicia. Cualquier cambio va a necesitar reiniciar el servicio.
  • Cada cliente que se conecte al servidor cargará unas variables de sesión, las cuales pueden ser cambiadas, afectando sólo al usuario que las cambió.


  • En base a si se pueden modificar en tiempo de ejecución las variables puede ser:
  • Dinámicas: Se pueden modificar.
  • Estáticas: No se pueden modificar.


  • En base a si se refieren al estado del servidor en un momento concreto las variables puede ser:
  • De estado: Se refieren al estado del servidor en un momento dado.
  • De sistema: Se refieren a su comportamiento en general.


Mysql conf 6.jpg
  • En esta imagen podemos ver un estrato de las variables del sistema Mysql.
  • Podemos ver como la cabecera nos indica si la variable de puede pasar por línea de comando al servicio (cmd-line), si puede ir en el fichero de configuración (option file), si es del sistema (system var), el alcance (scope) y si es dinámica (dinamic).


Visualización
Permite filtrar por nombre.'
show variables like '%Connect%': Muestra todas las variables del sistema que tengan la palabra 'Connect' en su interior.
show variables where value=3306: Muestra todas las variables del sistema que tengan un valor de 3306.
  • SHOW STATUS: Muestra información sobre el estado del servidor.
Permite filtrar por nombre.
show status like '%inno%': Muestra todas las variables de estado que tengan la palabra inno en su interior.
show variables where value>100: Muestra todas las variables de estado que tengan un valor mayor que 100.
Muchas de dichas variables se inicializan a 0 con la orden: FLUSH STATUS
Modificación de valores
  • Importante: Es necesario que la variable sea DINAMICA para que pueda ser modificada.


  • Para modificar un valor de una variable del sistema tenemos dos opciones:
  • Modificar su valor con la sentencia SET.
  • Editar el archivo de configuración y modificar allí su valor.
En el primer caso, la modificación no afectará a los usuarios ya conectados, sino a los nuevos usuarios.
En el segundo caso será necesario reiniciar el servicio.
Por ejemplo:
1 SET GLOBAL max_connections = 1000;
1 SET SESSION sort_buffer_size = 10*1024*1024;
Ejemplos de Variables
  • port=valor: Establece el puerto tcp/ip en el que el servidor Mysql va a escuchar las peticiones de los clientes.
  • basedir=path: Directorio de instalación de Mysql. Normalmente las rutas toman como base dicho valor.
  • datadir=path: Directorio donde se encuentran las bases de datos y tables del gestor.
  • skip-grant-tables: Esta opción deshabilita la seguridad en Mysql y permite que se pueda conectar al mismo sin necesidad de usar ningún usuario/password. Se tiene acceso a todas las bases de datos y a todas las tablas del sistema.
Utilizado como una de las formas de recuperar la contraseña de root.


  • innodb_file_per_table: A partir de la versión 5.6.6 de Mysql tiene un valor true. Hace que las tablas Inndb generen un archivo ibd para cada una. Dentro de este archivo se guardan los datos e índices de cada tabla. Es empleado para recuperar una base de datos de un desatre, en la que tengamos una copia de seguridad y acceso a dichos ficheros (junto a los ficheros frm). También podemos crear tablas en directorios concretos (fuera del directorio por defecto para datos de Mysql) y de esta forma aumentar el rendimiento (por ejemplo, podemos hacer que ciertas tablas se guarden en discos SSD), como se indica en este enlace.

Actualización

  • mysql_upgrade: Herramienta en línea de comandos para actualizar las tablas que necesiten alguna adaptación al nuevo gestor una vez actualizado.
1 sudo mysql_upgrade -uroot -p



-- Ángel D. Fernández González -- (2017).