Cicle formatiu: Administració de Sistemes Informàtics en Xarxa (ASIX)
Durada: 198 h (132 h centre + 66 h empresa)
SGBD de referència: MariaDB
Abans de les bases de dades modernes, la informació es guardava en fitxers. Existeixen diversos tipus:
| Tipus | Descripció |
|---|---|
| Plans (seqüencials) | Els registres s’emmagatzemen un darrere l’altre. L’accés és lent perquè cal llegir des del principi. |
| Indexats | Disposen d’un índex que permet localitzar registres sense recórrer tot el fitxer. |
| Accés directe | Es calcula la posició física del registre mitjançant una funció hash. L’accés és molt ràpid. |
Problemes dels sistemes de fitxers tradicionals:
Una base de dades (BD) és una col·lecció de dades relacionades entre si, organitzades de manera que es puguin emmagatzemar, recuperar i modificar de forma eficient.
| Model | Descripció | Exemples |
|---|---|---|
| Jeràrquic | Les dades s’organitzen en forma d’arbre. Cada registre fill té un únic pare. | IMS d’IBM |
| En xarxa | Extensió del jeràrquic; un fill pot tenir múltiples pares. | IDMS |
| Relacional | Les dades s’organitzen en taules (relacions). És el model més estès. | MariaDB, PostgreSQL, Oracle |
| Orientat a objectes | Les dades es representen com a objectes, amb atributs i mètodes. | db4o |
| NoSQL | Dissenys no relacionals: documents, clau-valor, grafs, columnar. | MongoDB, Redis, Cassandra |
Un SGBD (en anglès DBMS, Database Management System) és el programari que permet crear, mantenir i controlar l’accés a una base de dades.
El model de dades és un conjunt de conceptes i notacions per descriure les dades d’un sistema d’informació. El disseny passa per tres nivells:
El diagrama E/R és una representació gràfica del model conceptual que descriu les entitats del sistema i les relacions entre elles.
| Element | Símbol | Descripció |
|---|---|---|
| Entitat | Rectangle | Objecte del món real sobre el qual volem guardar informació. Ex: CLIENT, PRODUCTE. |
| Atribut | Ellipse | Propietat o característica d’una entitat. Ex: nom, preu. |
| Atribut clau | Ellipse subratllada | Atribut que identifica unívocament cada instància. Ex: DNI, codi_producte. |
| Relació | Rombe | Associació entre dues o més entitats. Ex: COMPRA. |
| Atribut multivaluat | Ellipse doble | Pot tenir múltiples valors. Ex: telèfon. |
| Atribut derivat | Ellipse discontínua | Es calcula a partir d’altres atributs. Ex: edat (de data_naixement). |
Indica el nombre d’instàncies d’una entitat que es poden associar a instàncies d’una altra:
Una entitat dèbil no té prou atributs per
identificar-se per si sola; depèn d’una entitat forta.
Ex: LÍNIA_COMANDA depèn de COMANDA.
Es representa amb rectangle doble; la relació identificadora, amb rombe
doble.
El model E/R ampliat afegeix:
PERSONA → EMPLEAT, CLIENT.
| Terme relacional | Equivalent informal |
|---|---|
| Relació | Taula |
| Tupla | Fila / registre |
| Atribut | Columna / camp |
| Domini | Conjunt de valors possibles d’un atribut |
| Grau | Nombre de columnes d’una relació |
| Cardinalitat | Nombre de files d’una relació |
NULL.NULL.| Cas E/R | Transformació |
|---|---|
| Entitat forta | Una taula amb tots els seus atributs; la clau E/R és la PK. |
| Entitat dèbil | Una taula que inclou la PK de l’entitat forta com a part de la seva PK (clau composta). |
| Relació 1:1 | S’incorpora la PK d’una entitat com a FK a l’altra (es prefereix el costat de participació total). |
| Relació 1:N | La PK del costat “1” s’afegeix com a FK al costat “N”. |
| Relació N:M | Es crea una nova taula de relació amb les PK de les dues entitats com a PK composta. |
| Atribut multivaluat | Es crea una nova taula amb la PK de l’entitat i el valor de l’atribut. |
| Especialització | Opció 1: una taula per a la superclasse i una per a cada subclasse (FK a superclasse). Opció 2: una taula per a cada subclasse amb tots els atributs. Opció 3: una sola taula amb un atribut discriminador. |
La normalització és el procés de descomposició de les relacions per eliminar redundàncies i anomalies d’inserció, modificació i eliminació.
A → B
significa que cada valor d’A determina un únic valor de B.B depèn d’una part d’una
clau composta.A → B i B → C, per tant A → C (on B no és
clau).1FN (Primera Forma Normal)
2FN (Segona Forma Normal)
Exemple:
Taula incorrecta: COMANDA_PRODUCTE(cod_comanda, cod_producte, quantitat, nom_producte)
nom_producte depèn només de cod_producte (DF parcial)
Solució:
COMANDA_PRODUCTE(cod_comanda, cod_producte, quantitat)
PRODUCTE(cod_producte, nom_producte)
3FN (Tercera Forma Normal)
Exemple:
Taula incorrecta: EMPLEAT(cod_empleat, nom, cod_departament, nom_departament)
nom_departament depèn de cod_departament (DF transitiva)
Solució:
EMPLEAT(cod_empleat, nom, cod_departament)
DEPARTAMENT(cod_departament, nom_departament)
FNBC (Forma Normal de Boyce-Codd)
A → B, A ha de ser superclau.MariaDB pot gestionar-se amb eines gràfiques com:
El DDL (Data Definition Language) permet crear i modificar l’estructura de la BD.
-- Crear una base de dades
CREATE DATABASE institut
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- Seleccionar la base de dades activa
USE institut;
-- Eliminar una base de dades
DROP DATABASE IF EXISTS institut;CREATE TABLE alumne (
id_alumne INT NOT NULL AUTO_INCREMENT,
nom VARCHAR(50) NOT NULL,
cognoms VARCHAR(100) NOT NULL,
data_naix DATE,
email VARCHAR(100) UNIQUE,
CONSTRAINT pk_alumne PRIMARY KEY (id_alumne)
);-- Afegir una columna
ALTER TABLE alumne ADD COLUMN telefon VARCHAR(15);
-- Modificar el tipus d'una columna
ALTER TABLE alumne MODIFY COLUMN telefon VARCHAR(20);
-- Eliminar una columna
ALTER TABLE alumne DROP COLUMN telefon;
-- Renomenar una taula
ALTER TABLE alumne RENAME TO estudiant;DROP TABLE IF EXISTS alumne;
-- Buidar una taula (elimina totes les files, però manté l'estructura)
TRUNCATE TABLE alumne;| Tipus | Bytes | Rang (amb signe) |
|---|---|---|
TINYINT |
1 | -128 a 127 |
SMALLINT |
2 | -32.768 a 32.767 |
MEDIUMINT |
3 | -8.388.608 a 8.388.607 |
INT / INTEGER |
4 | -2.147.483.648 a 2.147.483.647 |
BIGINT |
8 | ±9,2 × 10¹⁸ |
DECIMAL(p,s) |
Variable | Precisió exacta; útil per a diners |
FLOAT |
4 | Punt flotant, precisió simple |
DOUBLE |
8 | Punt flotant, precisió doble |
| Tipus | Descripció |
|---|---|
CHAR(n) |
Longitud fixa de n caràcters (màx. 255). |
VARCHAR(n) |
Longitud variable fins a n caràcters (màx.
65.535). |
TEXT |
Text llarg (fins a 65.535 bytes). |
MEDIUMTEXT |
Fins a 16 MB. |
LONGTEXT |
Fins a 4 GB. |
| Tipus | Format | Descripció |
|---|---|---|
DATE |
AAAA-MM-DD |
Només data. |
TIME |
HH:MM:SS |
Només hora. |
DATETIME |
AAAA-MM-DD HH:MM:SS |
Data i hora. No ajusta zona horària. |
TIMESTAMP |
AAAA-MM-DD HH:MM:SS |
Com DATETIME, però s’ajusta a la zona horària del servidor. |
YEAR |
AAAA |
Any de 4 dígits. |
| Tipus | Descripció |
|---|---|
BOOLEAN / TINYINT(1) |
0 (fals) o 1 (veritat). |
ENUM('v1','v2',...) |
Un valor d’una llista predefinida. |
SET('v1','v2',...) |
Zero o més valors d’una llista predefinida. |
BLOB |
Dades binàries (imatges, fitxers). |
JSON |
Dades en format JSON (MariaDB 10.2+). |
Les restriccions garanteixen la integritat de les dades.
CREATE TABLE matricula (
id_matricula INT NOT NULL AUTO_INCREMENT,
id_alumne INT NOT NULL,
id_modul INT NOT NULL,
curs YEAR NOT NULL DEFAULT (YEAR(CURDATE())),
nota_final DECIMAL(4,2) CHECK (nota_final BETWEEN 0 AND 10),
CONSTRAINT pk_matricula PRIMARY KEY (id_matricula),
CONSTRAINT uq_mat_alu_mod UNIQUE (id_alumne, id_modul, curs),
CONSTRAINT fk_mat_alumne FOREIGN KEY (id_alumne)
REFERENCES alumne(id_alumne)
ON DELETE RESTRICT
ON UPDATE CASCADE,
CONSTRAINT fk_mat_modul FOREIGN KEY (id_modul)
REFERENCES modul(id_modul)
ON DELETE RESTRICT
ON UPDATE CASCADE
);| Acció | Descripció |
|---|---|
RESTRICT |
No permet eliminar/modificar la fila pare si té files filles. |
CASCADE |
Propaga l’eliminació/modificació a les files filles. |
SET NULL |
Posa NULL a la FK de les files filles. |
NO ACTION |
Similar a RESTRICT (comportament per defecte). |
SET DEFAULT |
Posa el valor per defecte a la FK (poc suportat). |
SELECT [DISTINCT] llista_columnes | *
FROM taula [AS àlies]
[JOIN ...]
[WHERE condició]
[GROUP BY columnes]
[HAVING condició_grups]
[ORDER BY columnes [ASC|DESC]]
[LIMIT n [OFFSET m]];-- Totes les columnes
SELECT * FROM alumne;
-- Columnes específiques amb àlies
SELECT nom, cognoms AS 'Cognoms complets' FROM alumne;
-- Eliminar duplicats
SELECT DISTINCT curs FROM matricula;
-- Ordenació
SELECT nom, cognoms FROM alumne ORDER BY cognoms ASC, nom ASC;
-- Limitar resultats
SELECT * FROM alumne ORDER BY cognoms LIMIT 10 OFFSET 20;-- Comparació
SELECT * FROM alumne WHERE id_alumne = 5;
-- Rang
SELECT * FROM matricula WHERE nota_final BETWEEN 5 AND 7;
-- Llista de valors
SELECT * FROM modul WHERE curs IN (1, 2);
-- Patrons de text
SELECT * FROM alumne WHERE cognoms LIKE 'Garcia%';
SELECT * FROM alumne WHERE email LIKE '%@gmail.com';
-- Valors nuls
SELECT * FROM alumne WHERE email IS NULL;
SELECT * FROM alumne WHERE email IS NOT NULL;
-- Operadors lògics
SELECT * FROM matricula WHERE nota_final >= 5 AND curs = 2024;
SELECT * FROM alumne WHERE nom = 'Pere' OR nom = 'Joan';
SELECT * FROM alumne WHERE NOT (nom = 'Pere');| Funció | Descripció |
|---|---|
COUNT(*) |
Compta el nombre de files. |
COUNT(col) |
Compta els valors no nuls d’una columna. |
SUM(col) |
Suma els valors. |
AVG(col) |
Calcula la mitjana. |
MAX(col) |
Valor màxim. |
MIN(col) |
Valor mínim. |
-- Nombre total d'alumnes
SELECT COUNT(*) AS total_alumnes FROM alumne;
-- Nota mitjana per mòdul
SELECT id_modul, AVG(nota_final) AS nota_mitjana
FROM matricula
WHERE nota_final IS NOT NULL
GROUP BY id_modul;
-- Nombre d'alumnes aprovats per mòdul (nota >= 5)
SELECT id_modul, COUNT(*) AS aprovats
FROM matricula
WHERE nota_final >= 5
GROUP BY id_modul
HAVING COUNT(*) > 10
ORDER BY aprovats DESC;Nota:
WHEREfiltra files individuals abans de l’agrupament;HAVINGfiltra grups després de l’agrupament.
Retorna les files que tenen correspondència en les dues taules.
SELECT a.nom, a.cognoms, m.curs, mo.nom_modul, m.nota_final
FROM matricula m
INNER JOIN alumne a ON m.id_alumne = a.id_alumne
INNER JOIN modul mo ON m.id_modul = mo.id_modul
WHERE m.curs = 2024
ORDER BY a.cognoms;Retorna totes les files de la taula esquerra, i les
coincidents de la dreta (o NULL si no n’hi ha).
-- Alumnes amb o sense matrícules
SELECT a.nom, a.cognoms, COUNT(m.id_matricula) AS num_matricules
FROM alumne a
LEFT JOIN matricula m ON a.id_alumne = m.id_alumne
GROUP BY a.id_alumne, a.nom, a.cognoms;Igual que el LEFT JOIN però amb la taula dreta com a base.
SELECT mo.nom_modul, COUNT(m.id_matricula) AS num_alumnes
FROM matricula m
RIGHT JOIN modul mo ON m.id_modul = mo.id_modul
GROUP BY mo.id_modul, mo.nom_modul;Combina cada fila d’una taula amb totes les files de l’altra.
SELECT a.nom, mo.nom_modul
FROM alumne a CROSS JOIN modul mo;-- Empleats i el nom del seu supervisor
SELECT e.nom AS empleat, s.nom AS supervisor
FROM empleat e
LEFT JOIN empleat s ON e.id_supervisor = s.id_empleat;Una subconsulta és una SELECT dins d’una altra sentència
SQL.
-- Alumnes amb nota superior a la mitjana del seu mòdul
SELECT a.nom, a.cognoms, m.nota_final
FROM matricula m
INNER JOIN alumne a ON m.id_alumne = a.id_alumne
WHERE m.nota_final > (
SELECT AVG(nota_final)
FROM matricula
WHERE id_modul = m.id_modul
);
-- Alumnes que mai han suspès (amb NOT IN)
SELECT nom, cognoms
FROM alumne
WHERE id_alumne NOT IN (
SELECT DISTINCT id_alumne
FROM matricula
WHERE nota_final < 5
);
-- Mòduls amb més alumnes que la mitjana (amb EXISTS)
SELECT mo.nom_modul
FROM modul mo
WHERE EXISTS (
SELECT 1
FROM matricula m
WHERE m.id_modul = mo.id_modul
GROUP BY m.id_modul
HAVING COUNT(*) > (SELECT AVG(c) FROM (
SELECT COUNT(*) AS c FROM matricula GROUP BY id_modul
) AS sub)
);-- UNION: elimina duplicats
SELECT nom FROM alumne
UNION
SELECT nom FROM professor;
-- UNION ALL: manté duplicats
SELECT nom FROM alumne
UNION ALL
SELECT nom FROM professor;-- Inserir una fila especificant columnes
INSERT INTO alumne (nom, cognoms, data_naix, email)
VALUES ('Maria', 'Puig Soler', '2005-03-15', 'maria.puig@exemple.cat');
-- Inserir múltiples files
INSERT INTO modul (nom_modul, hores, curs) VALUES
('Gestió de bases de dades', 165, 1),
('Administració de sistemes', 198, 1),
('Xarxes locals', 165, 1);
-- Inserir a partir d'una consulta
INSERT INTO historial_matricula (id_alumne, id_modul, nota_final, any_hist)
SELECT id_alumne, id_modul, nota_final, YEAR(NOW())
FROM matricula
WHERE nota_final IS NOT NULL;-- Actualitzar una fila concreta
UPDATE alumne
SET email = 'maria.puig.nou@exemple.cat'
WHERE id_alumne = 12;
-- Actualitzar múltiples files
UPDATE matricula
SET nota_final = nota_final + 0.5
WHERE id_modul = 3 AND curs = 2024 AND nota_final IS NOT NULL;
-- Actualitzar amb subconsulta
UPDATE alumne
SET actiu = FALSE
WHERE id_alumne NOT IN (
SELECT DISTINCT id_alumne
FROM matricula
WHERE curs = YEAR(NOW())
);Sempre afegiu clàusula WHERE per evitar
modificar totes les files per error.
-- Eliminar una fila concreta
DELETE FROM alumne WHERE id_alumne = 12;
-- Eliminar amb condició
DELETE FROM matricula WHERE curs < 2020;
-- Eliminar amb subconsulta
DELETE FROM matricula
WHERE id_alumne IN (
SELECT id_alumne FROM alumne WHERE actiu = FALSE
);Una transacció és una seqüència d’operacions que s’executen com una unitat indivisible. Han de complir les propietats:
| Propietat | Descripció |
|---|---|
| Atomicitat | Totes les operacions s’executen o cap. |
| Consistència | La BD passa d’un estat consistent a un altre. |
| Aïllament | Les transaccions concurrents no s’interfereixen. |
| Durabilitat | Els canvis confirmats persisteixen malgrat fallades. |
-- Inici de la transacció
START TRANSACTION;
-- Operacions
UPDATE compte SET saldo = saldo - 500 WHERE id_compte = 101;
UPDATE compte SET saldo = saldo + 500 WHERE id_compte = 205;
-- Si tot ha anat bé: confirmar
COMMIT;
-- Si hi ha hagut un error: desfer
ROLLBACK;START TRANSACTION;
INSERT INTO comanda (id_client, data) VALUES (5, NOW());
SAVEPOINT sp_comanda;
INSERT INTO linia_comanda (id_comanda, id_producte, quantitat) VALUES (LAST_INSERT_ID(), 12, 3);
-- Si falla la línia, desfer només fins al savepoint
ROLLBACK TO sp_comanda;
-- Si tot va bé
COMMIT;-- Veure el nivell actual
SELECT @@tx_isolation;
-- Canviar el nivell per a la sessió
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;| Nivell | Lectures brutes | Lectures no repetibles | Lectures fantasma |
|---|---|---|---|
READ UNCOMMITTED |
Sí | Sí | Sí |
READ COMMITTED |
No | Sí | Sí |
REPEATABLE READ (per defecte) |
No | No | Sí |
SERIALIZABLE |
No | No | No |
MariaDB implementa bloqueig a escala de fila (amb InnoDB) per gestionar l’accés concurrent.
-- Bloqueig compartit (lectura): múltiples transaccions poden llegir simultàniament
SELECT * FROM alumne WHERE id_alumne = 5 LOCK IN SHARE MODE;
-- Bloqueig exclusiu (escriptura): cap altra transacció pot llegir ni escriure
SELECT * FROM alumne WHERE id_alumne = 5 FOR UPDATE;MariaDB permet escriure codi procedimental per automatitzar tasques complexes a través de procediments emmagatzemats, funcions i disparadors.
DELIMITER //
CREATE PROCEDURE exemple_variables()
BEGIN
-- Declaració de variables locals
DECLARE v_nom VARCHAR(50);
DECLARE v_total INT DEFAULT 0;
DECLARE v_nota DECIMAL(4,2);
DECLARE v_data DATE;
-- Assignació de valors
SET v_nom = 'Joan';
SET v_total = v_total + 1;
-- Assignació amb SELECT...INTO
SELECT COUNT(*) INTO v_total FROM alumne;
SELECT CONCAT('Total alumnes: ', v_total) AS resultat;
END //
DELIMITER ;
CALL exemple_variables();DELIMITER //
CREATE PROCEDURE qualificacio(IN p_nota DECIMAL(4,2), OUT p_qualif VARCHAR(20))
BEGIN
IF p_nota >= 9 THEN
SET p_qualif = 'Excel·lent';
ELSEIF p_nota >= 7 THEN
SET p_qualif = 'Notable';
ELSEIF p_nota >= 5 THEN
SET p_qualif = 'Aprovat';
ELSE
SET p_qualif = 'Suspès';
END IF;
END //
DELIMITER ;
CALL qualificacio(7.5, @resultat);
SELECT @resultat;DELIMITER //
CREATE PROCEDURE torn_horari(IN p_hora INT, OUT p_torn VARCHAR(10))
BEGIN
CASE
WHEN p_hora BETWEEN 8 AND 14 THEN SET p_torn = 'Matí';
WHEN p_hora BETWEEN 15 AND 21 THEN SET p_torn = 'Tarda';
ELSE SET p_torn = 'Nit';
END CASE;
END //
DELIMITER ;DELIMITER //
CREATE PROCEDURE inserir_alumnes_prova(IN p_n INT)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= p_n DO
INSERT INTO alumne (nom, cognoms)
VALUES (CONCAT('Nom_', i), CONCAT('Cognom_', i));
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
CALL inserir_alumnes_prova(10);DELIMITER //
CREATE PROCEDURE exemple_repeat()
BEGIN
DECLARE v_count INT DEFAULT 0;
REPEAT
SET v_count = v_count + 1;
UNTIL v_count >= 5
END REPEAT;
SELECT v_count;
END //
DELIMITER ;DELIMITER //
CREATE PROCEDURE llistar_alumnes_aprovats(IN p_id_modul INT)
BEGIN
DECLARE v_nom VARCHAR(50);
DECLARE v_cognoms VARCHAR(100);
DECLARE v_nota DECIMAL(4,2);
DECLARE fi BOOLEAN DEFAULT FALSE;
DECLARE cur CURSOR FOR
SELECT a.nom, a.cognoms, m.nota_final
FROM matricula m
INNER JOIN alumne a ON m.id_alumne = a.id_alumne
WHERE m.id_modul = p_id_modul AND m.nota_final >= 5;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET fi = TRUE;
OPEN cur;
bucle: LOOP
FETCH cur INTO v_nom, v_cognoms, v_nota;
IF fi THEN LEAVE bucle; END IF;
SELECT CONCAT(v_nom, ' ', v_cognoms, ' - ', v_nota) AS alumne_aprovat;
END LOOP bucle;
CLOSE cur;
END //
DELIMITER ;# Còpia completa d'una base de dades
mysqldump -u root -p institut > /backup/institut_$(date +%Y%m%d).sql
# Còpia de múltiples bases de dades
mysqldump -u root -p --databases institut rrhh > /backup/multi_$(date +%Y%m%d).sql
# Còpia de totes les bases de dades
mysqldump -u root -p --all-databases > /backup/total_$(date +%Y%m%d).sql
# Còpia d'una taula concreta
mysqldump -u root -p institut alumne > /backup/alumne_$(date +%Y%m%d).sql
# Opcions útils:
# --single-transaction → còpia consistent sense bloquejar (InnoDB)
# --routines → inclou procediments i funcions
# --triggers → inclou disparadors
# --events → inclou esdeveniments planificats
mysqldump -u root -p --single-transaction --routines --triggers institut \
> /backup/institut_complet_$(date +%Y%m%d).sql# Restaurar una còpia
mysql -u root -p institut < /backup/institut_20241015.sql
# Crear la BD prèviament si no existeix
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS institut;"
mysql -u root -p institut < /backup/institut_20241015.sql# Còpia completa
mariabackup --backup --target-dir=/backup/full --user=root --password=secret
# Preparar la còpia per a la restauració
mariabackup --prepare --target-dir=/backup/full
# Restaurar
systemctl stop mariadb
mariabackup --copy-back --target-dir=/backup/full
chown -R mysql:mysql /var/lib/mysql
systemctl start mariadbSELECT id_alumne, nom, cognoms, email
FROM alumne
INTO OUTFILE '/tmp/alumnes.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';LOAD DATA INFILE '/tmp/alumnes.csv'
INTO TABLE alumne
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(nom, cognoms, email);# Exportar com a XML
mysql -u root -p --xml -e "SELECT * FROM alumne" institut > alumnes.xmlMariaDB disposa de diversos fitxers de registre configurables a /etc/mysql/mariadb.conf.d/50-server.cnf:
[mysqld]
# Registre d'errors (sempre actiu)
log_error = /var/log/mysql/error.log
# Registre general de consultes
general_log = 1
general_log_file = /var/log/mysql/general.log
# Registre de consultes lentes
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2 # en segons
# Registre binari (per a replicació i recuperació puntual)
log_bin = /var/log/mysql/mariadb-bin
binlog_format = ROW
expire_logs_days = 7
-- Variables relacionades amb els logs
SHOW VARIABLES LIKE '%log%';
-- Fitxers de log binari existents
SHOW BINARY LOGS;
-- Contingut d'un log binari
SHOW BINLOG EVENTS IN 'mariadb-bin.000001';Per migrar dades entre sistemes gestors heterogenis (p. ex. de PostgreSQL a MariaDB):
LOAD DATA INFILE
o mysql < fitxer.sql.Eines específiques: pgloader (migra des de PostgreSQL, SQLite, CSV directament a MariaDB), DBeaver (permet transferència visual entre SGBD).
# Exemple amb pgloader (des de PostgreSQL a MariaDB)
pgloader postgres://usuari:pass@localhost/bd_origen \
mysql://root:pass@localhost/bd_destino