Mysql

MySQL 5.5 是否支持具有單獨架構的共享數據庫?

  • September 1, 2021

我正在使用 MySQL 5.5 作為後端數據庫開發基於 SaaS 的產品。我想為所有租戶保留共享數據庫,但將每個租戶的數據庫模式分開。所有租戶都有一個數據庫,但每個租戶都有不同的架構。

我不確定 MySQL 是否支持它。

你的回答對我有很大幫助。

提前致謝!

我對 MySQL 的理解是,他們所謂的“數據庫”是其他數據庫上的模式。因此,您的問題的答案是“是”或“否”,具體取決於您要問的具體情況。事實上,“創建模式”只是映射到 MySQL 上的“創建數據庫”。

所以是的,您可以為每個租戶執行一個模式,但這在 MySQL 上與每個租戶一個數據庫沒有任何不同。所以不確定這是肯定還是否定。

嚴格來說,數據庫和模式是一回事。

從你的問題的措辭

  • 你所謂的單庫其實就是mysqld伺服器程序
  • 您在 mysqld 程序管理的作業系統子文件夾中稱為架構

mysqld 創建數據庫的方式很簡單:它只是在目前數據目錄下創建一個子文件夾。例如,Linux 的預設數據目錄是/var/lib/mysql. 每當你執行:

CREATE DATABASE zaver;

它只是執行mkdir /var/lib/mysql/zaver。您可以在 mysqld 實例下創建多個數據庫。只需呼叫

CREATE DATABASE zaver1;
CREATE DATABASE zaver2;
CREATE DATABASE zaver3;

執行時SHOW DATABASES;,您將看到information_schema(MySQL 實例元數據的所有記憶體數據庫)、mysql(使用者授權表)和通過CREATE DATABASE.

如果您希望 /var/lib/mysql 中的數據庫存在於不同的磁碟上,則必須在作業系統中執行數據庫創建。

假設你執行了 df -h 命令,你給出了這個輸出

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             129G  2.3G  120G   2% /
tmpfs                  12G     0   12G   0% /dev/shm
/dev/sdb1             135G   76G   53G  59% /data
/dev/sdc1             135G  188M  128G   1% /backups

假設您要製作/data(安裝在/dev/sdb1zaver數據庫的位置。而不是這樣做,CREATE DATABASE zaver;你會做以下事情:

chown -R mysql:mysql /data
ln -s /var/lib/mysql/zaver /data 
chown mysql:mysql /var/lib/mysql/zaver

而已。mysqld 程序將自動檢測新數據庫的存在。

警告

請記住,所有租戶數據庫共享三種商品的使用:

  • InnoDB 緩衝池
  • MyISAM 密鑰記憶體
  • 數據庫連接

如果您有一些數據庫會佔用資源(RAM、磁碟 I/O、作業系統等)而影響其他租戶的性能,請考慮設置另一個數據庫伺服器來為有公寓和頂層公寓需求的租戶執行 MySQL伺服器資源。

引用自:https://dba.stackexchange.com/questions/25655