sql >> Database teknologi >  >> RDS >> Mysql

Opret og importer mysql-database på delt vært i php

KISS-princippet :bare bruge phpMyAdmin? Det er næsten sikkert installeret. Hvis det ikke er det, installer det .

Dens importkapacitet er storslået. Hvis din database tilfældigvis er for stor, gzip den. Hvis det stadig er for stort, så prøv at dele det op i et par stykker. Jeg tvivler på, at du skal overføre det som en enkelt stor transaktion. Gør du?

Efter forklaringen i den første kommentar, ja, her går. Dette er mit meget forsimplede script, som gør hvad du vil. Bortset fra, at den ikke tager et kig på separatorerne:én forespørgsel ==én linje.

<link  href="style/contents.css"/>
<?

function timesanitize($v) {
    if ($v > 0)
        return round($v, 4);
    else
        return 0;
}

$startmt = microtime();
include_once 'include/db.php';
$f = fopen("db.sql","r");
echo dbGetEngine() . "<br>";
echo "<ul>";
do {
    $l = rtrim(fgets($f));
    if (strlen($l) == 0)
        continue;
    if (substr($l, 0, 1) == '#')
        continue;
    $l = str_replace(
        array("\\n"),
        array("\n"),
        $l);
    if (dbGetEngine() == "pgsql")
        $l = str_replace(
            array("IF NOT EXISTS", "LONGBLOB"),
            array("", "TEXT"),
             $l);
    try {
        echo "<li>".nl2br(htmlspecialchars($l));
        $mt = microtime();
        $db->query($l);
        echo "<ul><li>ok - " . timesanitize(microtime() - $mt) . "</ul>";
    } catch (PDOException $e) {
        echo "<ul><li>".$e->getMessage() . "</ul>";
    }
} while (!feof($f));
fclose($f);

echo 'total: ' . timesanitize(microtime() - $startmt);
?>

Det udsender også en lille statistik over, hvor lang tid hver forespørgsel tog. Det er baseret på BOB; Jeg tror PDO blev introduceret i PHP5.1 eller PHP5.2. Jeg synes, det burde være trivielt at ændre det, så det fungerer direkte med mysql_*() funktioner, hvis du af en eller anden grund foretrækker det.

Og endnu en gang:ja, jeg ved godt, at det stinker. Men så længe det virker for mig (tm), og muligvis dig... :-)

For at fuldføre koden, her er include/db.php og et eksempel på include/config.php :

include/db.php :

<?
include_once 'include/config.php';

try {

        $attribs =  
                array(
                        PDO::ATTR_PERSISTENT => $config['db']['persistent'],
                        PDO::ATTR_ERRMODE => $config['db']['errormode']
                );


        $db = new PDO(
                $config['db']['uri'],
                $config['db']['user'],
                $config['db']['pass'],
                $attribs
        );
        $db->query("SET NAMES 'utf8'");
        $db->query("SET CHARACTER SET 'utf8'");

} catch (PDOException $e) {
        print "Error!: " . $e->getMessage() . "<br/>";
        die();
}

function dbGetEngine() {
        global $config;
        return substr($config['db']['uri'], 0, strpos($config['db']['uri'], ':'));
}
?>

include/config.php :

<?

//$config['db']['uri'] = 'sqlite:' . realpath('.') . '/site.db'; // PDO's database access URI
$config['db']['uri'] = 'mysql:host=localhost;dbname=sitedb'; // server should be : 195.78.32.7
//$config['db']['uri'] = 'pgsql:host=localhost;dbname=sitedb';
$config['db']['user'] = 'user_goes_here'; // database username
$config['db']['pass'] = 'pass_goes_here'; // database password
$config['db']['persistent'] = false; // should the connection be persistent
$config['db']['errormode'] = PDO::ERRMODE_EXCEPTION; // PDO's error mode

?>

Inkluderet er eksempler på forbindelsesstrenge til SQLite, MySQL og PostgreSQL.



  1. Django idiosynkrasier

  2. Brug for hjælp til optimering af MySQL-forespørgsel med få joinforbindelser

  3. Bruger Oracle kortslutningsevaluering?

  4. Opret forbindelse til OpenShift (Redhat Paas) mysql-instans