하나의 mysql 데이터베이스에서 다른 mysql 데이터베이스로 테이블을 복사하는 방법
한 데이터베이스에서 다른 데이터베이스로 테이블을 복사해야 합니다.크론 작업이 될 겁니다.어떤 방법이 가장 좋을까요?PHP 스크립트 또는 셸 스크립트.PHP의 문제, 두 데이터베이스 모두 사용자 이름과 비밀번호가 달라서 이렇게는 할 수 없습니다.
CREATE TABLE db1.table1 SELECT * FROM db2.table1
그냥 첫번째 DB를 연결해서 모든 기록을 얻고 WHIRE loop을 사용해서 새로운 데이터베이스에 모두 삽입해야 하나요 아니면 더 좋은 방법이 있나요?
저는 PHP 스크립트 대신 셸 스크립트를 선호합니다.
감사해요.
테이블을 동일한 서버에 복사해야 할 경우 다음 코드를 사용할 수 있습니다.
USE db2;
CREATE TABLE table2 LIKE db1.table1;
INSERT INTO table2
SELECT * FROM db1.table1;
제 해결책은 아니지만 유용하다고 생각합니다.
버릴 겁니다.PHP 기반의 어떤 것보다 훨씬 덜 복잡합니다.
mysqldump -u user1 -ppassword1 databasename > dump.sql
mysql -u user2 -ppassword2 databasename < dump.sql
MySQL 참조: 4.5.4. mysqdump — 데이터베이스 백업 프로그램
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는 테이블의 기본 키입니다.
서로 다른 서버가 있는 하나의 라이너
mysqldump -h host1 -u user1 -ppassword1 databasename TblName | mysql -h host2 -u user2 -ppassword2 anotherDatabase
Pphmyadmin은 테이블을 한 데이터베이스에서 다른 데이터베이스로 복사할 수 있는 기능이 내장되어 있습니다.그렇지 않으면 페카를 가지고 가거나 테이블을 내보내고 테이블을 가져올 수 있습니다.
CREATE TABLE db_target.cloned_table
SELECT *
FROM db_source.source_table;
도움을 구하는 다른 사람들을 위해 이 답변을 올리겠습니다.
SSH에 액세스할 수 없는 경우 PhpMyAdmin을 사용할 수 있습니다.
간단히:
- 이동할 테이블 찾아보기
- Operations 탭을 클릭합니다.
- MOVE 또는 카피 투 데이터베이스 기능 사용
권한 문제가 발생하면 사용자에게 글로벌 권한을 임시로 부여하거나 두 데이터베이스에 동일한 사용자를 추가할 수 있습니다.
exec('mysqldump --user=username --password="password" --host=hostname --database=database table1 table2 > databasedump.sql');
exec('mysql --user=username --password="password" --host=hostname --database=database < databasedump.sql');
insert into dest.table select * from orginal.table;
사용하다<from database>
create table <to database.new name> as (select * from <table to copy>);
처음 질문에 아무도 대답하지 않은 것처럼 보이므로 원격 MySQL 서버에서 로컬 MySQL 서버로 테이블을 백업하는 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;
}
위의 솔루션은 제 것이 아닙니다. 약간의 변경 사항이 있는 여기 있습니다.
언급URL : https://stackoverflow.com/questions/3932608/how-to-copy-a-table-from-one-mysql-database-to-another-mysql-database
'source' 카테고리의 다른 글
별도의 스레드 풀에서 실행되는 스프링 부트 액추에이터 (0) | 2023.09.11 |
---|---|
CSS 확인란 입력 스타일 (0) | 2023.09.11 |
Uncatched TypeError: o.widget이 mouse.min.js Wordpress에서 함수가 아닙니다. (0) | 2023.09.11 |
Android에서 의도란? (0) | 2023.09.11 |
질의 결과를 기반으로 하위 질의 가능 UNION ALL 만들기 (0) | 2023.09.11 |