Last active
October 14, 2016 16:58
-
-
Save matteomattei/867f600bba88318730e7d23202d94722 to your computer and use it in GitHub Desktop.
clone mysql database schema using mysqli PHP driver
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/********************* START CONFIGURATION *********************/ | |
$DB_SRC_HOST='localhost'; | |
$DB_SRC_USER='root'; | |
$DB_SRC_PASS='password'; | |
$DB_SRC_NAME='database1'; | |
$DB_DST_HOST='localhost'; | |
$DB_DST_USER='root'; | |
$DB_DST_PASS='password'; | |
$DB_DST_NAME='dateabase2'; | |
/*********************** GRAB OLD SCHEMA ***********************/ | |
$db1 = new mysqli ($DB_SRC_HOST,$DB_SRC_USER,$DB_SRC_PASS) or die($db1->error); | |
mysqli_select_db($db1,$DB_SRC_NAME) or die($db1->error); | |
$result = mysqli_query($db1,"SHOW TABLES;") or die($db1->error); | |
$buf="set foreign_key_checks = 0;\n"; | |
$constraints=''; | |
while($row = mysqli_fetch_array($result)) | |
{ | |
$result2 = mysqli_query($db1,"SHOW CREATE TABLE ".$row[0].";") or die($db1->error); | |
$res = mysqli_fetch_array($result2); | |
if(preg_match("/[ ]*CONSTRAINT[ ]+.*\n/",$res[1],$matches)) | |
{ | |
$res[1] = preg_replace("/,\n[ ]*CONSTRAINT[ ]+.*\n/","\n",$res[1]); | |
$constraints.="ALTER TABLE ".$row[0]." ADD ".trim($matches[0]).";\n"; | |
} | |
$buf.=$res[1].";\n"; | |
} | |
$buf.=$constraints; | |
$buf.="set foreign_key_checks = 1"; | |
/**************** CREATE NEW DB WITH OLD SCHEMA ****************/ | |
$db2 = new mysqli($DB_DST_HOST,$DB_DST_USER,$DB_DST_PASS) or die($db2->error); | |
$sql = 'CREATE DATABASE '.$DB_DST_NAME; | |
if(!mysqli_query($db2,$sql)) die($db2->error); | |
mysqli_select_db($db2,$DB_DST_NAME) or die($db2->error); | |
$queries = explode(';',$buf); | |
foreach($queries as $query) | |
{ | |
if(!mysqli_query($db2,$query)) die($db2->error); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment