2010-10-14 3 views
20

Мне нужно скопировать таблицу из одной базы данных в другую. Это будет кроной. Какой из них лучший способ сделать это? PHP-скрипт или Shell Script. Проблема с PHP, обе базы данных имеют разные имена пользователей и пароли, поэтому я не могу этого сделать.Как скопировать таблицу из одной базы данных mysql в другую базу данных mysql

CREATE TABLE db1.table1 SELECT * FROM db2.table1 

Должен ли я просто подключить первую БД, получить все записи и вставить все в новую базу данных, используя цикл WHILE, или есть лучший способ?

Я предпочитаю сценарий оболочки, чтобы сделать это вместо PHP-скрипта.

Thanks

ответ

27

Я бы сбросил его. Гораздо менее сложно, чем на PHP. ссылка

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

MySQL: 4.5.4. mysqldump — A Database Backup Program

+5

Поскольку я хочу передать только одну таблицу, я думаю, с немного мод это будет работать mysqldump -u user1 -ppassword1 --add-drop-table databasename tablename> dump.sql спасибо – Ergec

+0

Если вы используете phpmyadmin, то это будет лучше. – gautamlakum

+7

Вы можете даже передать его через: mysqldump --user = root --password = remote_password the_database_name | mysql --user = root --password = local_password the_database_name'; обычно это можно сделать с сервера на сервер, используя SSH-port-forwarding: 'ssh -f -N -L 3307: localhost: 3306 nmmn' (nmmn - это один из моих быстрых клавиш SSH, вместо этого используйте вместо него имя сервера + порт) ; @Ergec для нескольких таблиц использует param '--tables table1 table2' – feeela

5

PHPMYADMIN имеет встроенные функциональные возможности для копирования таблицы из одной базы данных в другую. В противном случае вы можете пойти с Pekka или экспортировать таблицу, а затем импортировать таблицу.

+0

IIRC, встроенная функциональность будет работать только в том случае, если тот же пользователь имеет доступ к обеим базам данных. –

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

Все это может быть сделано одной командой.

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

Если вам нужно скопировать таблицу на том же сервере, вы можете использовать этот код:

USE db2; 

CREATE TABLE table2 LIKE db1.table1; 

INSERT INTO table2 
    SELECT * FROM db1.table1; 

Это копия + вставленное здесь: codingforums.com

Это не мое решение, но Я считаю это полезным.

+0

Это должен быть принятый ответ. Намного проще, чем в командной строке mysqldump. –

0

использование <from database>

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

Добро пожаловать в stackoverflow. Я думаю, что ваш ответ перепутался. Попробуйте переформатировать его, указав его как код. –

+1

Поскольку он стоит, этот ответ не имеет смысла. Пожалуйста, добавьте некоторое объяснение и исправьте фрагмент, который вы опубликовали. – 2013-07-18 22:18:13

3

Я помещу этот ответ для тех, кто еще ищет помощи.

Если у вас нет доступа к SSH, вы можете использовать PhpMyAdmin.

Просто:

  1. перейдите к таблице, которую нужно переместить
  2. Перейдите на вкладку Операции
  3. Используйте для перемещения или копирования в функции базы данных

Если вы столкнетесь с проблемами привилегий , вы можете временно предоставить пользователям глобальные разрешения или добавить одного и того же пользователя в обе базы данных.

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, Table1 reffers парафировать стол user2, pass2, database2, TABLE2 reffers в скопированную таблицу $ KeyField является первичным ключом таблицы

1

Один лайнер с различными серверы

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

работает как шарм! –

Смежные вопросы