Làm cách nào để thêm công cụ LIÊN KẾT trong MySQL?

Trở lại vào tháng 11 năm 2020, đã đến lúc phải suy nghĩ lại về cơ sở hạ tầng sao chép MySQL cho Bảng điều khiển máy bay, bảng điều khiển khách hàng của chúng tôi tại Online GmbH. Toàn bộ ứng dụng chạy trên một máy chủ riêng biệt, nhưng một trích xuất thông tin tài khoản thư (thông tin xác thực tài khoản thư, ánh xạ/chuyển tiếp thư) cần được sao chép tới 3 máy chủ thư của chúng tôi (

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
5,
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
6,
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
7). Vào thời điểm đó, tôi đang sử dụng bản sao MySQL MASTER-SLAVE cho một cơ sở dữ liệu duy nhất trong thiết lập 4 nút (1 chính + 3 nô lệ)

Vì lý do bảo mật, tôi không còn muốn bất kỳ máy chủ thư nào có quyền truy cập vào binlog của máy chủ đã lưu trữ bảng điều khiển của chúng tôi (mặc dù tôi đã giới hạn điều đó ở một cơ sở dữ liệu duy nhất chỉ có dữ liệu liên quan đến máy chủ thư). Tôi cũng muốn giảm độ phức tạp đi một chút, chỉ sử dụng bản sao MySQL cho 3 máy chủ thư và truyền bá

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
5 cho chủ

Dữ liệu máy chủ thư được trích xuất từ ​​cơ sở dữ liệu bảng điều khiển của chúng tôi bằng trình kích hoạt MySQL (chủ yếu là trình kích hoạt

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
0,
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
1 và
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
2) vào một cơ sở dữ liệu riêng biệt
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
3. Làm cách nào để lấy toàn bộ dữ liệu
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
3 được lưu trữ trên máy chủ từ xa
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
5 mà không cần sử dụng bản sao MySQL?

Đó là nơi Công cụ lưu trữ LIÊN KẾT của MySQL phát huy tác dụng

Hướng dẫn tham khảo MySQL cung cấp cho chúng tôi một lời giải thích hay cho công cụ lưu trữ

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
6

Công cụ lưu trữ

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
6 cho phép bạn truy cập dữ liệu từ cơ sở dữ liệu MySQL từ xa mà không cần sử dụng công nghệ sao chép hoặc cụm. Truy vấn bảng
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
6 cục bộ sẽ tự động lấy dữ liệu từ các bảng từ xa (được liên kết). Không có dữ liệu nào được lưu trữ trên các bảng cục bộ

Tôi sẽ giải thích cách thiết lập bảng ________ 06 trên máy chủ bảng điều khiển chính của chúng tôi, được gọi là ________ 90 bên dưới. Cơ sở dữ liệu chính sẽ được lưu trữ trên máy chủ thư chính của chúng tôi, được gọi là

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
5 bên dưới. Tôi sẽ không giải thích cách thiết lập bản sao MySQL trong bài viết này

Chuẩn bị máy chủ từ xa

Trên máy chủ từ xa

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
5 sẽ lưu trữ cơ sở dữ liệu
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
3, chúng tôi cần thiết lập một người dùng MySQL riêng sẽ được sử dụng để truy cập
cpsrv$ mysql -u mailsync -h mailsrv -p -e 'SELECT USER()'
+----------------+
| USER()         |
+----------------+
| mailsync@cpsrv |
+----------------+
4

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
2

Chuẩn bị máy chủ nguồn

Bật Công cụ lưu trữ LIÊN KẾT

Theo mặc định, MySQL FEDERATED Storage Engine không được kích hoạt trong MySQL. Để bật

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
6, bạn phải khởi động máy chủ MySQL bằng tùy chọn
cpsrv$ mysql -u mailsync -h mailsrv -p -e 'SELECT USER()'
+----------------+
| USER()         |
+----------------+
| mailsync@cpsrv |
+----------------+
6. Bạn có thể định cấu hình cái này trong
cpsrv$ mysql -u mailsync -h mailsrv -p -e 'SELECT USER()'
+----------------+
| USER()         |
+----------------+
| mailsync@cpsrv |
+----------------+
7 của mình

Sau khi khởi động lại MySQL, hãy kiểm tra xem công cụ đã được bật chưa

Chúng tôi chỉ cần kích hoạt

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
6 trên máy chủ sử dụng bảng
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
6, không phải trên máy chủ từ xa nơi nó kết nối với. Trong trường hợp của tôi, tôi phải bật
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
6 trên
cpsrv$ mysql -u mailsync -h mailsrv -p -e 'SELECT USER()'
+----------------+
| USER()         |
+----------------+
| mailsync@cpsrv |
+----------------+
0, nhưng không phải trên
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
5

Tạo MÁY CHỦ

Chuẩn bị MÁY CHỦ (thông tin xác thực người dùng cho kết nối người dùng

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
3 với
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
5) cho Công cụ lưu trữ
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
6 với câu lệnh
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
26 trên
cpsrv$ mysql -u mailsync -h mailsrv -p -e 'SELECT USER()'
+----------------+
| USER()         |
+----------------+
| mailsync@cpsrv |
+----------------+
0

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');

Sau đó, bạn nên kiểm tra kết nối

cpsrv$ mysql -u mailsync -h mailsrv -p -e 'SELECT USER()'
+----------------+
| USER()         |
+----------------+
| mailsync@cpsrv |
+----------------+

Thiết lập bảng CREATE SERVER mailsync FOREIGN DATA WRAPPER mysql OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********'); 6

Giả sử chúng ta đã thiết lập cơ sở dữ liệu từ xa

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
3 trên điều khiển từ xa
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
5 và có sẵn một lược đồ bảng từ toàn bộ cơ sở dữ liệu đó. Bây giờ bạn nên sao chép lược đồ db đó
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
81 sang
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
82 và chỉ cần thêm
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
83 vào cuối mỗi câu lệnh
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
84, e. g

mailsync-schema-liên kết. sql

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
2

Tiền tố

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
85 trong
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
86 đề cập đến kết nối mà chúng tôi đã thiết lập với
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
26 (xem bên trên). Bạn nên sử dụng chính xác cùng một lược đồ bảng trên cả hai máy chủ MySQL. Và không,
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
6 không thể phát hiện lược đồ bảng từ xa, vì vậy bạn cần sao chép toàn bộ định nghĩa trường
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
84. Lược đồ trên máy chủ nguồn sẽ chỉ hoạt động như một khung để truy cập dữ liệu từ xa

Hãy nhớ rằng, không có dữ liệu nào của cơ sở dữ liệu

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
3 đó được lưu trữ trên máy chủ nguồn
cpsrv$ mysql -u mailsync -h mailsrv -p -e 'SELECT USER()'
+----------------+
| USER()         |
+----------------+
| mailsync@cpsrv |
+----------------+
0 của chúng tôi, vì vậy bạn có thể tải lại toàn bộ lược đồ cơ sở dữ liệu bất cứ lúc nào như thế này mà không mất bất kỳ dữ liệu nào

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
8

Bây giờ bạn có thể

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
12 dữ liệu vào cơ sở dữ liệu này và nó thực sự sẽ được chèn trực tiếp vào máy chủ từ xa
CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
5, tất cả đều minh bạch và kỳ diệu

Vấn đề có thể xảy ra

Cho đến MySQL 8. 0. 23,

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
6 đang hoạt động hoàn hảo mà không có bất kỳ sự cố nào. Giao tiếp giữa hai máy chủ siêu ổn định. Nhưng kể từ MySQL 8. 0. 24h bắt đầu thấy lỗi lẻ tẻ trên source host như

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
1

Tôi đã có thể theo dõi điều này xuống Công cụ lưu trữ

CREATE SERVER mailsync
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********');
6 và vấn đề dường như liên quan đến công cụ mới được giới thiệu

Ghi chú quản lý kết nối

Trước đây, nếu khách hàng không sử dụng kết nối đến máy chủ trong khoảng thời gian được chỉ định bởi biến hệ thống và máy chủ đã đóng kết nối, khách hàng sẽ không nhận được thông báo về lý do. Thông thường, khách hàng sẽ thấy Mất kết nối với máy chủ MySQL trong khi truy vấn () hoặc máy chủ MySQL đã biến mất ()

Trong những trường hợp như vậy, máy chủ hiện ghi lý do cho kết nối trước khi đóng nó và máy khách nhận được thông báo lỗi nhiều thông tin hơn, Máy khách đã bị ngắt kết nối bởi máy chủ vì không hoạt động. Xem wait_timeout và Interactive_timeout để định cấu hình hành vi này. ()

Hành vi trước đó vẫn áp dụng cho các kết nối máy khách đến các máy chủ cũ hơn và các kết nối đến máy chủ của các máy khách cũ hơn

Tôi đã báo cáo vấn đề này trong Diễn đàn cộng đồng Percona

Cho đến bây giờ, vấn đề vẫn chưa được giải quyết và tôi vẫn đang chờ phản hồi trên bài đăng trên diễn đàn đó. Nhưng cài đặt đủ cao (nâng nó từ mặc định 8h lên 24h) như một giải pháp thay thế gần như đã khiến vấn đề này biến mất

Công cụ LIÊN KẾT trong mysql là gì?

Liên kết là công cụ lưu trữ dành cho hệ thống quản lý cơ sở dữ liệu quan hệ MySQL MariaDB cho phép tạo bảng là biểu diễn cục bộ của bảng nước ngoài (từ xa). It uses the MySQL client library API as a data transport, treating remote tables as if they were located on the local server.

Động cơ FEDERATED là gì?

Công cụ lưu trữ LIÊN BANG ban đầu được thiết kế để cho phép một người truy cập dữ liệu từ xa mà không cần sử dụng phân cụm hoặc sao chép và thực hiện các truy vấn cục bộ tự động truy cập dữ liệu từ xa.

Bảng LIÊN KẾT là gì?

Bảng LIÊN KẾT bao gồm hai phần tử. Máy chủ từ xa có bảng cơ sở dữ liệu, bảng này bao gồm định nghĩa bảng (được lưu trữ trong từ điển dữ liệu MySQL) và bảng được liên kết . Loại bảng của bảng từ xa có thể là bất kỳ loại nào được máy chủ mysqld từ xa hỗ trợ, bao gồm MyISAM hoặc InnoDB.

Làm cách nào để tạo một máy chủ trong MySQL?

TẠO TRÌNH GÓI DỮ LIỆU NGOÀI CỦA MÁY CHỦ TÙY CHỌN mysql (NGƯỜI DÙNG 'Từ xa', MÁY CHỦ '198. 51. 100. 106', CƠ SỞ DỮ LIỆU 'kiểm tra'); . Tên người dùng, tên máy chủ và tên cơ sở dữ liệu là bắt buộc.