J'ai besoin de copier une table d'une base de données à une autre. Ce sera une cronjob. Laquelle est la meilleure façon de le faire? PHP script ou Script Shell. Le problème avec PHP, les deux bases de données ont des noms d'utilisateur et des mots de passe différents, donc je ne peux pas le faire comme ça.
CREATE TABLE db1.table1 SELECT * FROM db2.table1
Dois-je simplement connecter la première base de données pour obtenir tous les enregistrements et insérer tout dans la nouvelle base de données en utilisant la boucle WHILE ou il existe une meilleure façon?
Je préfère un script Shell pour ce faire au lieu de PHP.
Merci
Je le jetterais. Beaucoup moins compliqué qu'autre chose PHP based.
mysqldump -u user1 -ppassword1 databasename > dump.sql
mysql -u user2 -ppassword2 databasename < dump.sql
Référence MySQL: 4.5.4. Mysqldump - Un programme de sauvegarde de base de données
Si vous devez copier la table sur le même serveur, vous pouvez utiliser ce code:
USE db2;
CREATE TABLE table2 LIKE db1.table1;
INSERT INTO table2
SELECT * FROM db1.table1;
C'est copier + coller d'ici: codingforums.com
Ce n'est pas ma solution, mais je la trouve utile.
mysqldump -u user1 -ppassword1 databasename TblName | mysql -u user2 -ppassword2 anotherDatabase
Tout peut être fait en une seule commande.
$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, table 1 fait référence à la table initiale user2, pass2, base de données 2, table2 fait référence à la table copiée $ keyfield est la clé primaire de la table
Phpmyadmin a une fonctionnalité intégrée pour copier des tables d'une base de données vers une autre. Sinon, vous pouvez aller avec Pekka ou exporter la table puis importer la table.
Je mettrai cette réponse à la disposition de toute autre personne à la recherche d'aide.
Si vous n'avez pas accès à SSH, vous pouvez utiliser PhpMyAdmin.
Simplement:
Si vous rencontrez des problèmes de privilèges, vous pouvez accorder temporairement des autorisations globales à un utilisateur ou ajouter le même utilisateur aux deux bases de données.
Un liner avec différents serveurs
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;
utilisation <from database>
create table <to database.new name> as (select * from <table to copy>);
Comme il semble que personne n'ait répondu à la question initiale, voici mon script PHP pour sauvegarder une table d'un serveur MySQL distant vers un serveur MySQL local:
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;
}
La solution ci-dessus n'est pas la mienne, je l'ai eu ici , avec des changements mineurs.
insert into dest.table select * from orginal.table;