2010-10-14 60 views
20

Tôi cần phải sao chép một bảng từ cơ sở dữ liệu này sang cơ sở dữ liệu khác. Đây sẽ là một cronjob. Cách nào là cách tốt nhất để làm điều đó? PHP script hoặc Shell Script. Vấn đề với PHP, cả hai cơ sở dữ liệu có tên người dùng và mật khẩu khác nhau vì vậy tôi không thể làm điều đó như thế này.Cách sao chép bảng từ một cơ sở dữ liệu mysql sang cơ sở dữ liệu mysql khác

CREATE TABLE db1.table1 SELECT * FROM db2.table1 

Tôi có nên kết nối DB đầu tiên nhận tất cả bản ghi và chèn tất cả vào cơ sở dữ liệu mới bằng WHILE loop hoặc có cách nào tốt hơn không?

Tôi thích tập lệnh shell để thực hiện việc này thay vì tập lệnh PHP.

Cảm ơn

Trả lời

27

Tôi sẽ đổ nó. Ít phức tạp hơn bất kỳ PHP nào. tài liệu tham khảo

mysqldump -u user1 -ppassword1 databasename > dump.sql 
mysql -u user2 -ppassword2 databasename < dump.sql 

MySQL: 4.5.4. mysqldump — A Database Backup Program

+5

Vì tôi chỉ muốn chuyển một bảng, tôi đoán với một chút sửa đổi này sẽ hoạt động mysqldump -u user1 -ppassword1 --add-drop-bảng databasename tablename> dump.sql cảm ơn bạn – Ergec

+0

Nếu bạn sử dụng phpmyadmin, thì nó sẽ tốt hơn. – gautamlakum

+7

Bạn thậm chí có thể gửi nó qua: 'mysqldump --user = root --password = remote_password the_database_name | mysql --user = root --password = local_password the_database_name'; thường điều này có thể được thực hiện từ máy chủ đến máy chủ bằng cách sử dụng chuyển tiếp cổng SSH: 'ssh -f -N -L 3307: localhost: 3306 nmmn' (nmmn là một trong các phím tắt SSH của tôi, sử dụng tên máy chủ + cổng thay thế) ; @Ergec cho nhiều bảng sử dụng tham số '--tables table1 table2' – feeela

5

phpMyAdmin có chức năng sẵn có để sao chép bảng từ một cơ sở dữ liệu khác. Nếu không, bạn có thể đi với Pekka hoặc xuất khẩu bảng sau đó nhập khẩu bảng.

+0

IIRC, chức năng sẵn có sẽ chỉ hoạt động nếu cùng một người dùng có quyền truy cập vào cả hai cơ sở dữ liệu. –

26
mysqldump -u user1 -ppassword1 databasename TblName | mysql -u user2 -ppassword2 anotherDatabase 

Tất cả có thể được thực hiện bằng một lệnh duy nhất.

0
insert into dest.table select * from orginal.table; 
32

Nếu bạn cần phải sao chép bảng trên cùng một máy chủ, bạn có thể sử dụng mã này:

USE db2; 

CREATE TABLE table2 LIKE db1.table1; 

INSERT INTO table2 
    SELECT * FROM db1.table1; 

Nó copy + dán từ đây: codingforums.com

Đó không phải là giải pháp của tôi, nhưng Tôi thấy nó hữu ích.

+0

Đây phải là câu trả lời được chấp nhận. Dễ dàng hơn nhiều so với dòng lệnh mysqldump. –

0

sử dụng <from database>

create table <to database.new name> as (select * from <table to copy>); 
+1

Chào mừng bạn đến với stackoverflow. Tôi nghĩ câu trả lời của bạn đã sai lầm. Hãy thử định dạng lại nó đánh dấu nó là mã. –

+1

Vì nó là viết tắt của câu trả lời này làm cho ít ý nghĩa. Vui lòng thêm một số giải thích và sửa đoạn trích bạn đã đăng –

3

tôi sẽ đưa câu trả lời này cho bất cứ ai khác tìm kiếm sự giúp đỡ.

Nếu bạn không có quyền truy cập SSH thì bạn có thể sử dụng PhpMyAdmin.

Đơn giản chỉ cần:

  1. duyệt vào bảng bạn muốn di chuyển
  2. Nhấp vào Operations tab
  3. Sử dụng Move or Copy đến chức năng cơ sở dữ liệu

Nếu bạn gặp vấn đề đặc quyền , bạn có thể tạm thời cấp cho người dùng quyền toàn cầu hoặc thêm cùng một người dùng vào cả hai cơ sở dữ liệu.

0
CREATE TABLE db_target.cloned_table 
SELECT * 
FROM db_source.source_table; 
4
$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, reffers table1 để tắt bảng user2, pass2, database2, table2 reffers bảng sao chép $ keyfield là chìa khóa chính của bảng

1

Một lót với nhau máy chủ

mysqldump -h host1 -u user1 -ppassword1 databasename TblName | mysql -h host2 -u user2 -ppassword2 anotherDatabase 
+0

hoạt động như một sự quyến rũ! –

Các vấn đề liên quan