あるデータベースから別のデータベースにテーブルをコピーする必要があります。これはcronjobになります。それを行う最良の方法はどれですか? PHPスクリプトまたはシェルスクリプト。PHPの問題は、両方のデータベースに異なるユーザー名とパスワードがあるため、このようにすることはできません。
CREATE TABLE db1.table1 SELECT * FROM db2.table1
最初のDBを接続してすべてのレコードを取得し、WHILEループを使用してすべてを新しいデータベースに挿入する必要がありますか、それとももっと良い方法がありますか?
PHPスクリプトではなく、シェルスクリプトを使用することをお勧めします。
ありがとう
ダンプします。何よりもそれほど複雑ではないPHPベース。
mysqldump -u user1 -ppassword1 databasename > dump.sql
mysql -u user2 -ppassword2 databasename < dump.sql
MySQLリファレンス: 4.5.4。mysqldump —データベースバックアッププログラム
同じサーバーでテーブルをコピーする必要がある場合は、次のコードを使用できます。
USE db2;
CREATE TABLE table2 LIKE db1.table1;
INSERT INTO table2
SELECT * FROM db1.table1;
ここからコピーして貼り付けます: codingforums.com
それは私の解決策ではありませんが、役に立つと思います。
mysqldump -u user1 -ppassword1 databasename TblName | mysql -u user2 -ppassword2 anotherDatabase
それはすべて単一のコマンドで実行できます。
$L1 = mysql_connect('localhost', 'user1', 'pass1');
$DB1 = mysql_select_db('database1', $L1);
$L2 = mysql_connect('localhost', 'user2', 'pass2');
$DB2 = mysql_select_db('database2', $L2);
$re=mysql_query("SELECT * FROM table1",$L1);
while($i=mysql_fetch_assoc($re))
{
$u=array();
foreach($i as $k=>$v) if($k!=$keyfield) $u[]="$k='$v'";
mysql_query("INSERT INTO table2 (".implode(',',array_keys($i)).") VALUES ('".implode("','",$i)."') ON DUPLICATE KEY UPDATE ".implode(',',$u),$L2) or die(mysql_error());
}
user1、pass1、database1、table1は初期テーブルuser2、pass2、database2、table2にコピーされたテーブルに参照$ keyfieldはテーブルの主キー
Phpmyadminには、あるデータベースから別のデータベースにテーブルをコピーする機能が組み込まれています。それ以外の場合は、ペッカを使用するか、テーブルをエクスポートしてからテーブルをインポートできます。
この答えは、助けを求めている他の人のために書きます。
SSHにアクセスできない場合は、PhpMyAdminを使用できます。
単に:
特権の問題に遭遇した場合、ユーザーに一時的にグローバル権限を付与するか、同じユーザーを両方のデータベースに追加できます。
異なるサーバーを備えた1つのライナー
mysqldump -h Host1 -u user1 -ppassword1 databasename TblName | mysql -h Host2 -u user2 -ppassword2 anotherDatabase
CREATE TABLE db_target.cloned_table
SELECT *
FROM db_source.source_table;
使用する <from database>
create table <to database.new name> as (select * from <table to copy>);
最初の質問に実際に答えた人は誰もいないように思えるので、リモートMySQLサーバーからローカルMySQLサーバーにテーブルをバックアップするためのmy PHPスクリプト:
function backup_remote_table (
$remote_db_Host, $remote_login, $remote_password, $remote_db_name, $remote_table_name,
$local_db_Host, $local_login, $local_password, $local_db_name, $local_table_name
) {
// Generating names with time stamps for local database and/or local table, if not available
if ($local_table_name) {
$applied_local_table_name = $local_table_name;
} else {
$applied_local_table_name = $remote_table_name;
}
if ($local_db_name) {
$applied_local_db_name = $local_db_name;
if (!$local_table_name) {
$applied_local_table_name .= date_format(date_create(), '_Y_m_d_H_i_s');
}
} else {
$applied_local_db_name = $remote_db_name . date_format(date_create(), '_Y_m_d_H_i_s');
}
// Local server connection
$local_db_server = mysql_connect($local_db_Host, $local_login, $local_password);
$local_db_server = mysql_query("CREATE DATABASE IF NOT EXISTS " . $applied_local_db_name, $local_db_server);
mysql_select_db($applied_local_db_name, $local_db_server);
// Remote server connection
$remote_db_server = mysql_connect($remote_db_Host, $remote_login, $remote_password);
mysql_select_db($remote_db_name, $remote_db_server);
// Getting remote table data
$result_remote_table_info = mysql_query("SHOW CREATE TABLE " . $remote_table_name, $remote_db_server);
$remote_table_info = mysql_fetch_array($result_remote_table_info);
$remote_table_description = substr($remote_table_info[1], 13);
// Creating local table
$sql_new_table = "CREATE TABLE IF NOT EXISTS " . $applied_local_db_name . "." . $remote_table_description;
mysql_query($sql_new_table, $local_db_server);
// Getting all records of remote table
$result_remote_table_data = mysql_query("SELECT * FROM " . $table_name, $remote_db_server);
while ($remote_table_row = mysql_fetch_array($result_remote_table_data, MYSQL_ASSOC)){
// Browsing records of remote table
$sql_new_row = "INSERT INTO $applied_local_db_name.$applied_local_table_name (".implode(", ",array_keys($remote_table_row)).") VALUES (";
$extra_sql = "";
foreach (array_values($remote_table_row) as $value) {
if ($extra_sql != "") {
$extra_sql .= ",";
}
$extra_sql .= "'";
$extra_sql .= mysql_real_escape_string($value);
$extra_sql .= "'";
}
$sql_new_row .= $extra_sql . ")";
// Adding record to local table
$result_new_table_row = mysql_query($sql_new_row, $local_db_server);
}
mysql_free_result($result_remote_table_data);
return;
}
上記の解決策は私のものではありません、私はそれを手に入れました ここ 、小さな変更を加えました。
insert into dest.table select * from orginal.table;