Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tietokannan siirto

Sivun loppuun

pistemies [19.04.2008 12:12:14]

#

Minulla on käynnissä palvelimen vaihto.

Oliko jotain nopeaa konstia lisätä koko tietokannan sisältö, taulut ja datat sql-tiedostosta tietokantaan?

Wizard [19.04.2008 13:20:05]

#

Oletuksena MySQL:

mysqldump => tietokannasta tiedostoon
mysql => tiedostosta tietokantaan (tietokanta pitää olla yleensä luotu valmiiksi)

mysqldump -u [username] -p [db_name] > [filename]
mysql -u [username] -p [db_name] < [filename]

-W-

pistemies [19.04.2008 15:27:54]

#

Kun tuota mietitään php-skriptiin, olisiko tämä likellä oikeaa:

<?php
class to_mysql
{
    var $cmd = '';

    function to_mysql( $host, $user, $pass, $dbname)
    {
        $this->cmd = "mysql -q  -h {$host} -u {$user} -p{$pass} {$dbname} < tiedosto.sql";
    }
    function tomysql()
    {
        passthru($this->cmd, $retval);

        if(!empty($retval))
        {
            print_r($retval);
        }
    }
}
?>

Wizard [19.04.2008 16:23:56]

#

Periaatteessa kyllä, tosin tuo if(!emtpy($retval)) on turha, koska siihen käy suoraan if($retval). Jos vastausta ei ole, niin sen pitäisi evaluoitua falseksi.

Miettisin myös hieman tuota, että kannattaisiko ajaa suoraan metodin sisällä tuo käsky eikä tallentaa sitä muuttujaan. Ongelmaksi tuo voi tulla silloin kun ajetaan samaa metodia useampaan kertaan saman scriptin aikana ja jos tuossa muuttujassa on vanha käsky jo olemassa, niin se suoritetaan useampaan kertaan jonkin bugin takia pahimmillaan... Ainoa mikä tuota tapaa voisi perustella, on virheenhallinta, mutta senkin voisi toteuttaa try..catchilla

Ja miksi käytät PHP 4:ää? Sen virallinen kehitys on loppunut ja se on häviävä luonnonvara? PHP 5 antaa olioissa rutkasi lisää potkua...


-W-

pistemies [19.04.2008 17:41:09]

#

Palvelimella on PHP 5.2.5

Testaan tätä...

Wizard [19.04.2008 19:02:44]

#

Pekka Mansikka kirjoitti:

Palvelimella on PHP 5.2.5

Testaan tätä...

'var' ei ole enää validia PHP5 koodia, sen tilalla pitäisi käyttää public, private tai public. Tuo 'var' nimittäin vain kiinnitti huomiota...

Yleensäkään en ymmärrä enää softataloja jotka tekee PHP4 koodia kun tiedossa on, että se on jo tehtäessä vanhaa koodia. :S

-W-

pistemies [19.04.2008 20:46:44]

#

Nyt vasta ehdin koneen ääreen...
Ei tämä toiminut...vielä. Vaikka var on private. Print_r tulostaa "1".
Tuo koodi on muutettu backup-lauseesta, joka toimii eri palvelimella.
Mietin noita -q ja -h:

-q  -h {$host}

Liittykö vika jotenkin tuohon, ettei mahdollisesti palvelinta löydy..?

Wizard [19.04.2008 21:31:47]

#

En muista tuota -q optiota, mutta hostin kohdalla ehkä kannattaa tarkistaa, että TCP/IP on sallittu ja sitä voi käyttää. Ainakin *nix laitteissa tuo TCP/IP on väännetty pois päältä kokonaan ja se pätee myös silloin mysqldump & mysql käskyihin...

Ja kun print_r tulostaa "1", niin eikös se ole true silloin? Jos laitat print_r($muuttuja, true), niin mitä se tulostaa?

-W-

pistemies [20.04.2008 10:14:03]

#

Kiitos. Sain tämän toimimaan. Vika oli helpompi kuin olisi luullut: tiedoston nimessä oli pieni virhe, eikä tiedostoa löytynyt.
Pitää kehittää tuohon juttu, jossa tiedostonimi syötetään luokan ulkopuolelta ja tehdään sillekin oma tarkistus ja virhetulostus, niin ei tarvii epäillä turhia...

Wizard [20.04.2008 11:51:50]

#

<?php
if(file_exists($file)):
  // Do something
else:
  // Throw error
endif;
?>

;)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta