Mysql跨庫操作

秋夜雨巷發表於2024-08-14

在 MySQL 中,操作多資料來源(例如從庫 A 和庫 B)進行聯查的情況,可以分為以下兩種場景:

A 庫和 B 庫在同一個 MySQL 例項

當 A 庫和 B 庫在同一個 MySQL 例項下時,可以直接使用跨庫聯查查詢。示例如下:

SELECT A.column1, B.column2
FROM A.table1 AS A
LEFT JOIN B.table2 AS B
ON A.id = B.id;

因為 MySQL 例項本身已經能夠處理這種跨庫查詢。只需要確保你在查詢時使用了正確的庫名和表名即可。

A 庫和 B 庫在不同的 MySQL 例項

當 A 庫和 B 庫在不同的 MySQL 例項下時,跨例項聯查會更復雜,因為 MySQL 不直接支援跨例項的聯查。你有以下幾種方法來實現跨例項聯查:

使用應用層合併

在應用層進行聯查。首先從一個資料庫中提取資料,然後在應用程式中處理和合並這些資料。例如:

1.	從 A 庫中查詢資料並將其儲存在應用程式中。
2.	從 B 庫中查詢資料並將其儲存在應用程式中。
3.	在應用程式中執行聯查邏輯來合併資料。

使用中間資料庫

可以將 A 庫和 B 庫中的資料匯入到一箇中間資料庫中(例如將兩個庫的資料同步到一個新的資料庫中),然後在這個中間資料庫中進行聯查。這個方法可能涉及資料同步或 ETL(提取、轉換、載入)過程。

使用 Federated 引擎(有限支援)

MySQL 提供了 Federated 引擎,允許在不同的 MySQL 例項之間訪問表。你可以在一個 MySQL 例項中建立一個 Federated 表,它對映到另一個 MySQL 例項中的表。這使得你可以透過 Federated 表進行跨例項查詢。例如:

1.	在 A 庫的 MySQL 例項中建立一個 Federated 表,它指向 B 庫的表。
2.	使用這個 Federated 表進行聯查。
CREATE TABLE federated_table (
    id INT(11) NOT NULL,
    column2 VARCHAR(255),
    PRIMARY KEY (id)
)
ENGINE=FEDERATED
CONNECTION='mysql://user:password@host:port/B_database/table2';

-- 然後執行聯查
SELECT A.column1, B.column2
FROM A.table1 AS A
LEFT JOIN federated_table AS B
ON A.id = B.id;

總結

同一 MySQL 例項:可以直接使用 SQL 語法進行跨庫聯查。
不同 MySQL 例項:需要藉助應用層合併、中間資料庫或 Federated 引擎等方法來實現跨例項聯查。
上游庫可以訪問的情況下儘量只讀取且用redis快取.
上游資料庫不可以訪問的情況下用介面互動.

相關文章