Transférer complètement tous les bases mysql

salut
mon disque dur vient de planter
j’ai tout de même une sauvegarde complète de /
je voudrais réutiliser toutes mes bases mysql, aves tous les utilisateurs et mots de passe

je sais comment réintegrer mes bases mysql ( par exemple mysqldump ) mais je n’ai pas d’automatatisation prête pour les mots de passes

Les mots de passe sont dans la base de nom mysql…

Ce que tu peux faire, seulement si tu n’as pas de sauvegarde faite par mysqldump, c’est installer la même version du serveur mysql (ou mariadb), tu arrêtes le service et tu remets le contenu de /var/lib/mysql (ou là où tu les as mises si tu as changé le chemin) de ta sauvegarde directement à la place de ce qui s’y trouve, puis tu relances le serveur. Il devrait reprendre directement les données de ton instance précédente.

Sinon, je te conseille de mettre le retour de la commande mysqldump --all-databases --hex-blob dans un fichier que tu sauvegardes, ce sera plus fiable pour tes restaurations ultérieures.
L’option --hex-blob n’est pas obligatoire, je l’utilise juste pour que le mode différentiel de ma sauvegarde fonctionne mieux.

Salut,

le serveur mysql c’était mariadb ? Il y a un outil prévu spécifiquement pour effectuer des sauvegardes et restaurations à partir du répertoire de mysql/mariadb: Full Backup and Restore with Mariabackup - MariaDB Knowledge Base

merci

Salut, comment connaitre la version de mariadb installée ( quand on ne peut pas démarrer le système qui est dessus ); un fichier contient-il la version?

oui c’est une mariadb des dépots stables.
je crois que ta proposition repose sur un backup depuis une mariadb qui marche
très utilie, mais pour la prochaine mariadb :slight_smile:

J’ai jamais testé cette méthode, donc je ne peux en dire grand chose, mais a priori elle repose sur le répertoire (datadir), même si le serveur mariadb est down.
Comme tu as une sauvegarde complète de la racine, tu peux tenter de faire un mariadb-backup sur le datadir, puis un mariadb-restore sur le datadir du nouveau serveur.

Regarde dans /var/log/dpkg.log, il contient les logs des mises à jour avec les numéros de version, avec un peu de chance la dernière version de mariadb installée y est encore inscrite.

Je suppose que tu ne faisais pas de dump global mais par base de données … si ce’est le cas tu peux très bien reconfigurer à la main exceptionnellement ton nouveau serveur de base de donnée avec les utilisateurs et morts de passe adéquats.

Il te suffit de recréer ce dont tu as besoin et réinjecté tes bases.
Pour la suite il te faudra ensuite te connecter sur tes applicatifs et au besoins modifier les mots de passe et utilisateurs pour revenir à un état pleinement fonctionnel.

Si maintenant tu as un dump globale il te suffit de le réinjecter de la même manière qu’avec une base de donnée mais tel que @Almtesh l’a proposé avec un (j’ajoute la particuliarité de la décompression via gunzip) :

gunzip > dumpmysql-global_`date +\%m\%d_\%Y`.sql.gz | mysql -u root -p 

pour faire un dump complet compressé :

mysqldump -u root -p --all-databases  | gunzip > dumpmysql-global_`date +\%m\%d_\%Y`.sql.gz
1 J'aime

Sur la sauvegarde
Pour connaître la version
cat /var/lib/mysql/mysql_upgrade_info
Renomer, toujours sur la sauvegarde la base mysql
mv /var/lib/mysql/mysql /var/lib/mysql/mysqlold
Copier l’ensemble des bases de données sur le nouveau serveur mariadb dans le bon répertoire normalement le même càd /var/lib/mysql/mysql - attention le serveur de base de données sur la nouvelle installation doit être à l’arrêt lors de la copie.

Sauf si votre ancienne version est très ancienne le problème de version devrait-être marginale … ça reste bien évidemment à vérifier.

Démarrer le serveur mariaDB
Exporter la table « user » depuis la base « mysqlold »
mysqldump -u root -p --no-create-info --skip-extended-insert mysqlold user > userold.sql

Supprimer les utilisateurs indésirables dans userold.sql par ex. root (sauf si vous désirer recouvrir l’ancien mot de passe).

Importer les anciens utilisateurs vers nouvelle base mysql
mysql -u root -p mysql < userold.sql

1 J'aime

je tente la proposition de toto, l’ancien slash est sur /media/Slash11/

cat /media/Slash11/var/lib/mysql/mysql_upgrade_info
10.3.31-MariaDB
cat /var/lib/mysql/mysql_upgrade_info
10.5.15-MariaDB

rm -r  /var/lib/mysql/ 
cp -a /media/Slash11/var/lib/mysql /var/lib/
/etc/init.d/mariadb restart

Démarrer le serveur mariaDB : ne marche pas
mais comme j’étais sur le disque qui ne marche plus je tente depuis la sauvagarde

scp -r root@ee:/202205-SAUVEGARDE_Slash11/var/lib/mysql .
/etc/init.d/mariadb restart

Restarting mariadb (via systemctl): mariadb.serviceJob for mariadb.service failed because the control process exited with error code.
See "systemctl status mariadb.service" and "journalctl -xe" for details.
 failed!

journalctl -xe


Starting MariaDB 10.5.15 database server...
░░ Subject: L'unité (unit) mariadb.service a commencé à démarrer
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░ 
░░ L'unité (unit) mariadb.service a commencé à démarrer.
juin 15 14:36:07 deb11P mariadbd[5527]: 2022-06-15 14:36:07 0 [Note] /usr/sbin/mariadbd (mysqld 10.5.15-MariaDB-0+deb11u1) starting as process 5527 ...
juin 15 14:36:07 deb11P mariadbd[5527]: 2022-06-15 14:36:07 0 [Warning] Can't create test file /var/lib/mysql/deb11P.lower-test
juin 15 14:36:07 deb11P mariadbd[5527]: 2022-06-15 14:36:07 0 [ERROR] mariadbd: File '/var/lib/mysql/aria_log_control' not found (Errcode: 13 "Permission denied")
juin 15 14:36:07 deb11P mariadbd[5527]: 2022-06-15 14:36:07 0 [ERROR] mariadbd: Got error 'Can't open file' when trying to use aria control file '/var/lib/mysql/aria_log_contr>
juin 15 14:36:07 deb11P mariadbd[5527]: 2022-06-15 14:36:07 0 [ERROR] Plugin 'Aria' init function returned error.
juin 15 14:36:07 deb11P mariadbd[5527]: 2022-06-15 14:36:07 0 [ERROR] Plugin 'Aria' registration as a STORAGE ENGINE failed.
juin 15 14:36:07 deb11P mariadbd[5527]: 2022-06-15 14:36:07 0 [ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable
juin 15 14:36:07 deb11P mariadbd[5527]: 2022-06-15 14:36:07 0 [ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable
juin 15 14:36:07 deb11P mariadbd[5527]: 2022-06-15 14:36:07 0 [ERROR] Plugin 'InnoDB' init function returned error.
juin 15 14:36:07 deb11P mariadbd[5527]: 2022-06-15 14:36:07 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
juin 15 14:36:07 deb11P mariadbd[5527]: 2022-06-15 14:36:07 0 [Note] Plugin 'FEEDBACK' is disabled.
juin 15 14:36:07 deb11P mariadbd[5527]: 2022-06-15 14:36:07 0 [ERROR] Could not open mysql.plugin table: "Table 'mysql.plugin' doesn't exist". Some plugins may be not loaded
juin 15 14:36:07 deb11P mariadbd[5527]: 2022-06-15 14:36:07 0 [ERROR] Failed to initialize plugins.
juin 15 14:36:07 deb11P mariadbd[5527]: 2022-06-15 14:36:07 0 [ERROR] Aborting
juin 15 14:36:07 deb11P systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE
░░ Subject: Unit process exited
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░ 
░░ An ExecStart= process belonging to unit mariadb.service has exited.
░░ 
░░ The process' exit code is 'exited' and its exit status is 1.
juin 15 14:36:07 deb11P systemd[1]: mariadb.service: Failed with result 'exit-code'.
░░ Subject: Unit failed
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░ 
░░ The unit mariadb.service has entered the 'failed' state with result 'exit-code'.
juin 15 14:36:07 deb11P systemd[1]: Failed to start MariaDB 10.5.15 database server.
░░ Subject: L'unité (unit) mariadb.service a échoué
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░ 
░░ L'unité (unit) mariadb.service a échoué, avec le résultat failed.

drwxr-xr-x 46 root root 4096 15 juin 14:35 mysql

ls -al /var/lib/mysql/aria_log_control
-rw-r----- 1 root root 52 15 juin 14:35 /var/lib/mysql/aria_log_control
ls -al /var/lib/mysql/ibdata1
-rw-r----- 1 root root 79691776 15 juin 14:34 /var/lib/mysql/ibdata1

bon je dois bouger je verrais ça plus tard

Essaie un chown -R mysql:mysql /var/lib/mysql
Comme les versions de mariadb sont différentes, tu devras faire un mysql_upgrade --force, aussi.

Bonjour dindoun,
Il ne faut surtout pas effacer le répertoire /var/lib/mysql sur la nouvelle installation, du coup c’est normal que plus rien ne fonctionne. Une réinstallation de mariadb est donc à prévoir.
L’idée c’est de copier seulement les bases de données de vos applications et ne concernant pas mariadb, la seule à copier concernant le gestionnaire de base de données est la base /var/lib/mysql/mysql contenant la table user qui pour ne pas écraser la base mysql sur le serveur lors de la copie doit être renommée par exemple en mysqlold. Ne pas oublier d’arrêter le serveur mariadb avant la copie.
Ensuite, après avoir redémarré le gestionnaire de bases de données il faut extraire les utilisateurs depuis la table user de la base mysqlold afin de les réinjecter dans la nouvelle base mysql.

Quelques précision sur la suite :
Il faut bien évidemment, avant de redémarrer, rendre propriétaire l’utilisateur mysql tous les répertoires rapatriés depuis la sauvegarde, par exemple pour la base mysqlold :
chown -R mysql:mysql mysqlold/
Ensuite je suis aller un peu vite sur mes instructions avec le client mysql, afin de ne pas avoir les directive DROP et CREATE il faut ajouter l’option –no-create-info, l’option –skip-extended-insert permet d’avoir une instruction insert par ligne sql ce qui facilite la suppression des utilisateurs non désirés lors de l’édition du fichier userold.sql
mysqldump –u root –p --no-create-info --skip-extended-insert mysqlold user > userold.sql

Bon courage

merci
j’ai en gros réussi à récupérer les bases de données par des exports en ligne, y compris la table user que j’ai réinjectée à une base de donnéee neuve