1. N'hésitez pas à vous enregistrer & participer à cette future communauté d'informaticiens, Geeks ou encore Sysadmin.
    Amateur ou confirmé, voir même professionnel, vous avez votre place ici et c'est avec la plus grande joie que vous nous accueillerons !

    Je m'enregistre ici
  2. Vous êtes blogueur et vos articles sont en relation avec l'administration des systèmes?
    Offrez leur une vue supplémentaire via le forum de ZoneAdmin !
    Comment faire? Simple,suivez l'article ici !

Valorisée Tutoriel Comment récupérer des bases de données SQL après un crash CT Proxmox?

Discussion dans 'Linux' créé par Kero, 27 Septembre 2017.

  1. Kero

    Kero Dark Vador Membre du personnel Jeune padawan

    Bonjour :Wink:

    Après une mésaventure sur un crash de partition, j'ai décidé de faire ce petit tuto afin de vous faciliter la tâche si cela vous arrive :Biggrin:
    Les datas étant relativement simple à récupérer,les tables MYSQL elles sont un peu plus complexes.

    Explication de ma situation :

    J'ai un dédié ici à la maison avec un Proxmox 5 qui me sert à des tests en situation réelle (crash/delete/bidouille) et aussi un container Debian qui me sert pour la facturation de ma société.
    Après, je pense, une coupure de courant (et n'ayant pas d'onduleur dessus vu que c'est que du test), une partition du container de ma facturation est partie en cacahouète :Eek:
    Résultat, impossible de booter le container et donc pas d'accès à ma facturation ! Ca tombe mal,on est le 27 et dans 3 jours c'est justement le jour des factures :Biggrin: #MakeinvoicesGreatagain
    J'ai bien un backup mais qui date un peu donc le but est de remettre le backup en route mais en y injectant la DB fraiche et non celle du backup.

    Voici ce que me sort le Proxmox au moment du boot du container :

    Code:
    Job for lxc@100.service failed because the control process exited with error code.
    See "systemctl status lxc@100.service" and "journalctl -xe" for details.
    TASK ERROR: command 'systemctl start lxc@100' failed: exit code 1
    Afin de connaitre le problème et vu le peu d'info du proxmox, il est nécessaire de générer un fichier log de ce qui se passe au boot du container. Pour ce faire, utilisez la commande suivante sur la machine maitre (et non le container)
    Code:
    lxc-start -n 101 -F -l DEBUG -o /tmp/lxc-ID.log
    101 étant l'ID de mon container

    Rendez vous donc dans /tmp pour lire le contenu de votre fichier log.
    Me concernant,voici le fichier :
    Code:
          lxc-start 20170909124014.667 INFO     lxc_start_ui - tools/lxc_start.c:main:275 - using rcfile /var/lib/lxc/101/config
          lxc-start 20170909124014.667 WARN     lxc_confile - confile.c:config_pivotdir:2022 - lxc.pivotdir is ignored.  It will soon become an error.
          lxc-start 20170909124014.667 INFO     lxc_lsm - lsm/lsm.c:lsm_init:48 - LSM security driver AppArmor
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:parse_config_v2:418 - processing: .reject_force_umount  # comment this to allow umount -f;  not recommended.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:parse_config_v2:590 - Adding native rule for reject_force_umount action 0.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:do_resolve_add_rule:259 - Setting Seccomp rule to reject force umounts.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:parse_config_v2:593 - Adding compat rule for reject_force_umount action 0.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:do_resolve_add_rule:259 - Setting Seccomp rule to reject force umounts.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:do_resolve_add_rule:259 - Setting Seccomp rule to reject force umounts.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:parse_config_v2:418 - processing: .[all].
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:parse_config_v2:418 - processing: .kexec_load errno 1.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:parse_config_v2:590 - Adding native rule for kexec_load action 327681.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:parse_config_v2:593 - Adding compat rule for kexec_load action 327681.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:parse_config_v2:418 - processing: .open_by_handle_at errno 1.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:parse_config_v2:590 - Adding native rule for open_by_handle_at action 327681.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:parse_config_v2:593 - Adding compat rule for open_by_handle_at action 327681.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:parse_config_v2:418 - processing: .init_module errno 1.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:parse_config_v2:590 - Adding native rule for init_module action 327681.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:parse_config_v2:593 - Adding compat rule for init_module action 327681.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:parse_config_v2:418 - processing: .finit_module errno 1.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:parse_config_v2:590 - Adding native rule for finit_module action 327681.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:parse_config_v2:593 - Adding compat rule for finit_module action 327681.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:parse_config_v2:418 - processing: .delete_module errno 1.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:parse_config_v2:590 - Adding native rule for delete_module action 327681.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:parse_config_v2:593 - Adding compat rule for delete_module action 327681.
          lxc-start 20170909124014.667 INFO     lxc_seccomp - seccomp.c:parse_config_v2:603 - Merging in the compat Seccomp ctx into the main one.
          lxc-start 20170909124014.667 INFO     lxc_conf - conf.c:run_script_argv:483 - Executing script "/usr/share/lxc/hooks/lxc-pve-prestart-hook" for container "101", config section "lxc".
          lxc-start 20170909124015.625 ERROR    lxc_conf - conf.c:run_buffer:464 - Script exited with status 32.
          lxc-start 20170909124015.625 ERROR    lxc_start - start.c:lxc_init:450 - Failed to run lxc.hook.pre-start for container "101".
          lxc-start 20170909124015.625 ERROR    lxc_start - start.c:__lxc_start:1337 - Failed to initialize container "101".
          lxc-start 20170909124015.625 ERROR    lxc_start_ui - tools/lxc_start.c:main:366 - The container failed to start.
          lxc-start 20170909124015.625 ERROR    lxc_start_ui - tools/lxc_start.c:main:370 - Additional information can be obtained by setting the --logfile and --logpriority options.
    En cherchant sur le net, j'ai rien trouvé de bien concluant a l'erreur du buffer mais le container lui refuse de demarrer.
    J'ai tenté de faire un backup de ce container et là je trouve enfin le coupable !
    Le log en question :
    Code:
    INFO: starting new backup job: vzdump 101 --mode snapshot --remove 0 --node pve --storage Disque4To --compress lzo
    INFO: Starting Backup of VM 101 (lxc)
    INFO: status = stopped
    INFO: backup mode: stop
    INFO: ionice priority: 7
    INFO: CT Name: Ispconfig
    INFO: creating archive '/mnt/4To//dump/vzdump-lxc-101-2017_09_26-19_15_15.tar.lzo'
    mount: /dev/mapper/pve-vm--101--disk--1: can't read superblock
    umount: /mnt/vzsnap0/: not mounted
    command 'umount -l -d /mnt/vzsnap0/' failed: exit code 32
    ERROR: Backup of VM 101 failed - command 'mount /dev/dm-6 /mnt/vzsnap0//' failed: exit code 32
    INFO: Backup job finished with errors
    TASK ERROR: job errors
    L'erreur est donc : mount: /dev/mapper/pve-vm--101--disk--1: can't read superblock

    La première idée est d'utiliser xfs_check & xfs_repair mais dans mon cas,peine perdue,passe pas :Frown:
    Plus d'infos ici pour les curieux : https://serverfault.com/questions/469460/how-to-recover-xfs-file-system-with-superblock-read-failed


    Reste plus qu'a tenter de monter la partition et d'aller y récupérer les datas.

    1- Ouverture des hostilités : :Cool:

    Monter /dev/mapper/pve-vm--101--disk--1
    Code:
    mount -t ext4 -o ro,noload /dev/pve/vm-101-disk-1 /mnt/vzsnap0/

    -t
    = type (ext4)
    -o
    = options
    Pour le reste,voyez ici : http://www.linux-france.org/article/man-fr/man8/mount-8.html

    Si tout se passe bien, rendez vous en /mnt/vzsnap0/
    Code:
    cd /mnt/vzsnap0/
    Un petit ls ou ls-a vous donnera accès (enfin) aux datas du container

    2- Copier les bases SQL:
    Rendez-vous dans le folder du Mysql (habituellement sous /var/lib/)
    Mon chemin est donc :
    Code:
    cd /var/lib
    On va compresser la totalité du folder MYSQL
    Code:
    zip -r mysql.zip mysql
    Une fois terminé,on le copie sur le nouveau container (dans mon cas,l'ip est 192.168.1.66) et je copie le zip dans mon /home
    Code:
    root@pve:/var/lib# scp mysql.zip root@192.168.1.66:/home
    The authenticity of host '192.168.1.66 (192.168.1.66)' can't be established.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.1.66' (ECDSA) to the list of known hosts.
    root@192.168.1.66's password:
    3- Decompresser le folder MYSQL dans le nouveau container (dans mon cas,un ancien backup du même CT et donc avec des tables SQL anciennes)
    • On change donc de SSH pour se connecter sur le nouveau container
    • Direction /home pour retrouver le fichier compressé
    On va stopper SQL qui tourne sur cette machine :
    Code:
    service mysql stop
    Et on va renommer le folder MYSQL actuel qui tourne histoire de pas mélanger les pinceaux:
    Code:
    cd /var/lib/
    Code:
    mv mysql mysql_backup
    On va decompresser le fichier zip (dans mon cas /home)
    Code:
    cd /home
    unzip mysql.zip
    On copie le dossier mysql dans /var/lib
    Code:
    cp -r mysql /var/lib
    On y donne les droits si c'est pas le cas (dans mon cas,comme c'est un backup du CT qui tourne et que mon import est là aussi la même machine,le user/group est le même)
    Code:
    chown -R mysql:mysql  mysql/
    Et enfin on relance l'SQL
    Code:
    service mysql start
    Et voilà,en principe tout tourne chez vous. Ici tout est nikel et je retrouve ma facturation :Tongue:
    PS: vous pouvez supprimer le folder "mysql_backup" qui se trouve dans /var/lib/ si plus besoin.

    :smile_panel01: Si vous aussi vous avez des solutions sur des crashs ou voir même corriger ou améliorer mon tuto, n'hésitez pas ! (y)








     
  2. gnuson

    gnuson Visiteur Dantooine Jeune padawan

    Merci pour l'astuce, c'est l'une des raisons que j'utilise ZFS si la machine le permet ou BRTFS pour faire un backup incrémental sur les partitions.
    @Kero oui je suis de retour :p
     
  3. Kero

    Kero Dark Vador Membre du personnel Jeune padawan

    Je vois ca ! Re bienvenue (y)
     

Partager cette page