Laravel France

Plug-in sauvegarde BDD ne fonctionnant plus

Avatar de KYoann
KYoann

Salut à tous.

Il y'a quelques temps j'avais developper un petit plug-in qui me permettais de declancher la sauvegarde de la base de données en accedant à une certaine url. Ce script était de constitution assez simple. Mais voila que depuis quelques mois il ne fonctionne plus et me génére un fichier de 0ko, que ce soit chez Gandi ou en local sur Laragon .... je ne sais pas si c'est du à une mise à jours de Laravel, en tous cas je me casse les dents dessus depuis de nombreuses heures sans réussir à avancer.

Voici le code du plug-in :

<?php

namespace Plugin\Backup;


use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Str;

class BackupController extends Controller
{

    protected $decryptedSauvegarde;
    protected $racinePublic = 'c3A68KaYr';
    protected $racineStorage = 'sauvegarde';

    public function index(){

        $sauvegardes = Storage::allFiles('sauvegarde');

        return view('backup::sauvegardeIndex',compact('sauvegardes'));

    }

    public function create(){

        $nomFichier = config('app.name')."-".Str::random(20)."-".date('d-m-Y.H-i-s').".sql";
        
        //shell_exec('mysqldump -u '.config('database.connections.mysql.username').' -p'.config('database.connections.mysql.password').' '.config('database.connections.mysql.database').' > '.$this->racinePublic.'/'.$nomFichier.'');
        exec(' mysqldump -h localhost -u '.config('database.connections.mysql.username').'  -p'.config('database.connections.mysql.password').' '.config('database.connections.mysql.database').' -r > '.$_SERVER["DOCUMENT_ROOT"].'/'.$this->racinePublic.'/'.$nomFichier);



        if(File::exists($this->racinePublic.'/'.$nomFichier)){

            //$encryptedDocument = encrypt(file_get_contents($_SERVER["DOCUMENT_ROOT"].'/'.$this->racinePublic.'/'.$nomFichier));
            $encryptedDocument = file_get_contents($_SERVER["DOCUMENT_ROOT"].'/'.$this->racinePublic.'/'.$nomFichier);

            file_put_contents($this->racinePublic.'/'.$nomFichier,$encryptedDocument);

            Storage::put($this->racineStorage.'/'.$nomFichier, $encryptedDocument);

            Mail::to('test@test.fr')->send(new BackupEmail($this->racinePublic.'/'.$nomFichier));

            unlink($_SERVER["DOCUMENT_ROOT"].'/'.$this->racinePublic.'/'.$nomFichier);



        } else {

            Mail::to('test@test.com')->send(new BackupEmailEchec($nomFichier));
        }

        return back();
    }

    public function download_sauvegarde(Request $request){

        if(Auth::user()->isSuperAdmin()){

            $cryptedSauvegarde = Storage::get("/".$request->fichier);

            $this->decryptedSauvegarde = decrypt($cryptedSauvegarde);

            return response()->streamDownload(function()  {
                echo $this->decryptedSauvegarde;
            },'test.sql');

        } else {

            return Response('404');
        }
    }
}

Dans les fichiers de log de laragon d'obtiens : 'mysqldump' n'est pas reconnu en tant que commande interne ou externe, un programme ex‚cutable ou un fichier de commandes.

Vous remarquerez que j'ai essayer de remplacer exec() par shell_exec(), sans succès.

Posté il y a 4 mois
Avatar de nash
nash

salut

Perso j'aurais preferer le declenchement d'une commande artisan via un cron.

Tu as, je pense deux possibilités de problemes :

  1. As tu bien alias de la commande mysqldump (voir mettre chemin relatif complet)
  2. la db n'est-elle pas devenu trop grosse et tu te prends un time out serveur http.

Est ce que le fait de changer de version de php (8 essentiellement) n'isole pas le declenchement du process.

Posté il y a 3 mois
Avatar de KYoann
KYoann

Salut Nash.

  1. Bonne question, comment faire pour vérifier cela ?
  2. Non, car j'ai réussi a lancer un dump en ligne de commande via la console d'urgence de Gandi.

Je ne suis pas en php 8, mais en 7.4

J'ai suivi le tuto https://www.itsolutionstuff.com/post/laravel-automatic-daily-database-backup-tutorialexample.html qui est assez bien fichu, j'ai réussi à déclancher la tache crone depuis la console d'urgence, mais la programmation ne marche pas.

Posté il y a 3 mois
Avatar de nash
nash
  1. which mysqldump depuis ta console ssh (tu as aussi l'opion -a).
  2. si je comprends l'execution ce lance et te créer un fichier à 0 Ko

Dans le tuto que tu fournis j'aurais laissé tomber le schedule:run (join copie d'un plesk de client). On attaque direct la command artisan en executant comme un script (voir image https://ibb.co/0X383r9/) le cron tab en hebergé c'est de la m***de

Posté il y a 3 mois

Vous ne pouvez pas répondre à ce sujet.