2009-04-02 37 views
18

Trong cơ sở dữ liệu của tôi, tôi có một số bảng và dạng xem. Làm cách nào để xuất tất cả các bảng (và không phải dạng xem) khỏi cơ sở dữ liệu của tôi khỏi dòng lệnh?bảng kết xuất mysql chỉ

Trả lời

1

Bạn có thể sử dụng mysqldump với tùy chọn --ignore-table để loại trừ chế độ xem riêng lẻ. Hoặc sử dụng mysqldump và xóa các chế độ xem bằng ứng dụng/thủ công. grep có thể là một lựa chọn:

grep -v "CREATE VIEW" db.dump > db-without-views.dump 
+1

Ghi chú rằng việc dumper viết nhiều dòng cho mỗi lần xem, vì vậy không bao gồm dòng đầu tiên được đề cập sẽ chỉ để lại lỗi trong bãi chứa của bạn –

+1

Những gì @ZsoltSzilagy nói. --Các bảng hiệu quả hoạt động, nhưng phần còn lại sẽ dẫn đến việc xuất khẩu bị hỏng – DougW

+7

Tại sao điều này được đánh dấu là chính xác, điều này sẽ không giúp ích gì –

24

Việc thực hiện mysqldump hiện tại sẽ không tạo ra bãi mà không cần quan - và hơn nữa, (lần cuối cùng tôi đã kiểm tra) xem đang thực sự tạo ra hai lần - một lần như một bảng, sau đó bàn bị xóa và được thay thế bằng chế độ xem. Vì vậy, bạn không thể chỉ lọc ra lệnh "CREATE VIEW", trừ khi hành vi đó đã được sửa đổi.

Tuy nhiên, mysqldump sẽ lấy danh sách các bảng dưới dạng tham số theo tên cơ sở dữ liệu. Một cái gì đó như thế này:

mysqldump -ujoe -pmysecret joesdb posts tags comments users 
+0

+1: Tôi thích điều này – vietean

+0

Bạn thậm chí có thể truy vấn các bảng từ My Lược đồ thông tin của SQL: 'mysqldump the_db_i_want $ (mysql -Ne" SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'the_db_i_want' AND TABLE_TYPE = 'BASE TABLE' ")' –

9

backuping một bảng duy nhất từ ​​một cơ sở dữ liệu

mysqldump -uUSERNAME -pPASWORD DATABASE TABLE_NAME --host=HOST_NAME > c:\TABLE_NAME.sql 

Khôi phục một bảng duy nhất từ ​​một cơ sở dữ liệu đổ

mysql -uUSERNAME -pPASSWORD DATABASE --host=HOST_NAME < c:\TABLE_NAME.sql 
16

Để bỏ qua một cái nhìn duy nhất từ ​​DB của bạn cho Dump :

mysqldump -uusrname -ppwd -h hostname --ignore-table=db.view_name db > db.sql

Để bỏ qua nhiều cái nhìn từ Db của bạn cho Dump:

mysqldump -uusrname -ppwd -h hostname --ignore-table=db.view1 --ignore-table=db.view2 db > db.sql

LƯU Ý: để bỏ qua nhiều quan điểm cho việc sử dụng bãi --ignore-table lựa chọn nhiều lần.

0

Cách sử dụng

php mysqldump.php mydatabase myusername mypassword > myoutputfile.sql 

Đây là một kịch bản khá cũ của tôi. Ai đó có thể dễ dàng điều chỉnh điều này để sử dụng PDO nếu bạn không có quyền truy cập vào các hàm mysql.

<?php 

if (is_array($argv) && count($argv)>3) { 
    $database=$argv[1]; 
    $user=$argv[2]; 
    $password=$argv[3]; 
} 
else { 
    echo "Usage php mysqdump.php <database> <user> <password>\n"; 
    exit; 
} 

$link = mysql_connect('localhost', $user, $password); 


if (!$link) { 
    die('Could not connect: ' . mysql_error()); 
} 

$source = mysql_select_db('$database', $link); 
$sql = "SHOW FULL TABLES IN `$database` WHERE TABLE_TYPE LIKE 'VIEW';"; 
$result = mysql_query($sql); 
$views=array(); 
while ($row = mysql_fetch_row($result)) { 
    $views[]="--ignore-table={$database}.".$row[0]; 
} 
//no views or triggers please 
echo passthru("mysqldump -u root --password=\"$password\" $database --skip-triggers ".implode(" ",$views)); 

?> 
-1

Hãy thử như sau:

mysqldump -h drupdbsvr -u elt_drupal_dba -pdrupdev-654! clms_admin views_display views_view view_argument view_exposed_filter view_filter view_sort view_tablefield view_view > /opt/dbdump/clms_admin_view.sql 

đâu cú pháp là: -

mysqldump -h hostname -u database_user_name database_password database_name table_name1 table_name2 > path/sql_file.sql 
3

kịch bản cập nhật @ ladieu của:

luận
  • Shell được đúng cách trốn thoát phép mật khẩu với vỏ caracters
  • Sử dụng PDO thay vì chức năng mysql cụ thể (đôi khi một IP dường như được giải quyết chống lại DNS với mysql_ * chức năng và do đó gây ra một lỗi)
  • giả định Removed rằng kịch bản được sử dụng tại địa phương (thêm tham số host)
  • Sử dụng tùy chọn "-r" để tránh sự cố mã hóa
  • đặt tên cho tệp đầu ra.sql
  • sắp xếp lại các thông số để nó phù hợp "Tôi muốn kết nối đến với người sử dụng xác định bởi và đổ cơ sở dữ liệu>
<?php 

if (is_array($argv) && count($argv)>3) { 
    $host=($argv[1]); 
    $user=($argv[2]); 
    $password=($argv[3]); 
    $database=($argv[4]); 

} 
else { 
    echo "Usage php mysqdump.php <host> <user> <password> <database>\n"; 
    exit; 
} 

echo 'connecting to'.$host; 

$pdo=new PDO("mysql:host=$host;dbname=$database",$user,$password); 

//$link = mysql_connect($host, $user, $password); 

//$source = mysql_select_db($database, $link); 
$sql = "SHOW FULL TABLES IN `$database` WHERE TABLE_TYPE LIKE 'VIEW';"; 
$result = $pdo->query($sql); 
$views=array(); 
while ($row = $result->fetch()) { 
    $views[]="--ignore-table={$database}.".$row[0]; 
} 
//no views or triggers please 
$host=escapeshellarg($host); 
$user=escapeshellarg($user); 
$password=escapeshellarg($password); 
$database=escapeshellarg($database); 
echo passthru("mysqldump -h $host -u $user --password=\"$password\" $database --skip-triggers ".implode(" ",$views)." -r $database.sql"); 

Thưởng thức!

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