Có Federated tables trong MySQL:
Các công cụ lưu trữ FEDERATED phép bạn truy cập dữ liệu từ một từ xa cơ sở dữ liệu MySQL mà không sử dụng sao chép hoặc công nghệ cluster. Truy vấn bảng FEDERATED cục bộ sẽ tự động lấy dữ liệu từ các bảng từ xa (được liên kết) từ xa. Không có dữ liệu được lưu trữ trên các bảng địa phương.
Trước tiên, bạn phải có bảng trên máy chủ từ xa mà bạn muốn truy cập bằng bảng FEDERATED. Giả sử rằng bảng từ xa là trong cơ sở dữ liệu sakila và được định nghĩa như thế này:
CREATE TABLE test_table (
id INT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(32) NOT NULL
PRIMARY KEY (id)
)
ENGINE=MyISAM
DEFAULT CHARSET=latin1;
Tiếp theo, tạo một bảng FEDERATED trên máy chủ địa phương để truy cập vào bảng điều khiển từ xa:
CREATE TABLE federated_table (
id INT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(32) NOT NULL
PRIMARY KEY (id)
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://fed_user:[email protected]:3306/sakila/test_table';
chuỗi kết nối mẫu:
CONNECTION='mysql://username:[email protected]:port/database/tablename'
CONNECTION='mysql://[email protected]/database/tablename'
CONNECTION='mysql://username:[email protected]/database/tablename'
Cấu trúc cơ bản của bảng này phải khớp với bảng điều khiển từ xa, ngoại trừ tùy chọn bảng ENGINE được liên kết.
Execute:
show variables like '%federated%';
để kiểm tra xem công cụ lưu trữ FEDERATED có sẵn trên máy chủ địa phương của bạn.
Bảng federated_table
trong máy chủ cục bộ sẽ trở thành bảng ảo test_table
trong máy chủ từ xa.
Bây giờ bạn có thể sử dụng JOIN giữa các bảng trong một DB trong máy chủ cục bộ. Nếu có một bảng gọi là test
trong máy chủ localhost của bạn, và bạn muốn kết hợp với các cựu sakila.test_table mà là ở máy chủ từ xa, hãy viết một truy vấn như hình dưới đây:
SELECT * FROM `federated_table` JOIN `test`;
Các federated_table
trong truy vấn thực sự sẽ tham chiếu đến test_table trong máy chủ từ xa.
On cho phép FEDERATED Storage Engine
Các công cụ lưu trữ FEDERATED không được kích hoạt theo mặc định trong máy chủ đang chạy; để kích hoạt FEDERATED, bạn phải khởi động nhị phân máy chủ MySQL bằng cách sử dụng tùy chọn --federated
.
LƯU Ý:
Công cụ lưu trữ tùy chọn yêu cầu đặc quyền và không tải được khi --skip-grant-tables
được chỉ định.
Kết quả toàn bộ db sẽ không tải và các lỗi sau sẽ xuất hiện trong các bản ghi:
110318 21:37:23 [ERROR] /usr/local/libexec/mysqld: unknown option '--federated'
này lần lượt có nghĩa là một bản nâng cấp từ 5.x cần phải được thực hiện theo hai bước này nếu bạn có các bảng liên kết. Một lần với số --skip-grant-tables
và không có --federated
, một lần không có --skip-grant-tables
và với --federated
.
Nguồn: The FEDERATED Storage Engine
cảm ơn, đặc biệt là cho hướng dẫn nhanh. tiếc là tôi gặp khó khăn khi làm cho nó hoạt động. hiển thị các biến như '% federated%'; trả về tập rỗng. Tôi tìm thấy # Vô hiệu hóa Liên kết theo mặc định bỏ qua liên kết trong my.ini, tôi đã nhận xét dòng bỏ qua và dịch vụ đã khởi động lại, tôi cũng đã thêm liên kết vào phần [mysqld] trong tệp này và khởi động lại dịch vụ. –
Bạn đang sử dụng phiên bản MySQL nào? – Jacob
không, được rồi .. có vẻ như nó đang hoạt động ngay bây giờ, mặc dù bộ trống rỗng quay trở lại. cảm ơn bạn:) –