您好,登錄后才能下訂單哦!
這篇文章主要講解了“MySQL磁盤空間不夠怎么辦”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“MySQL磁盤空間不夠怎么辦”吧!
大部分數據庫都有存儲數據文件擴展的功能,ORACLE 可以擴展你的表空間,SQL SERVER 可以多建立幾個 FILEGROUP, PostgreSQL 也可以建立相關類似的擴展。這些都是對付當前存儲空間不足,將數據文件跨物理位置進行存儲。
MYSQL 本身從5.6 就開始支持相關的擴展,但實際上使用的人是少之又少,今天來說說相關擴展的東西,版本基于MYSQL 5.7,mysql 專業的叫法叫做外部表。
首先使用一項技術都是有目地的,使用MYSQL 的外部表主要有以下幾個原因
1 存儲空間不夠,某個大表需要更大的存儲空間
2 存儲介質更新,部分表需要存放到更快的存儲介質中
下面在看看到底怎么做,目前在data 目錄下掛載了mysql 的目錄以及mysql_extend 兩個目錄,目前數據都在mysql目錄下存放,我們需要將employees 庫中的新建立的表都不在mysql 目錄下 employees 存放,都要存放在新的位置/data/mysql_extend/employees 目錄
下面有幾種方法
1,只針對新表的數據,存儲到新的物理位置
CREATE TABLE `d_extend` (
-> `dept_no` char(4) NOT NULL,
-> `dept_name` varchar(40) NOT NULL,
-> PRIMARY KEY (`dept_no`),
-> UNIQUE KEY `dept_name` (`dept_name`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DATA DIRECTORY = '/data/mysql_extend';
我們可以看到物理文件已經到了指定的位置
在原目錄中會產生一個 isl 文件,
isl 文件其實里面僅僅包含了實際ibd文件的存儲位置
在實際中的應用可能會存在這樣一個實際情況,就是我們更換了SSD 磁盤
但怎么將表的物理文件安全的遷移到新的SSD 磁盤上。
我們繼續往下看,舉例我們要將emplyees 表遷移到SSD 磁盤環境,而SSD 的磁盤環境的對應的目錄是 /data/mysql_extend 下
1 我們創建一個表空間,并指定到/data/mysql_extend 下
create tablespace employees add datafile '/data/mysql_extend/employees/employees.ibd' engine = innodb;
2 之間遷移數據到新的表空間
上面兩張圖可以看到ibd 文件已經從原來的目錄遷移到了新的位置,但FRM 文件還是保留在原來的目錄。
另外需要注意的是,如果是MGR ,復制等,要保證其他集群上的目錄都要一樣,在做相關的操作。
另外通過查看表空間我們可以發現兩點問題
select * from INNODB_SYS_TABLESPACES;
新建立的表空間的文件格式是 any row_format 也是any 并且 space_type 是genernal , 說明兩個問題 1 這個表空間并不是 per_table 的,是可以多個表公用的存儲空間,這點和其他數據庫是一致的。
另外根據官方文檔,如果將多個表存儲在一個表空間,相對于一個表一個表空間有以下問題
1 不支持周二說的快速移動表的方式也就是表 discard
2 分區表誤使用這樣的方法
3 官方文檔說明由于多表公用一個表空間,在元數據讀取上會優于單表單文件的方式,但未提供具體的數據以及相關的實驗證明。
感謝各位的閱讀,以上就是“MySQL磁盤空間不夠怎么辦”的內容了,經過本文的學習后,相信大家對MySQL磁盤空間不夠怎么辦這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。