Mysql

如何為單個 MySQL 數據庫設置特定的目錄位置?

  • May 30, 2017

是否可以將 MySQL 中的每個數據庫設置為使用單獨的 datadir?

我正在執行一個 userdir 開發(沙盒)伺服器,並希望將該使用者的數據庫的 MySQL 數據文件放在他們的/home/<user>/mysql目錄中。

  • Linux Ubuntu 伺服器 10.4
  • MySQL 伺服器版本:5.1.41
  • 儲存引擎類型:InnoDB

你會怎麼做?

您將使用符號連結玩遊戲。

警告:以下僅適用於啟用 innodb_file_per_table

例如,假設您的數據目錄是 /opt/mysql/data。每個數據庫都將駐留在該文件夾下。如果您有三個數據庫(db1、db2、db3),則文件夾為:

  • /opt/mysql/data/db1
  • /opt/mysql/data/db2
  • /opt/mysql/data/db3

在做任何事情之前執行這個查詢:

mysql> select table_schema,table_name from information_schema.tables
where table_schema in ('db1','db2','db3');

讓我們從創建臨時數據庫開始

mysql> create database tmpdb1;
mysql> create database tmpdb2;
mysql> create database tmpdb3;

接下來,讓我們將您擁有的每個表 db1 移動到 tmpdb1,將 db2 移動到 tmpdb2,將 db3 移動到 tmpdb3

mysql -uroot -AN -e"SELECT CONCAT('ALTER TABLE ',db,'.',tb,' RENAME tmp',db,'.',tb,';') FROM information_schema.tables WHERE table_schema in ('db1','db2','db3')" > /root/MoveTables1.sql
mysql -uroot < /root/MoveTables1.sql

好的,我們將每個 .ibd 文件橫向移動到 tmp 數據庫

進入 mysql 並確保所有表都已移動。數據庫 db1-db3 應該為空

mysql> use db1
mysql> show tables;
mysql> use db2
mysql> show tables;
mysql> use db3
mysql> show tables;
mysql> use tmpdb1
mysql> show tables;
mysql> use tmpdb2
mysql> show tables;
mysql> use tmpdb3
mysql> show tables;

接下來,刪除原始數據庫

mysql> drop database db1;
mysql> drop database db2;
mysql> drop database db3;

進入作業系統並創建符號連結

ln -s /home/user2/mysql /opt/mysql/data/db1
ln -s /home/user2/mysql /opt/mysql/data/db2
ln -s /home/user3/mysql /opt/mysql/data/db3
chown -R mysql:mysql /opt/mysql/data/db1
chown -R mysql:mysql /opt/mysql/data/db2
chown -R mysql:mysql /opt/mysql/data/db3

進入mysql並確保數據庫可見

mysql> show databases;

接下來,將表移動到符號連結數據庫中

mysql -uroot -AN -e"SELECT CONCAT('ALTER TABLE ',db,'.',tb,' RENAME ',SUBSTR(db,4),'.',tb,';') FROM information_schema.tables WHERE table_schema in ('tmpdb1','tmpdb2','tmpdb3')" > /root/MoveTables2.sql
mysql -uroot < /root/MoveTables2.sql

最後,執行您開始使用的第一個查詢

mysql> select table_schema,table_name from information_schema.tables
where table_schema in ('db1','db2','db3');

如果出現相同的顯示,您就成功了。

更新

@AaronBrown好心地提醒我,傳播 .ibd 文件不會給你買任何東西,除了分散的文件。沒有任何性能提升。謝謝亞倫。

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