I need to copy a table from one database to another. This will be a cronjob. Which one is the best way to do it? PHP script or Shell Script. The problem with PHP, both datab
As it seems that nobody answered the initial question actually, here is my PHP script to backup a table from a remote MySQL server to a local MySQL server:
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;
}
The solution above is not mine, I got it here, with minor changes.