1 Administración de datos
2 Agenda ● Introducción. ● PostgreSQL. ● MySQL.
3 Introducción ● Una base de datos es un conjunto estructurado de datos que pueden ser organizados de manera simple y eficiente por un manejador de dicha base. ● La mayoría de las bases de datos actuales se denominan relacionales, ya que los datos pueden ser almacenados en diferentes tablas que facilitan su gestión y administración. Para ello y con el fin de estandarizar el acceso a las bases de datos se utiliza un lenguaje denominado SQL (Structured Query Language), que permite una interacción flexible, rápida e independiente de las aplicaciones a las bases de datos.
4 Introducción ● La forma más utilizada en la actualidad consiste en acceder a una base de datos desde una aplicación que ejecuta código SQL. ● Por ejemplo, es muy común acceder a una DB a través de una página web que contiene código PHP o Perl. ● Cuando se solicita una página por un cliente, se ejecuta el código PHP o Perl incrustado en la página, se accede a la DB y se genera la página con su contenido estático y el contenido extraído de la DB que posteriormente se envía al cliente.
5 Introducción ● Dos de los ejemplos más actuales de bases de datos son los aportados por ProstgreSQL y MySQL, que serán objeto de nuestro análisis.
6 Instalación PostgreSQL ● La instalación de la base de datos se puede realizar de dos modos, a través de los binarios de la distribución, lo cual no presenta ninguna dificultad, ya que los scripts de distribución realizan todos los pasos necesarios para tener la DB operativa, o a través del código fuente, que será necesario compilar e instalar. – En el primer caso, se puede utilizar (Debian) las apt-get. – Para el segundo caso, se recomienda siempre ir al origen (o a un repositorio espejo de la distribución original).
7 Instalación desde el código fuente ● Primero se debe obtener el software del sitio: – ftp://postgresql.org/pub/postgresql-x.y.tar.gz ftp://postgresql.org/pub/postgresql-x.y.tar.gz ● Descomprimir y desempaquetar: – tar zxvf gunzip postgresql-x.y.tar.gz ● Cambiarse al directorio postgresql y configurarlo con./configure. ● Compilarlo con make, verificar la compilación con make check e instalarlo con make install (por defecto, lo hará en /usr/local/pgsql).
8 Postinstalación ● Inicializar las variables, en bash, sh, ksh: – LD_LIBRARY_PATH = /usr/local/pgsql/lib; – PATH = /usr/local/pgsql/bin:$PATH; – export LD_LIBRARY_PATH PATH; ● Es recomendable poner esta inicialización en los scripts de configuración del usuario, por ejemplo /etc/profile o.bashrc para el bash. ● Para tener acceso a los manuales, se debe inicializar la variable MANPATH de la misma forma: – MANPATH = /usr/local/pgsql/man:$MANPATH; export MANPATH
9 Postinstalación ● Una vez instalada la DB, se deberá crear un usuario que manejará las bases de datos (es conveniente crear un usuario diferente del root para que no tenga conexión con otros servicios de la máquina), por ejemplo, el usuario postgres utilizando el comando useradd, por ejemplo. ● A continuación, se debe crear un área de almacenamiento para las bases de datos (espacio único) sobre el disco que ser un directorio, por ejemplo /usr/local/pgsql/data. ● Para ello, ejecutar el comando initdb -D /usr/local/pgsql/data, conectado como el usuario creado anteriormente.
10 Postinstalación ● Puede recibir un mensaje que no puede crear el directorio por falta de privilegios, por lo cual se deberá crear el directorio primero y luego indicarle a la DB cuál es; como root, hay que hacer, por ejemplo: – mkdir /usr/local/pgsql/data – chown postgres /usr/local/pgsql/data – su postgres – initdb -D /usr/local/pgsql/data ● Iniciar el servidor (que se llama postmaster), para ello, utilizar: – postmaster -D /usr/local/pgsql/data ● Para ejecutarlo en modo pasivo (background) utilizar: – postmaster -D /usr/local/pgsql/data > logfile 2>&1 &.
11 Postinstalación ● Puede recibir un mensaje que no puede crear el directorio por falta de privilegios, por lo cual se deberá crear el directorio primero y luego indicarle a la DB cuál es; como root, hay que hacer, por ejemplo: – mkdir /usr/local/pgsql/data – chown postgres /usr/local/pgsql/data – su postgres – initdb -D /usr/local/pgsql/data ● Iniciar el servidor (que se llama postmaster), para ello, utilizar: – postmaster -D /usr/local/pgsql/data ● para ejecutarla en modo activo (foreground); y para ejecutarlo en modo pasivo (background) utilizar: – postmaster -D /usr/local/pgsql/data > logfile 2>&1 &.
12 Usuarios DB ● Los usuarios de la DB son distintos de los usuarios del S.O. Los usuarios son para todas las DB que controla dicho servidor, no para cada DB. ● Para crear un usuario, ejecutar la sentencia: – SQL CREATE USER nombre ● Para borrar usuarios: – DROP USER nombre ● También se puede llamar a los programas createuser y dropuser desde la línea de comandos. ● Existe un usuario por defecto llamado postgres (dentro de la DB), que es el que permitirá crear los restantes (para crear nuevos usuarios desde psql - U postgres si el usuario de sistema operativo con el que se administra la DB no es postgres).
13 Roles de los usuarios de DB ● Superusuario: este usuario no tiene ninguna restricción. Por ejemplo, podrá crear nuevos usuarios; para ello, ejecutar: – CREATE USER nombre CREATEUSER ● Creador de DB: tiene permiso para crear DB. Para crear un usuario de estas características utilizar el comando: – CREATE USER nombre CREATEDB ● Password: sólo es necesario si por cuestiones de seguridad se desea controlar el acceso de los usuarios cuando se conecten a una DB. Para crear un usuario con contraseña, se puede utilizar: – CREATE USER nombre PASSWORD ‘palabra_clave’
14 Cambios de atributos ● A un usuario se le pueden cambiar los atributos utilizando el comando ALTER USER. ● También se pueden hacer grupos de usuarios que compartan los mismos privilegios con: – CREATE GROUP NomGrupo ● Y para insertar usuarios en este grupo: – ALTER GROUP NomGrupo ADD USER Nombre1 ● O para borrar: – ALTER GROUP NomGrupo DROP USER Nombre1
15 Privilegios ● Cuando se crea una DB, los privilegios son para el usuario que la crea (y para el superuser). ● Para permitir que otro usuario utilice esta DB o parte de ella, se le deben conceder privilegios. ● Hay diferentes tipos de privilegios como SELECT, INSERT, UPDATE, DELETE, RULE, REFERENCES, TRIGGER, CREATE, TEMPORARY, EXECUTE, USAGE, y ALL PRIVILEGES.
16 Privilegios ● Para asignar los privilegios, se puede utilizar: – GRANT UPDATE ON objeto TO usuario ● Donde usuario deberá ser un usuario válido de PostgreSQL y objeto, una tabla, por ejemplo. ● Este comando lo deberá ejecutar el superusuario o el dueño de la tabla. ● El usuario PUBLIC puede ser utilizado como sinónimo de todos los usuarios y ALL como sinónimo de todos los privilegios ● Por ejemplo, para quitar todos los a todos los usuarios de objeto, se puede ejecutar: – REVOKE ALL ON objeto FROM PUBLIC
17 Mantenimiento ● Hay un conjunto de tareas que son responsabilidad del administrador de DB y que se deben realizar periódicamente: 1.Recuperar el espacio: se deberá ejecutar periódicamente el comando VACUUM, el cual recuperará el espacio de disco de filas borradas o modificadas, actualizará las estadísticas utilizadas por el planificador de PostgreSQL y mejorará las condiciones de acceso. 2.Reindexar: PostgreSQL en ciertos casos puede dar algunos problemas con la reutilización de los índices, por ello es conveniente utilizar REINDEX periódicamente para eliminar páginas y filas. También se puede utilizar contrib/reindexdb para reindexar una DB entera (se debe tener en cuenta que dependiendo del tamaño de las DB estos comandos pueden tardar un cierto tiempo).
18 Mantenimiento 3.Cambio de archivos log: se debe evitar que los archivos de log sean de tamaño muy grande y difíciles de manejar. Se puede hacer fácilmente cuando se inicia el servidor con: pg_ctl start | logrotate logrotate renombra y abre un nuevo archivo de log y se puede configurar con /etc/logrotate.conf. 1.Copia de seguridad y recuperación (backup y recovery): existen dos formas de salvar los datos, por la sentencia SQL Dump o salvando el archivo de la DB. El primero será: pg_dump ArchivoDB > ArchivoBackup Para recuperar, se puede utilizar: psql ArchivoDB < ArchivoBackup Para salvar todas las DB del servidor, se puede ejecutar: pg_dumpall > ArchivoBackupTotal
19 MySQL ● MySQL es un DBMS ( Database Management System). ● Un DBMS es el que puede añadir y procesar los datos almacenados dentro de la DB. ● Al igual que PostgreSQL, MySQL es una base de datos relacional, lo que significa que almacena los datos en tablas en lugar de una única ubicación lo cual permite mayor velocidad y flexibilidad. ● MySQL provee en su página web un conjunto de estadísticas y prestaciones en comparación con otras DB para mostrar al usuario cuán rápida, fiable y fácil es de usar. La decisión de elegir una DB se debe hacer cuidadosamente en función de las necesidades de los usuarios y del entorno donde se utilizará esta DB.
20 Instalación ● Obtener desde http://www.mysql.com/ o desde cualquiera de los repositorios de software. Se pueden obtener los binarios y los archivos fuente para compilarlos e instalarlos. ● En el caso de los binarios, utilizar la distribución de Debian y seleccionar los paquetes mysql-client, mysql-server y mysql-common. ● La instalación, después de unas preguntas, creará un usuario mysql y una entrada en /etc/init.d/mysql para arrancar/parar el servidor en el boot. También se puede hacer manualmente haciendo: – /etc/init.d/mysql start|stop
21 Instalación en formato binario ● Si obtenemos el binario en otro formato (ni DEB ni RPM), por ejemplo gz desde el sitio web de MySQL, deberá ejecutar los siguientes comandos para instalar la DB: – groupadd mysql – useradd -g mysql mysql – cd /usr/local – tar zxvf /ruta/hacia/mysql-VERSION-OS.tar.gz – ln -s /ruta/hacia/mysql-VERSION-OS mysql – cd mysql – scripts/mysql_install_db – chown -R root. – chown -R mysql data – chgrp -R mysql. – bin/mysqld_safe --user = mysql \verb+&+
22 Instalación desde fuentes ● groupadd mysql ● useradd -g mysql mysql ● gunzip < mysql-VERSION.tar.gz | tar -xvf - ● cd mysql-VERSION ●./configure --prefix = /usr/local/mysql ● make ● make install ● scripts/mysql_install_db ● chown -R root /usr/local/mysql ● chown -R mysql /usr/local/mysql/var ● chgrp -R mysql /usr/local/mysql ● cp support-files/mymedium.cnf /etc/my.cnf ● /usr/local/mysql/bin/mysqld_safe --user = mysql &
23 Postinstalación y verificación ● Una vez instalada (ya sea de los binarios o del código fuente), se deberá verificar si el servidor funciona correctamente. En Debian puede hacer directamente: – /etc/init.d/mysql start Inicia el servidor – mysqladmin version Genera información de versiones y (c) – mysqladmin variables Muestra los valores de las variables – mysqladmin -u root shutdown Finaliza la ejecución del servidor – mysqlshow Mostrará las DB predefinidas – mysqlshow mysql Mostrará las tablas de la DB mysql
24 El programa monitor (cliente) mysql ● El cliente mysql se puede utilizar para crear y utilizar DB simples, es interactivo y permite conectarse al servidor, ejecutar búsquedas y visualizar los resultados. ● También funciona en modo batch (como un script) donde los comandos se le pasan a través de un archivo. Para ver todas las opciones del comando, se puede ejecutar mysql –help. ● Podremos realizar una conexión (local o remota) con el comando mysql, por ejemplo, para una conexión por la interfaz de red pero desde la misma máquina – mysql -h localhost -u mysql -p NombreDB
25 El programa monitor (cliente) mysql ● Una vez dentro, el mysql pondrá un prompt (mysql>) y esperará a que le introduzcamos algún comando (propio y SQL), por ejemplo help. A continuación, daremos una serie de comandos para probar el servidor (recordar poner siempre el ‘;’ para terminar el comando): – mysql> SHOW DATABASES; Muestra las DB disponibles. – mysql> SHOW TABLES; Muestra las tablas. – mysql> DESCRIBE pet; Muestra la definición de la tabla. – mysql> USE test Cambia la DB.
26 Administración ● Mysql dispone de un archivo de configuración en /etc/mysql/my.cnf (en Debian), al cual se le pueden cambiar las opciones por defecto a la DB, como por ejemplo, el puerto de conexión, usuario, contraseña de los usuarios remotos, archivos de log, archivos de datos, si acepta conexiones externas, etc. ● Con respecto a la seguridad, se deben tomar algunas precauciones: – No dar a nadie (excepto al usuario root de mysql) acceso a la tabla user dentro de la DB mysql, ya que aquí se encuentran las contraseñas de los usuarios que podrían ser utilizados con otros fines.
27 Administración – Verificar mysql -u root. Si se puede acceder, significa que el usuario root no tiene contraseña. Para cambiarlo, se puede hacer: mysql -u root mysql mysql> UPDATE user SET Password = PASSWORD(‘new_password’) -> WHERE user = ‘root’; mysql> FLUSH PRIVILEGES; ● Ahora, para conectarse como root: mysql -u root -p mysql
28 Administración – Comprobar la documentación respecto a las condiciones de seguridad y del entorno de red para evitar problemas de ataques y/o intrusión. – Para hacer copias de la base de datos, se puede utilizar el comando: ● mysqldump --tab = /DirectorioDestino --opt NombreDB – O también: ● mysqlhotcopy NombreDB /DirectorioDestino – Asimismo, se pueden copiar los archivos *.frm’, *.MYD’, y *.MYI con el servidor parado. Para recuperar, ejecutar: ● REPAIR TABLE o myisamchk -r
29 Preguntas y respuestas