Làm thế nào để chọn những bảng để bỏ qua cho drush sql-sync @dev @staging?


7

Theo câu hỏi trước của tôi Làm cách nào để đặt Drush sql-sync không sao chép người dùng giữa @dev và @staging? Tôi đã chọn trước thủ công hơn 80 bảng không được tự động đồng bộ hóa (nội dung, vai trò và quyền, người dùng, tạm thời, bộ đệm). Tôi không hoàn toàn hài lòng với giải pháp này. Tại sao? Bởi vì các quyết định bộ lọc của tôi dựa trên kinh nghiệm, trực giác và đoán khi tôi muốn sử dụng phương pháp thực hành tốt nhất.

Làm thế nào để chọn đúng bảng nào để bỏ qua drush sql-sync @dev @tstdrush sql-sync @production @staging?

Thiết lập của tôi:

git.drupal.org ==> kho lưu trữ gup drupal cục bộ ==> @dev -> @tst -> @staging -> @production (cấu hình, nội dung tĩnh, vai trò và quyền)

@staging <- @production (nội dung, kịch bản sản xuất sẽ được kiểm tra)

Hướng dẫn dứt khoát về Drupal 7 của Benjamin Melançon và những người khác nói:

Dưới đây là danh sách các bảng xuất hiện trong example.drushrc.php:

$options['structure-tables'] = array(  'common' => array('cache',
  'cache_filter', 'cache_menu', 'cache_page', 'history', 'sessions',
  'watchdog'),
);

Bạn có thể cần thêm một số bảng vào danh sách này. Một nơi tốt để bắt đầu sẽ là xem xét danh sách các bảng có chứa cachetên của họ thông quadrush sql-query 'show tables;' | grep cache

Xóa khỏi bảng danh sách này imagecache_action, v.v. và thêm phần còn lại vào danh sách bảng cấu trúc của bạn.

Sau khi bạn thực hiện sql-syncvới các bảng bị bỏ qua, bạn sẽ cần xóa bộ đệm trên trang đích để đảm bảo mọi thứ hoạt động tốt.

Các bảng khác để xem xét là gì? Tại sao?


Có một bản vá (đang thực hiện) được gọi là "Xử lý tốt hơn các tùy chọn bảng cấu trúc và bảng bỏ qua (bao gồm hỗ trợ cache_ *!)" Drupal.org/node/698264 sẽ giúp ích rất nhiều, đặc biệt là với các bảng cache_ * và field_ * hạn chế thay đổi trong bộ lọc phân phối dữ liệu drush.
Refineo

Câu trả lời:


6

Drush sql-sync không hỗ trợ cơ sở dữ liệu dùng chung sử dụng tiền tố. Bạn có thể gặp may mắn nếu bạn đã viết một tập lệnh bao bọc được sử dụng drush sqlq 'show tables;'để lấy danh sách các bảng có sẵn, lọc chúng theo cách thủ công và sau đó chuyển chúng trở lại sql-sync thông qua tùy chọn --tables-list.


5

Trong Drupal 7 các bảng này bạn nên xem xét:

'cache', 'cache_field', 'cache_form', 'cache_filter', 'cache_menu', 'cache_page', 'history', 'sessions', 'watchdog'

Trong Drupal 8, những:

'cache', 'cache_bootstrap', 'cache_config', 'cache_container', 'cache_data', 'cache_default', 'cache_discovery', 'cache_filter', 'cache_menu', 'cache_page', 'history', 'search_index', 'sessions', 'watchdog'

Điều này không bao gồm các bảng cụ thể có liên quan đến mô-đun Di chuyển hoặc bất kỳ bảng tùy chỉnh nào khác có thể lưu trữ một số dữ liệu tạm thời.

Ví dụ lệnh drush để kết xuất và bỏ qua các bảng này (chỉ tạo một cấu trúc không có dữ liệu):

drush sql-dump --structure-tables-list=cache,cache_filter,cache_menu,cache_page,history,sessions,watchdog --result-file=dump.sql

Gợi ý: Thêm --ordered-dumpcho đầu ra của con người đẹp hơn, nhưng chậm hơn một chút khi nhập.

Thông thường thêm structure-tabletùy chọn phải đủ cho các hoạt động cục bộ ( $options['structure-tables']), nhưng đối với sql-sync, tôi nghĩ rằng điều này nên được thêm cho bí danh cụ thể trong phần dành riêng cho lệnh, ví dụ:

$aliases['foo'] = array(
  // These options will only be set if the alias is used with the specified command.
  'command-specific' => array(
    'sql-sync' => array(
      'structure-tables-key' => 'common',
      'skip-tables-key' => 'common',
      'structure-tables' => array(
        // You can add more tables which contain data to be ignored by the database dump
        'common' => array('cache', 'cache_filter', 'cache_menu', 'cache_page', 'history', 'search_index', 'sessions', 'watchdog'),
      ),
      'skip-tables' => array(
        'common' => array('field_deleted_revision_63'),
      ),
    ),
    'sql-dump' => array(
      'ordered-dump' => TRUE,
      'structure-tables-key' => 'common',
      'skip-tables-key' => 'common',
    ),
  ), // end: command-specific
  // Applied only if the alias is used as the source.
  'source-command-specific' => array(
  ),
  // Applied only if the alias is used as the target.
  'target-command-specific' => array(
  ),
);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.