Yerine tetikleyiciler olmadan mysqldump için bir dosya oluşturarak daha ihracat sorgu gerekir

1 Cevap php

Ben kodu var

$db_name = "db";
$outputfile = "/somewhere";
$new_db_name = 'newdb';

$cmd = 'mysqldump --skip-triggers %s > %s  2>&1';
$cmd = sprintf($cmd, escapeshellarg($db_name), escapeshellcmd($output_file));
exec($cmd, $output, $ret); 
if ($ret !=0 ) {
    //log error message in $output
}

Sonra almak için:

$cmd = 'mysql --database=%s < %s 2>&1';
$cmd = sprintf($cmd, escapeshellarg($new_db_name), escapeshellcmd($output_file));
exec($cmd, $output, $ret); 
//etc.

unlink($outputfile);

Ama burada ne ben yerine bir dosya her şey oluşturmak yerine, ihracat sorgu almak için ne yapmalıyım?

EDITED:

Matt CEVABI VE YANIT

  • Bu linux komutları gibi görünüyor ben Windows kullanıyorum, ben emin değilim u iş verdik kod ben zaten kod Windows çalışmak olacaktır?
  • PHP script Onun benim gerek onun joomla bir bileşeni yüklerken tetiklenen olacak süreç
  • PHP BORU nedir?

1 Cevap

PHP bu yapmak zorunda mı? Kolayca bazı temel boru (herhangi bir dosya oluşturmak için gerek) ile bir terminalde yapabilirsiniz.

İki komutlar ve bitirdiniz:

echo 'create database foo2' | mysql -uroot
mysqldump --skip-triggers -uroot foo | mysql -uroot foo2

Bu kopyalar foo yeni veritabanına foo2

O is pipe in php mümkün .. ama .. gerçekten, sadece kabuk (IMO), bu yapmanız gerektiğini unutmayın.

Edit:

Üzgünüz, nedense ben seni wanted tetikler düşündüm. Dahil etmek için yukarıda düzenlenebilir --skip-triggers

Edit 2:

'Boru hattı' stdout ve stdin yönlendirme anlamına gelir.

, Windows boruları destekler. Yukarıdaki komutlar Windows üzerinde benim için çalışıyoruz.

Ancak, Windows (en azından mysql için) ile PHP ile çalışmak için boru almak mümkün değilim. Bu proc_open Benim girişini görmezden gelen akarsu gibi.

Yani alternatif, ben yukarıda verilen komutları almak bir .bat dosyaya koyun ve system() üzerinden bu komut arayabilir görmek olacaktır

Final edit:

Ben her küçük ayrıntıyı izah edilemez gibi bazı araştırma yapmak için ihtiyacımız olacak. Sana işaret system() belgelere başvuru mi? Bu sistem komutları çağrı sağlar ..

Benim önerim bir temel komut, çağrı yapmak olduğunu bla.bat:

@echo off
echo create database foo2 | mysql -uroot
mysqldump --skip-triggers -uroot foo | mysql -uroot foo2

Bu sizin komut olarak aynı klasörde ise, o zaman script yapabilirsiniz:

<?php
system('cmd.exe /C ' . dirname(__FILE__).'\\bla.bat');

Viyola. DB kopyalandı.