14 KiB
DBA
Seguridad y Optimización de la BD
DBA
¿Quien es un DBA?
Es el profesional responsable de administrar la base de datos
Funciones
- Evalúa el ambiente, es decir, el Hardware, realiza instalación y mantenmiento de MySQL según las necesidades operativas de la empresa
- Configura que los accesos se realizen de forma segura. Conexiones/IDE y otras interfaces
- Mantiene un buen desempeño de la BD. Trabaja con los indices para mejorar las consultas a la base de datos
- Almacenamiento/Respaldo de datos. Realiza los backups
- Apoya al área de desarrollo con el mantenimiento de los datos. Elimina datos no desados, desfragmentar la DB, entre otros
- Monitorea la instalación de MySQL. Gestiona los recursos usados por la BD y la adecua a las necesidades de la los usuarios.
- Configura el ambiente y sus diversas propiedades (MySQL
my.ini
) - Administra los usuarios que tendrán acceso a la DB. Otorga niveles de acceso
Conexiones
MariaDB
mariadb -u <USER> -h <HOST> [<DBNAME>] -P <PORT> -p
MySQL
mysql -u <USER> -h <HOST> [<DBNAME>] -P <PORT> -p
Detener servicio
SystemD
systemctl stop mariadb
systemctl stop mysql
Servicio de Windows
# C:\Windows\system32
> net stop mysql80
Tuning
La puesta a punto de MySQL se puede realizar de 4 maneras
1. Esquemas, índices, variables interdas de MySQL (mysqld), Hardware y S.O.
- HARDWARE
- Utilizar sistemas operativos de 64-bits. Mysql puede usar procesamiento en paralelo y consumir toda la memoria
- Configuración de RAM. Parametro que permite indicar el máximo de memoria disponible para los procesos. No se recomienda exceder el 50%
- Dependiendo de la forma con la que se trabaje la base de datos va a variar su consumo de memoria
- El tipo del disco: HDD, SSD, NVME
- Conexión SATA, SAS, M2, PCIe.
- Uso del controlador de disco RAID (0, 1, 5 y 10) para la seguridad
de los datos
- RAID 0: Divide los datos en dos HD diferentes, y actuan como un solo disco a nivel de S.O
- RAID 1: Uno de los HD es copia del otro, y lo que realize en uno se replica automáticamente en el otro
- RAID 5: Divide los datos en más de dos HD diferentes, y actuan como un solo disco a nivel de S.O
- RAID 10: Los discos tiene espejos, y lo que realize en uno se replica automáticamente en el otro
- RAID 1 y 10: Utilizan mas espacio producto de la redundancia, pero son mas seguros por tener backup disponible
RAID
RAID 0
RAID 1
RAID 2
RAID 3
Variables de ambiente MySQL
Estas variables establecen parametros de funcionamento predefindos. Existen mas de 250 variables. Estas pueden cambiar según la versión de MySQL
SHOW STATUS
muestra los valores actuales de las variables de ambiente
2 Tipos de variables de ambiente GLOBAL y SESSION
my.ini
o my.cnf
: Directivas para daemon(servicio) y client
SHOW GLOBAL STATUS LIKE '%tmp%tables%';
+-------------------------+-------+
| Variable_name | Value |
+-------------------------+-------+
| Created_tmp_disk_tables | 338 |
| Created_tmp_tables | 18175 |
+-------------------------+-------+
SHOW GLOBAL VARIABLES LIKE '%table_size%';
+-----------------------+----------------------+
| Variable_name | Value |
+-----------------------+----------------------+
| max_heap_table_size | 16777216 |
| tmp_disk_table_size | 18446744073709551615 |
| tmp_memory_table_size | 16777216 |
| tmp_table_size | 16777216 |
+-----------------------+----------------------+
SET GLOBAL tmp_table_size = 33554432;
SHOW GLOBAL VARIABLES LIKE 'tmp_table_size';
+----------------+----------+
| Variable_name | Value |
+----------------+----------+
| tmp_table_size | 33554432 |
+----------------+----------+
Esta modificación es efímera, se pierde al reiniciar el servicio o maquina
Para establecer el valor de forma permanente editar archivos de configuración
Debian
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
#
# * Fine Tuning
#
tmp_table_size = 33554432
Windows
C:\ProgramData\MySQL Server 8.0\my.ini
Mecanismos de Almacenamiento
Es la forma de almacenar la información en las tablas
MySQL 8.0 Community dispone 9 mecanismos para almacenar datos
Una misma DB puede usar diversos mecanismos en sus tablas
ENGINE
Es el parametro que indica el mecanismo de almacenamiento
MyISAM
- No es transaccional. No esta diseñado para que varios usuarios realicen operaciones en las tablas simultaneamente
- Solo permite el bloqueo a nivel de tabla (Lectura mas rápida)
- Recomendada para tablas que no estan en continio cambio
- La clave externa no soporta Full Text
- Almacena datos de manera mas compacta (Optimiza espacios de almacenamiento)
- Implementa índices
HASH
yBTREE
key_buffer_size
: Determina el tamaño de cache para almacenar los indices MyISAM. Varía de 8MB a ~4GB según el S.O.concurrent_insert
: Comportamiento de inserciones concurrentes dentro de tabla MyISAM0
: Inserciones simultaneas desactivdas1
: Inserciones simultaneas sin intervalo de datos (Al mismo tiempo)0
: Inserciones simultaneas con intervalo de datos
delay_key_write
: Atraso entre la actualización de índices y el momento en que se crea la tabla (Espera a que todos los registros sean insertados para despues actualizar los indices. Mas consistencia. Menos rapidez)max_write_lock_count
: Dertermina el número de grabaciones en las tablas que tendrán precedencia a las lecturas (Prioriza la cantidad de grabaciones que se realizaran antes de las lecturas en varias conexiones)preload_buffer_size
: Tamaño del buffer a ser usando antes de cargar los índices de claves de las tablas. 32KB- El uso de estas variables de ambiente se realiza en la medida de lo necesario. Lo recomendable es usar esos valores por defecto
myisamchk
: Analiza, optimiza y repara tablas MyISAM (las reconstruye)myisampack
: Crea tablas compactadas solo para lecturamyisam_ftpdump
: Muestra información completa de los campos tipo texto
InnoDB
- Mecanismo de almacenamiento transaccional más utilizado en MySQL
- Esta diseñado para que varios usuarios realicen operaciones simultaneas sobre las tablas
- Soporte transaccional completo. Soporte a claves externas
- Cache de buffer configurado de forma separada tanto para la base como para el índice
- Bloqueo de tabla a nivel de línea
- Indexacion BTREE
- Back-up de la DB online. Sin bloqueo
- Tablas
innodb_data_file_path
: Determina la ruta y tamaño máximo del archivo dentro del sistema donde se almacena la informaciónìnnodb_data_home_dir
: Ruta común de todos los archivos innodb. Cuando se especifica, guarda todo dentro de ese directorio (defaultmysqldata
)innodb_file_per_table
: Separa el almacenamiento de datos e indices. Por defecto almacena datos e índices de forma compartida
- Desempeño
innodb_buffer_poll_size
: Tamaño de almacenamiento usado para indices y datos en cacheinnodb_flush_log_at_trx_commit
: Frecuencia de escritura del log-in en el discoinnodb_log_file_size
: Tamaño en Bytes de archivos log-in (default 5MB)
MEMORY
- Mecanismo de almacenamiento que crea las tablas en la memoria RAM, no en disco
- No soporta clave externa
- Acceso muy rápido a la información
- Los datos necesitan ser reinicializados junto con el servidor
- Bloqueo a nivel de tabla
- Indice utiliza HASH por defecto y BTREE
- Formato de linea de longitud fija. No soporta
BLOB
/TEXT
Usando ENGINE
CREATE TABLE df_table (id INT, nombre VARCHAR(100));
ALTER TABLE df_table ENGINE = MyISAM;
/* MariaDB */
SHOW ENGINES;
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
| CSV | YES | Stores tables as CSV files | NO | NO | NO |
| MRG_MyISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| Aria | YES | Crash-safe tables with MyISAM heritage. Used for internal temporary tables and privilege tables | NO | NO | NO |
| MyISAM | YES | Non-transactional engine with good performance and small data footprint | NO | NO | NO |
| SEQUENCE | YES | Generated tables filled with sequential values | YES | NO | YES |
| InnoDB | DEFAULT | Supports transactions, row-level locking, foreign keys and encryption for tables | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
Creando una base de datos
CREATE DATABASE base DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- o también
CREATE DATABASE base DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Directorio de las BBDD
VARIABLES WHERE Variable_Name LIKE '%dir';
+---------------------------+----------------------------+
| Variable_name | Value |
+---------------------------+----------------------------+
| aria_sync_log_dir | NEWFILE |
| basedir | /usr |
| character_sets_dir | /usr/share/mysql/charsets/ |
==>>| datadir ------------------| /var/lib/mysql/ -----------|<<==
| innodb_data_home_dir | |
| innodb_log_group_home_dir | ./ |
| innodb_tmpdir | |
| lc_messages_dir | |
| plugin_dir | /usr/lib/mysql/plugin/ |
| slave_load_tmpdir | /tmp |
| tmpdir | /tmp |
| wsrep_data_home_dir | /var/lib/mysql/ |
+---------------------------+----------------------------+
sudoedit /etc/mysql/mariadb.conf.d/50-server.cnf
#
# * Basic Settings
#
...
datadir = /var/lib/mysql
Backup
Back-up lógico
Exporta todas las estructuras, tablas, rutinas, etc. a un script sql. Este permite recrear la base de datos. Es lento ya que se ejecuta comando a comando
Back-up físico
Contiene todos los archivos binarios del sistema donde esta almacenada la información. Es más rápido pero no permite edicion antes de su restauración
mysqldump
Más information
- Create a backup (user will be prompted for a password):
mysqldump --user user --password database_name --result-file=path/to/file.sql
- Backup a specific table redirecting the output to a file (password prompted):
mysqldump --user user --password database_name table_name > path/to/file.sql
- Backup all databases redirecting the output to a file (password prompted):
mysqldump --user user --password --all-databases > path/to/file.sql
- Backup all databases from a remote host,
redirecting the output to a file (password prompted):
mysqldump --host=ip_or_hostname --user user --password --all-databases > path/to/file.sql
--routines --events
MariaDB usa mariadb-dump
mariadb-dump --help
mysqldump -u <user> -p<password> --databases <db_name> > out.sql
LOCK
MariaDB
-- To lock a table:
BACKUP LOCK table_name
-- To unlock a table:
BACKUP UNLOCK
MySQL
LOCK instance for backup;
UNLOCK INSTANCE;