Saltar al contenido

Las herramientas de cada gestor

Cómo se arranca y se para un servicio de base de datos, qué mandatos trae MySQL y MariaDB, cuáles trae PostgreSQL, dónde vive la configuración de cada producto y qué consolas gráficas se usan.

Arrancar y parar el servicio

Un gestor de base de datos es un servicio del sistema y se puede manejar de dos maneras: con las órdenes propias del producto o con el gestor de servicios del sistema operativo. Las dos hacen lo mismo por debajo y conviene conocer las dos, porque en un incidente no siempre está disponible la que uno prefiere.

GestorOrden propiaVía del sistema
OracleSQL*Plus, con STARTUP y SHUTDOWN desde una sesión de administración.Los guiones de servicio del producto.
PostgreSQLpg_ctl start, stop, restart y status.systemctl start postgresql y equivalentes.
MySQL y MariaDBmysqladmin shutdown para parar.systemctl start mysqld, o el servicio equivalente.

La comprobación de si el servicio está vivo tiene también sus dos caminos. Desde el producto se pregunta al propio motor, lo que además confirma que responde; desde el sistema se mira el estado del servicio o directamente la lista de procesos. Que el proceso exista no garantiza que la base esté abierta, así que la comprobación buena es la que interroga al gestor.

bash
mysqladmin -u root -p ping
systemctl status mysqld
ps aux | grep mysqld

pg_ctl status

Que el proceso esté levantado no significa que la base esté abierta. La comprobación fiable es la que le pregunta al gestor, no la que mira la lista de procesos.

Para el examen

  • Qué es el gestor para el sistema: un servicio más

  • Cómo se arranca y para: con systemctl

  • enable: lo marca para el arranque automático

Los modos de arranque y parada de Oracle

Oracle no tiene un solo modo de parar ni un solo modo de arrancar, y cuál se elige tiene consecuencias directas sobre las sesiones abiertas y sobre lo que hará el gestor la próxima vez que se levante. Es materia de examen porque las cuatro opciones de parada se parecen mucho.

Modo de paradaQué hace
NORMALEspera a que todos los usuarios cierren sesión por su cuenta. Es la más limpia y la que puede no terminar nunca.
TRANSACTIONALNo admite conexiones nuevas y espera a que termine cada transacción en curso; después desconecta.
IMMEDIATEDeshace las transacciones no confirmadas, desconecta a los usuarios y cierra. Es la opción de uso corriente.
ABORTCorta en seco, sin deshacer ni cerrar ordenadamente. Al arrancar de nuevo hará falta recuperación de la instancia.

El arranque también es escalonado, y refleja exactamente la distinción entre instancia y base de datos de «El oficio del DBA»: NOMOUNT levanta la instancia sin abrir nada, MOUNT lee los ficheros de control pero no deja entrar a los usuarios, y OPEN es el estado normal de servicio. RESTRICT abre solo para las cuentas con privilegio de sesión restringida, que es lo que se usa para hacer mantenimiento con la base arriba y sin usuarios dentro.

sql
SHUTDOWN IMMEDIATE;

STARTUP NOMOUNT;
STARTUP MOUNT;
STARTUP OPEN;
STARTUP RESTRICT;

Dos avisos de escritura, porque los apuntes suelen traerlos mal: el mandato de arranque es STARTUP, no START, y la opción rápida de parada es IMMEDIATE, con dos emes y sin ene delante.

Para el examen

  • NOMOUNT: lee el fichero de parámetros

  • MOUNT: abre los ficheros de control

  • OPEN: abre los ficheros de datos

  • SHUTDOWN ABORT: la parada brusca; exige recuperación al arrancar

El juego de mandatos de MySQL y MariaDB

MySQL reparte la administración en varios programas de línea de mandatos, cada uno con un cometido. Saber cuál hace qué es de las preguntas más agradecidas del examen, porque los nombres se parecen y basta con fijar el verbo de cada uno.

MandatoPara qué sirve
mysqlCliente interactivo de línea de mandatos. Es por donde se lanza SQL y por donde se restaura un respaldo en formato de guion.
mysqldumpCopia de seguridad de bases o de tablas en forma de guion con las sentencias de creación y de inserción.
mysqladminUtilidad de administración general: comprobar que el servidor responde, pararlo, ver la versión, listar procesos, crear una base o recargar privilegios.
mysqlcheckAnaliza, optimiza, verifica y arregla tablas con el servidor en marcha.
myisamchkLo mismo, pero solo para tablas MyISAM y trabajando directamente sobre los ficheros.
mysqlimportCarga datos en una tabla desde un fichero de texto externo.
mysqlshowMuestra qué bases, tablas y columnas hay, sin escribir SQL.
mysqldumpslowResume el registro de consultas lentas y saca las que más tardan.

La pareja que más se confunde es mysqlcheck y myisamchk. La regla práctica es la del servidor: mysqlcheck habla con el servidor y por tanto funciona con la base arriba y con cualquier motor; myisamchk toca los ficheros por debajo, solo entiende MyISAM y hay que usarlo con la tabla fuera de servicio para no corromperla más.

mysqldump copia, mysql restaura, mysqladmin administra, mysqlcheck repara con el servidor en marcha y myisamchk repara ficheros MyISAM por debajo.

Para el examen

  • mysqldump: saca la copia lógica

  • mysqladmin: administra el servidor

  • mysqlcheck: revisa y repara tablas

Las opciones que hay que conocer

De mysqldump, las opciones que cambian el resultado de una copia y que conviene tener presentes son las que deciden el alcance, qué se incluye y qué pasa al restaurar sobre una base que ya existe.

bash
mysqldump -u root -p llegando > respaldo.sql
mysqldump -u root -p --databases llegando alumnos > respaldo.sql
mysqldump -u root -p --all-databases > respaldo.sql

# --routines      incluye también procedimientos y funciones
# --add-drop-database  antepone el borrado de la base a su creación
# --no-data       solo la estructura, sin filas

De mysqladmin, las subórdenes se leen solas y son las que aparecen en las preguntas: ping para saber si el servidor está vivo, shutdown para pararlo, version para la versión y el estado, processlist para ver qué se está ejecutando en ese momento, kill para matar un proceso concreto, create para crear una base, reload para recargar las tablas de privilegios y stop-slave para detener la replicación en un servidor esclavo. Con la opción de servidor remoto, todo eso se hace contra otra máquina.

bash
mysqladmin -u root -p processlist
mysqladmin -u root -p kill 4711
mysqladmin -u root -p -h 10.0.0.15 status

Para el mantenimiento de tablas hay además equivalentes en SQL puro, que es lo que ejecuta mysqlcheck por debajo: OPTIMIZE TABLE, ANALYZE TABLE, CHECK TABLE y REPAIR TABLE. Conviene saber que existen, porque en un servidor donde no se tiene acceso al intérprete de mandatos son la única vía.

Para el examen

  • Poner la contraseña en la línea de órdenes: la deja visible en la lista de procesos y en el histórico

  • Alternativa: que la pida de forma interactiva

El juego de mandatos de PostgreSQL

PostgreSQL sigue la misma filosofía: un programa pequeño por tarea, todos ellos envoltorios sobre sentencias SQL que se podrían escribir a mano. La ventaja para el administrador es que se automatizan bien desde un guion.

MandatoPara qué sirve
psqlCliente interactivo. También restaura los respaldos que están en formato de guion SQL.
pg_ctlArranca, para, reinicia y consulta el estado del servidor.
createdb / dropdbCrea y borra bases de datos.
createuser / dropuserCrea y borra roles. El de creación da de alta un rol con capacidad de conexión.
pg_dumpCopia de seguridad de una base de datos.
pg_dumpallCopia de todas las bases del servidor, incluidos los objetos globales como los roles.
pg_restoreRestauración cuando la copia se hizo en el formato propio del producto.
vacuumdbLimpia y analiza: recupera el espacio de las filas muertas y actualiza las estadísticas.
reindexdbReconstruye los índices cuando se han degradado.

Vacuumdb merece una explicación aparte porque no tiene equivalente en los otros gestores. PostgreSQL no borra ni sobrescribe una fila cuando se actualiza: escribe una versión nueva y deja la antigua marcada, porque puede haber transacciones que todavía la estén viendo. Esas versiones antiguas son las filas muertas, y si nadie las limpia el fichero de la tabla no para de crecer aunque el número de filas útiles sea el mismo. Eso es lo que hace VACUUM, y de paso recalcula las estadísticas con las que el optimizador decide sus planes.

En PostgreSQL, un fichero que crece sin que crezca el número de filas casi siempre significa que falta mantenimiento de VACUUM.

Para el examen

  • pg_dump: copia UNA base de datos

  • pg_dumpall: copia el clúster entero, incluidos los roles globales

Cómo se invocan

Los parámetros de conexión son comunes a casi todos los mandatos, así que se aprenden una vez: servidor, base de datos, usuario y petición de contraseña.

bash
psql -h servidor -d llegando -U panel_web -W

pg_ctl start
pg_ctl stop
pg_ctl restart
pg_ctl status

En la copia y la restauración lo que hay que fijar es la correspondencia entre formatos, que es donde se falla. Si la copia sale en formato de guion SQL, se restaura con el cliente redirigiendo el fichero a la entrada o pasándolo como fichero de órdenes. Si sale en el formato propio del producto, hace falta el restaurador específico.

bash
# Copia y restauración en formato guion SQL
pg_dump llegando > respaldo.sql
psql llegando < respaldo.sql
psql -d llegando -f respaldo.sql

# Copia y restauración en formato propio
pg_dump -Fc llegando > respaldo.dump
pg_restore -d llegando respaldo.dump

# Todas las bases del servidor
pg_dumpall > respaldo_completo.sql
bash
vacuumdb llegando
vacuumdb --analyze llegando
reindexdb llegando

La regla que resume todo: pg_restore solo sirve para las copias hechas en el formato propio; las que están en guion SQL se restauran con psql, porque no son más que un fichero de sentencias.

Para el examen

  • psql: la consola interactiva

  • Sus órdenes propias: empiezan por barra invertida

  • Las tres básicas: \l lista bases, \dt tablas y \q sale

Dónde vive la configuración y qué consolas hay

Localizar el fichero de configuración es lo primero que se necesita cuando hay que cambiar un puerto, subir un límite de conexiones o abrir el servicio a la red. Cada producto lo coloca en un sitio y lo trocea a su manera.

ProductoFicheros de configuración
MySQL y MariaDBEl fichero principal my.cnf, que a su vez incluye los directorios conf.d, mariadb.conf.d y mysql.conf.d. Ahí están el usuario, el puerto y la dirección de escucha.
PostgreSQLpostgresql.conf para el servidor (puerto, conexiones máximas, directorio de datos) y pg_hba.conf para la autenticación de clientes.

Cuidado con el nombre del fichero de MySQL: es my.cnf, con las consonantes en ese orden. Aparece mal escrito en muchísimos apuntes y en una pregunta con cuatro rutas parecidas es exactamente el detalle que se usa para distinguirlas.

Además de la línea de mandatos, cada producto tiene su consola gráfica. En SQL Server es SQL Server Management Studio, la aplicación con la que se gestionan y administran todos sus componentes, y es la que se pregunta por sus siglas. Oracle tiene sus consolas empresariales y su cliente SQL*Plus en texto, y en MySQL y PostgreSQL las consolas gráficas más usadas son de terceros.

Un parámetro que se pregunta y que no está en ninguno de esos ficheros es NLS_LANG de Oracle: se fija en el lado del cliente y declara el juego de caracteres con el que ese cliente trabaja, para que el gestor haga la conversión que corresponda. Si está mal, los datos no se corrompen en el servidor pero llegan con los acentos rotos a la aplicación.

Para el examen

  • postgresql.conf: ajusta el servidor

  • pg_hba.conf: decide QUIÉN entra, desde dónde y con qué método

  • Si la conexión se rechaza: el fichero a mirar es pg_hba.conf