Mysql
如何為單個 MySQL 數據庫設置特定的目錄位置?
是否可以將 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 文件不會給你買任何東西,除了分散的文件。沒有任何性能提升。謝謝亞倫。