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 '********'];
6Công cụ lưu trữ
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ảngCREATE 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ộCREATE SERVER mailsync FOREIGN DATA WRAPPER mysql OPTIONS [HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********'];
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àyChuẩ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 |
+----------------+
4CREATE SERVER mailsync
FOREIGN DATA WRAPPER mysql
OPTIONS [HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********'];
2Chuẩ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ìnhSau 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 '********'];
5Tạ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 |
+----------------+
0CREATE 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
CREATE SERVER mailsync
FOREIGN DATA WRAPPER mysql
OPTIONS [HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********'];
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. gmailsync-schema-liên kết. sql
CREATE SERVER mailsync
FOREIGN DATA WRAPPER mysql
OPTIONS [HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********'];
2Tiề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ừ xaHã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àoCREATE SERVER mailsync
FOREIGN DATA WRAPPER mysql
OPTIONS [HOST 'mailsrv', DATABASE 'mailsync', USER 'mailsync', PASSWORD '********'];
8Bâ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ệuVấ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 '********'];
1Tô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ệuGhi 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