Điểm:0

Làm cách nào để di chuyển cơ sở dữ liệu ejabberd từ phụ trợ SQL sang Mnesia?

lá cờ za

Có hỗ trợ khá nhiều thao tác chuyển từ Mnesia sang SQL, lệnh đặc biệt ejabberdctl export2sql (trong các phiên bản cũ hơn, nó thường được gọi là xuất2odbc). Một số thiết lập có thể cần điều đó vì Mnesia bị giới hạn ở 2GiB và blah blah blah.

Trong trường hợp của tôi, thực sự không cần phải có cơ sở dữ liệu bên ngoài. Có khoảng 10-15 người dùng đang hoạt động và không quá 30 trong tổng số người dùng và kích thước xuất từ ​​cơ sở dữ liệu SQL là khoảng 200 kB.

Ai đó trong quá khứ đã làm điều đó, xuất cơ sở dữ liệu sang SQL (cụ thể là MySQL). Làm cách nào tôi có thể hoàn nguyên thay đổi đó?

Có thể export_piefxis giúp tôi bằng cách nào đó? Những gì nó làm?


cập nhật 1. Sau một số khám phá, tôi thấy rằng chỉ có hai mô-đun có một số dữ liệu trong cơ sở dữ liệu SQL: mod_rostermod_vcard. Vì vậy, chỉ những người cần phải được chuyển đổi. Có cách nào để chuyển đổi dữ liệu của họ ra bên ngoài và tải vào ejabberd không? Ý tôi là, có một ejabberdctl dump_table, nhưng lại không có lệnh đảo ngược.

Cũng thế, export_piefxis dường như không giúp được gì. Nó chỉ xuất nội dung bằng không, trong khi có dữ liệu trong cơ sở dữ liệu và nó được tìm nạp khi tôi kết nối với ví dụ:. khách hàng mới được khởi tạo.

Cập nhật 2. Phần mềm: Bộ chứa Debian 11.2 LXC chạy trên máy chủ Proxmox VE 6.4-1. Ejabberd 21.01-2 được cài đặt với đúng cách từ kho lưu trữ Debian tiêu chuẩn.

Cơ sở dữ liệu đã được di chuyển từ Ejabberd cũ vào khoảng phiên bản 2.1, đang chạy trên Gentoo và được cập nhật lần cuối vào năm 2015.Tôi không có cái máy đó theo ý mình nữa. Di chuyển cơ sở dữ liệu Mnesia đã được thực hiện như sau:

# trên máy cũ
sao lưu ejabberdctl /tmp/[email protected] 
ejabberdctl mnesia_change_nodename ejabberd@localhost ejabberd@jabber2 \
           /tmp/[email protected] /tmp/[email protected]
# trên máy mới (bắt đầu với cơ sở dữ liệu trống)
ejabberdctl install_fallback /tmp/[email protected]
dừng ejabberdctl
bắt đầu ejabberdctl

Cấu hình trên máy mới chỉ tham chiếu cùng một cơ sở dữ liệu MySQL cho mod_rostermod_vcard.

ejabberd.yml:

loglevel: thông tin

log_rotate_count: 0

máy chủ:
  - "ví dụ.org"

máy chủ_config:
  "rterm.ru":
    sql_type: mysql
    sql_server: "máy chủ db"
    sql_database: "ejabberd"
    sql_username: "ejabberd"
    sql_password: "mật khẩu"
    auth_method: [bên ngoài]

tệp chứng chỉ:
  - "/etc/ejabberd/ejabberd.pem"

tốt:
  tự động: sai

xác định_macro:
  'TLS_CIPHERS': "CAO:!aNULL:!eNULL:!3DES:@STRENGTH"
  'TLS_OPTIONS':
    - "no_sslv3"
    - "no_tlsv1"
    - "no_tlsv1_1"
    - "cipher_server_preference"
    - "không_nén"


c2s_ciphers: 'TLS_CIPHERS'
s2s_ciphers: 'TLS_CIPHERS'
c2s_protocol_options: 'TLS_OPTIONS'
s2s_protocol_options: 'TLS_OPTIONS'

nghe:
  -
    cổng: 5222
    ip: "::"
    mô-đun: ejabberd_c2s
    max_stanza_size: 262144
    trình tạo hình: c2s_shaper
    truy cập: c2s
    starttls_required: đúng
    giao thức_options: 'TLS_OPTIONS'
  -
    cổng: 5223
    ip: "::"
    mô-đun: ejabberd_c2s
    max_stanza_size: 262144
    trình tạo hình: c2s_shaper
    truy cập: c2s
    tl: đúng
    giao thức_options: 'TLS_OPTIONS'
  -
    cổng: 5269
    ip: "::"
    mô-đun: ejabberd_s2s_in
    max_stanza_size: 524288
  -
    cổng: 5443
    ip: "::"
    mô-đun: ejabberd_http
    tl: đúng
    giao thức_options: 'TLS_OPTIONS'
    request_handlers:
      / quản trị viên: ejabberd_web_admin
      /api: mod_http_api
      /bosh: mod_bosh
      /tải lên: mod_http_upload
      /ws: ejabberd_http_ws
  -
    cổng: 5280
    ip: "::"
    mô-đun: ejabberd_http
    tls: sai
    request_handlers:
# Điều này chạy phía sau proxy HTTP ngược với Let's Encrypt, là vùng chứa hàng xóm trên cùng một máy chủ, vì vậy điều này an toàn
      / quản trị viên: ejabberd_web_admin
      /bosh: mod_bosh
      /tải lên: mod_http_upload
  -
    cảng: 1883
    ip: "::"
    mô-đun: mod_mqtt
    tồn đọng: 1000

auth_method: [bên ngoài]
extauth_program: "/etc/ejabberd/auth_mysql.py"
extauth_pool_size: 5

vô hiệu hóa_sasl_mechanism:
  - "X-OAUTH2"

s2s_use_starttls: bắt buộc

acl:
  quản trị viên:
    người dùng:
       - "[email protected]"

  địa phương:
    user_regexp: ""
  lặp lại:
    IP:
      - 127.0.0.0/8
      - ::1/128

truy cập_rules:
  địa phương:
    cho phép: cục bộ
  c2s:
    từ chối: bị chặn
    chấp nhận tất cả
  thông báo:
    cho phép: quản trị viên
  cấu hình:
    cho phép: quản trị viên
  muc_create:
    cho phép: cục bộ
  pubsub_createnode:
    cho phép: cục bộ
  đáng tin cậy_mạng:
    cho phép: loopback

api_permissions:
  "lệnh điều khiển":
    từ:
      - ejabberd_ctl
    ai: tất cả
    Gì: "*"
  "quyền truy cập quản trị viên":
    Ai:
      quyền:
        cho phép:
          - acl: lặp lại
          - acl: quản trị viên
      thề:
        phạm vi: "ejabberd: quản trị viên"
        quyền:
          cho phép:
            - acl: lặp lại
            - acl: quản trị viên
    Gì:
      - "*"
      - "!dừng lại"
      - "!bắt đầu"
  "lệnh công cộng":
    Ai:
      IP: 127.0.0.1/8
    Gì:
      - trạng thái
      - số_người_dùng_được_kết_nối

máy ép:
  thông thường:
    tỷ lệ: 3000
    kích thước bùng nổ: 20000
  nhanh: 200000

shaper_rules:
  max_user_sessions: 10
  max_user_offline_messages:
    5000: quản trị viên
    100: tất cả
  c2s_shaper:
    không có: quản trị viên
    bình thường: tất cả
  s2s_shaper: nhanh

mô-đun:
  mod_adhoc: {}
  mod_admin_extra: {}
  mod_announce:
    truy cập: thông báo
  mod_avatar: {}
  mod_blocking: {}
  mod_bosh: {}
  mod_caps: {}
  mod_carboncopy: {}
  mod_client_state: {}
  mod_configure: {}
  mod_disco: {}
  mod_fail2ban: {}
  mod_http_api: {}
  mod_http_upload:
    put_url: https://@HOST@:5443/upload
    custom_headers:
      "Kiểm soát truy cập-Cho phép-Xuất xứ": "https://@HOST@"
      "Phương thức kiểm soát truy cập-cho phép": "NHẬN,HEAD,PUT,TÙY CHỌN"
      "Kiểm soát truy cập-Cho phép-Tiêu đề": "Loại nội dung"
  mod_last: {}
  mod_mqtt: {}
  mod_muc:
    quyền:
      - cho phép
    truy cập_admin:
      - cho phép: quản trị viên
    access_create: muc_create
    access_persistent: muc_create
    truy cập_mâm:
      - cho phép
    default_room_options:
      mẹ: đúng
  mod_muc_admin: {}
  mod_offline:
    access_max_user_messages: max_user_offline_messages
  mod_ping: {}
  mod_pres_counter:
    đếm: 5
    khoảng thời gian: 60
  mod_privacy: {}
  mod_private: {}
  mod_proxy65:
    truy cập: cục bộ
    max_connections: 5
  mod_pubsub:
    access_createnode: pubsub_createnode
    bổ sung:
      - bằng phẳng
      - pê-đê
    force_node_config:
      "eu.siacs.conversations.axolotl.*":
        access_model: mở
      lưu trữ: đánh dấu:
        access_model: danh sách trắng
  mod_push: {}
  mod_push_keepalive: {}
  mod_roster:
    db_type: sql # Đây là thứ tôi muốn loại bỏ
    phiên bản: đúng
  mod_s2s_dialback: {}
  mod_shared_roster: {}
  mod_sic: {}
  mod_stream_mgmt:
    resend_on_timeout: if_offline
  mod_stun_disco: {}
  mod_vcard:
    db_type: sql # Và cái này
    tìm kiếm: sai
  mod_vcard_xupdate: {}
  mod_version: {}
Điểm:0
lá cờ ru

Ok, có một tính năng không tương thích: bạn đang hỏi ejabberd chi tiết về các tài khoản đã đăng ký, nhưng ejabberd không biết những tài khoản nào tồn tại.

Bạn đã cấu hình ejabberd để sử dụng rút ra, có nghĩa là ejabberd sử dụng tập lệnh đó để kiểm tra xem tài khoản có tồn tại không hay không... Nhưng tập lệnh đó không bao giờ báo cáo danh sách tài khoản đã đăng ký.

Đây là vấn đề khi bạn muốn biết danh sách tài khoản đã đăng ký:

  • xuất các tài khoản hiện có bằng export_piefxis
  • xem danh sách tài khoản trong ejabberd WebAdmin

Điều này đã được báo cáo trong https://github.com/processone/ejabberd/issues/3705

Một giải pháp là kích hoạt tùy chọn auth_use_cache để mỗi lần đăng nhập đưa ra một gợi ý mà ejabberd lưu trữ. Đợi vài ngày hoặc vài tuần và sau đó khi bạn yêu cầu danh sách "tài khoản đã đăng ký", ejabberd sẽ đọc bộ đệm xác thực đó và sử dụng nó.

Vấn đề là bạn sẽ cần đợi tất cả các tài khoản đã đăng ký đăng nhập và để lại thông tin được lưu trong bộ nhớ cache đó trong ejabberd...

Tin vui: có một cách để bạn có thể lấp đầy bộ đệm xác thực bằng các tài khoản:

  1. Nhận danh sách các tài khoản đã đăng ký theo cách thủ công

  2. Cho phép auth_use_cache trong ejabberd và khởi động lại

  3. Chạy lệnh này cho mọi tài khoản bạn muốn xuất. Điều này sẽ đảm bảo extauth được chạy cho tài khoản đó và bộ đệm xác thực lưu trữ gợi ý này:

    ejabberdctl check_account user123 localhost

  4. Để tò mò, bạn có thể xem danh sách các tài khoản đã đăng ký (thực tế đó chỉ là danh sách các tài khoản được lưu trong bộ nhớ cache xác thực ...)

    ejabberdctl đã đăng ký_users máy chủ cục bộ quản trị viên người dùng123

  5. Bây giờ bạn cuối cùng cũng có thể chạy export_piefxis

  6. Hãy nhớ rằng: thông tin bộ đệm xác thực đó sẽ bị xóa khi ejabberd dừng.

  7. Sau khi được xuất, bạn có thể hoàn nguyên cấu hình

Nikita Kipriyanov avatar
lá cờ za
Đó là lời giải thích hợp lý. Cảm ơn những gợi ý về cách tiến hành, tôi sẽ thử!
Điểm:0
lá cờ ru

export_piefxis có thể giúp tôi bằng cách nào đó không? Những gì nó làm?

Vâng, đó phải là lệnh thực hiện những gì bạn muốn: chạy nó khi bộ lưu trữ SQL vẫn được sử dụng. Sau khi bạn có nội dung trong các tệp XML, hãy định cấu hình ejabberd để sử dụng Mnesia và nhập các tệp đó.

Ngoài ra, export_piefxis dường như không giúp được gì.

Nó gãy? Hoặc nó chỉ đơn giản là xuất nội dung không?

Nikita Kipriyanov avatar
lá cờ za
Tôi đã thử lại. Nó không xuất được nội dung nào (hai tệp, một tệp 180 byte và tệp kia là 132 - sau là dữ liệu máy chủ của tôi). Trong khi kết nối với jabber với ứng dụng khách mới, tôi có thể thấy dữ liệu danh sách và vcard được tải từ cơ sở dữ liệu sql,
Badlop avatar
lá cờ ru
Tôi đã cài đặt ejabberd từ git, định cấu hình để sử dụng MySQL cho bộ nhớ xác thực và mặc định, đăng ký tài khoản, thêm liên hệ và chỉnh sửa vcard. Sau đó được xuất và xml thứ hai chứa thông tin chi tiết về người dùng: ......
Badlop avatar
lá cờ ru
Cập nhật câu hỏi ban đầu của bạn nêu chi tiết phiên bản ejabberd nào đang chạy, cách cài đặt, tệp cấu hình của nó (bình luận chi tiết riêng tư)
Nikita Kipriyanov avatar
lá cờ za
Tôi đã thêm tất cả các chi tiết bạn muốn

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.