データベースを丸ごとコピーする必要が生じて、その際にデータに処理を加えなければならなかったので、PHP で書いてみました。
まず、データベースに含まれるテーブル名を取得します。
<?php
$DB = mysqli_connect( 'localhost', 'username', 'password', 'databasename') or die(mysqli_connect_error());
mysqli_set_charset($DB, 'utf8');
$sql = "SHOW TABLES;";
$result = mysqli_query($DB, $sql) or die(mysqli_error($DB2));
$rows = mysqli_num_rows($result);
for ($i = 0; $i < $rows; $i = $i + 1) {
$row = mysqli_fetch_array($result);
echo $row[0]."\n";
}
?>
出力は下記のようにテーブル名が並びます。
authors
table_College_Physics
table_friend
table_ryuji-kondo
次に、コピーです。コピー先のデーターベースは空のものを前もって用意しておきます。コピーする前に、同じ構造の空のテーブルを作成して、その後データを移します。
<?php
$DB = mysqli_connect( 'localhost', 'username', 'password', 'コピー元のDB') or die(mysqli_connect_error());
mysqli_set_charset($DB, 'utf8');
$DB2 = mysqli_connect( 'localhost', 'username', 'password', 'コピー先のDB') or die(mysqli_connect_error());
mysqli_set_charset($DB2, 'utf8');
$sql = "SHOW TABLES;";
$result = mysqli_query($DB, $sql) or die(mysqli_error($DB));
$rows = mysqli_num_rows($result);
for ($i = 0; $i < $rows; $i = $i + 1) {
$row = mysqli_fetch_array($result);
$a_table_name = "`".$row[0]."`";
$sql = "CREATE TABLE コピー先のDB.$a_table_name LIKE コピー元のDB.$a_table_name";
mysqli_query($DB2, $sql) or die(mysqli_error($DB2));
$sql = "INSERT INTO コピー先のDB.$a_table_name SELECT * FROM コピー元のDB.$a_table_name";
mysqli_query($DB2, $sql) or die(mysqli_error($DB2));
}
?>
この手順でコピーすると、AUTO INCREMENT などもそのままコピーされます。