2010-02-08 8 views

Trả lời

17

Theo one source, mysqldump không có tùy chọn này.

Bạn có thể sử dụng tùy chọn --force khi nhập tệp kết xuất trở lại, trong đó MySQL sẽ bỏ qua các lỗi được tạo từ nỗ lực tạo bảng trùng lặp. Tuy nhiên lưu ý rằng với phương pháp này, các lỗi khác cũng sẽ bị bỏ qua.

Nếu không, bạn có thể chạy tệp kết xuất thông qua tập lệnh sẽ thay thế tất cả các lần xuất hiện của CREATE TABLE bằng CREATE TABLE IF NOT EXISTS.

4

Không phải những gì bạn có thể muốn, nhưng với --add-drop-table mỗi CREATE được bắt đầu bằng câu lệnh DROP TABLE theo.

Nếu không, tôi sẽ tìm kiếm/thay thế đơn giản (ví dụ: với sed).

22

Cố gắng sử dụng này trong hồ sơ SQL của bạn:

sed 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g' <file-path> 

hoặc lưu

sed -i 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g' <file-path> 

nó không phải là lý tưởng, nhưng nó hoạt động: P

+2

Hy vọng không có dữ liệu trong db của bạn với chuỗi cụ thể trong đó. :) – Riedsio

+2

Tỷ lệ cược là khá khó xảy ra. –

+5

Bạn có thể giảm thiểu lỗi bằng cách mở rộng kết quả khớp, '$ sed 's/^ TẠO BẢNG foo/TẠO BẢNG NẾU KHÔNG BIỂU TƯỢNG foo/g'' –

9

Sử dụng sed như mô tả của tác phẩm @Pawel tốt. Tuy nhiên, bạn có thể không thích ý tưởng đường ống dữ liệu của bạn thông qua các nguồn lỗi tiềm năng hơn là hoàn toàn cần thiết. Trong trường hợp này người ta có thể sử dụng hai bãi riêng biệt:

  • bãi chứa định nghĩa bảng đầu tiên (--no-data --skip-add-drop-table)
  • bãi thứ hai với chỉ dữ liệu (--no-create-info --skip-add-drop-table)

Có một số thứ khác để chăm sóc mặc dù (ví dụ như kích hoạt). Kiểm tra hướng dẫn để biết chi tiết.

2

tạo tập lệnh bash bằng cách này ... đảm bảo bạn làm cho tập lệnh có thể thực thi được. (chmod 0777 dump.sh)

dump.sh

#!/bin/bash 

name=$HOSTNAME 
name+="-" 
name+=$(date +"%Y-%m-%d.%H:%M") 
name+=".sql" 
echo $name; 
mysqldump --replace --skip-add-drop-table --skip-comments izon -p > "$name" 
sed -i 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g' "$name" 
0

Để Tìm kiếm và thay thế văn bản Trên Windows 7 Sử dụng PowerShell

mở dấu nhắc lệnh và sử dụng lệnh dưới đây

powershell -Command "(gc E:\map\map_2017.sql) -replace 'CREATE TABLE', 'CREATE TABLE IF NOT EXISTS' | Out-File E:\map\map_replaced.sql" 
  • param Đầu tiên là filepath

  • Tham số thứ hai là 'f ind chuỗi'

  • Thứ ba param là 'thay thế chuỗi'

Lệnh này sẽ tạo ra một tập tin mới có văn bản thay thế. Xóa Lệnh bắt đầu từ '|' (ống) nếu bạn muốn thay thế và lưu nội dung trên cùng một tệp.

0

Các sed sẽ nhiều nhanh hơn mà không có 'g' (toàn cầu) ở cuối của nó:

ví dụ:

mysqldump -e <database> | sed 's/^CREATE TABLE /CREATE TABLE IF NOT EXISTS /' > <database>.sql 
+0

Nếu bạn muốn SQL hoạt động, bạn phải loại bỏ DROP TABLE IF EXIST. –

0

Sản lượng bãi là sự kết hợp của thả và CREATE, vì vậy bạn phải xóa câu lệnh DROP và thay đổi câu lệnh CREATE để tạo kết quả hợp lệ (hợp lý):

mysqldump --no-data -u root <schema> | sed 's/^CREATE TABLE /CREATE TABLE IF NOT EXISTS /'| sed 's/^DROP TABLE IF EXISTS /-- DROP TABLE IF EXISTS /' > <schema>.sql