配置uuid時為什麼前面要加3
㈠ CentOS掛載詳解
接前文, CentOS下ext4、vfat文件系統創建、修改 ,以及 swap分區管理
在linux中,存儲設備的使用一般分三步,分區,創建文件系統(格式化),掛載。
什麼是掛載?個人理解,Linux通過倒樹形的根文件系統來管理所有的文件,內核只能識別並管理根目錄 / 所在的文件系統及其下的目錄和文件。因此其他文件系統想要使用,都需要為其指定在現存目錄下的訪問入口。
將額外的文件系統,與現存的Linux能夠識別的目錄,建立起映射關系,實現 將現存目錄作為訪問額外文件系統的入口 的功能,這個過程稱為 掛載 ;用於訪問額外文件系統的,現存文件系統中的指定目錄,稱為 掛載點 。
掛載的逆過程,解除額外的文件系統與現存Linux能夠識別的目錄之間的映射關系,稱為 卸載 。
掛載需要兩個參數,掛載的設備或文件系統,掛載點;
1. 掛載點,是現有文件系統下的某個目錄,是由我們自己指定的;
2. 要掛載的設備或文件系統,其信息要如何獲得?
1. 如果要掛載的是磁碟,可以嘗試用 fdisk -l 命令配合 df 和 free 命令
為了更直觀的比較,可以加上grep以過濾顯示結果,例如:
從結果中可以看到,swap分區只有sda3,並且大小和現有swap大小基本一樣,可知swap分區已全部掛載。
已掛載磁碟只有sda1和sda2,sdb1沒有掛載。
2. 使用 blkid -o format 命令
在format的多個值中比較推薦list或full,full模式下會顯示設備名稱、UUID和文件系統的類型
而list模式更便於我們閱讀,此時會顯示設備名稱、文件系統類型、表現名稱、掛載點(會顯示掛載點或未掛載狀態)和UUID。如下圖,根據提示很容易可以看得出 /dev/sdb1 和 /dev/sr0 處於未掛載狀態。
3. 使用 lsblk 命令
例如, lsblk -fmp ,不指定設備則顯示所有塊設備信息,很容易看到sbd1和sr0沒有掛載點,說明他們處於未掛載狀態。
通過上面三種方法,我們可以了解到目前尚未掛載的設備信息,即有哪些設備可以掛載。
1,掛載和卸載命令的參數:
掛載使用 mount 命令,設備、掛載點 兩者都需要指明
卸載使用 umount 命令,設備、掛載點 兩者只需要指明其一
2,一般掛載
命令格式:mount [-nrw] [-t vfstype] [-o options] device dir
device :指明要掛載的設備或文件系統,可以通過以下方式指定
1)設備文件名稱:例如/dev/sda5,默認使用這種方式
2)卷標:-L 'LabelName',例如 -L 'MYDATA'
3)UUID:-U UUID,即使設備名稱或者卷標改了,也不影響識別
4)偽文件系統(暫不介紹):proc,sysfs,devtmpfs,configfs
dir :掛載點
1)事先存在,並建議使用空目錄,
2)如果是長期掛載,盡量不要使用mnt和media目錄
3)處於busy狀態(例如正在被訪問的目錄)的設備無法被卸載
mount命令本身選項 :
-r:readonly,只讀掛載(整個分區只讀);
-w:read and write, 讀寫掛載;
-n:默認情況下,設備掛載或卸載的操作會同步更新至 /etc/mtab 文件中;
-n用於禁止此特性:掛載但不更新 /etc/mtab 文件;
-t vfstype:指明要掛載的設備上的文件系統的類型;多數情況下可省略,此時mount會通過blkid來判斷要掛載的設備的文件系統類型;
-L LABEL:掛載時以卷標的方式指明設備;
mount -L LABEL dir
-U UUID:掛載時以UUID的方式指明設備;
mount -U UUID dir
-o options :掛載選項,多用於定義掛載時文件系統的特性
sync/async:同步/非同步操作;
atime/noatime:文件或目錄在被訪問時是否更新其訪問時間戳;
diratime/nodiratime:目錄在被訪問時是否更新其訪問時間戳;
remount:重新掛載;
acl:支持使用facl功能;
# mount -o acl device dir
# tune2fs -o acl device
# mount -o remount,acl device dir #重新掛載並增加acl特性
ro:只讀,-o ro 等效於 -r
rw:讀寫,-o rw 等效於 -w
dev/nodev:此設備上是否允許創建設備文件;
exec/noexec:是否允許運行此設備上的程序文件;
auto/noauto:是否支持自動掛載,即是否支持 mount -a ,如果是 noauto ,那麼即使在 fstab 中加入記錄,啟動時也不會自動掛載該設備;
user/nouser:是否允許普通用戶掛載此文件系統;
suid/nosuid:是否允許程序文件上的suid和sgid特殊許可權生效;
defaults:使用默認掛載特性: rw, suid, dev, exec, auto, nouser, async, relatime(默認特性和CentOS版本及內核版本有關)
特別的,如果指定的特性與defaults的默認特性沖突,以額外指定的特性為准,例如 mount -o defaults,noauto device dir ,默認特性是 auto ,額外指定 noauto ,device實際表現的掛載特性是 noauto 。
3,掛載可移動設備或回環設備
4,設置開機後自動掛載
修改配置文件 /etc/fstab ,該文件中每一行定義一個要掛載的文件系統及相關屬性,每一行的內容分為6個欄位:
(1) 要掛載的設備,可以是以下內容:
設備文件的名稱,如/dev/sda1
設備的LABEL
設備的UUID,CentOS 7中較多使用此種方式
偽文件系統:如sysfs, proc, tmpfs等
(2) 掛載點路徑
如果是swap類型的設備,掛載點就是 swap ;
(3) 文件系統類型,如ext4,xfs,btrfs,vfat等等;
(4) 掛載選項,也就是 mount -o 命令的那些選項:
defaults:使用默認掛載選項;
如果要同時指明多個掛載選項,彼此間以逗號分隔,如:defaults,acl,noatime,noexec
(5) 轉儲頻率,已經很少使用:
0:從不備份;
1:每天備份;
2:每隔一天備份;
(6) 自檢次序:
0:不自檢;
1:首先自檢,通常只能是根文件系統可用1;
2:次級自檢;
1. 使用 findmnt 命令
findmnt 命令將列出所有已掛載的文件系統或者搜索出某個文件系統,是查看文件系統時很常用的命令之一。findmnt 命令能夠在 /etc/fstab 、 /etc/mtab 或 /proc/self/mountinfo 這幾個文件中進行搜索。
命令常用選項:
-l:表示採用列表形式輸出結果,默認採用樹形輸出結果
--df 或 -D:以df類型輸出結果,顯示文件系統及設備空間使用情況
-t TYPE:只輸出文件類型為TYPE的結果
參數:
findmnt可以指定設備或掛載點,輸出相關結果,不帶任何參數則輸出所有結果,例如:
findmnt /dev/sda1
findmnt /
2. 使用 blkid 命令
blkid -o list ,在第一部分已經簡單介紹過該命令的用法,這里不再重復。
3. 使用 lsblk 命令
lsblk -fp [device] ,第一部分也已經介紹過,這里不再重復。
4. 使用 df 命令
常用 df -hT 來查看 已掛載 設備的文件系統及其空間使用情況, -T 表示查看文件類型, -h 表示以方便識別的方式輸出空間情況。
更多用法請看man手冊。
5. 使用 mount 命令
直接使用 mount 命令,不帶選項和參數,會輸出所有已掛載的系統信息,裡面可能有很多我們不需要的信息,常和grep一起使用以查看我們關注的內容。
如: mount | grep -E "(sd)|(sr)"
6. 使用 fdisk -l 命令
該命令是分區命令,因此只能看到能夠進行分區操作的設備信息(比如光碟就不會顯示),同時無論分區有沒有掛載都會顯示。
上面的命令可以簡單分為
可以查看 設備信息: blkid , lsblk , fdisk
只能查看 設備信息: findmnt , df , mount
卸載使用命令 umount ,設備或掛載點任意指定其中之一即可: umount device|dir
卸載時有可能會遇到掛載點正在被其他進程訪問,無法卸載的情況:
解決辦法有2個:
1. 終止所有正在訪問某掛載點的進程,比如使用命令 fuser -km /test (這個命令有可能導致其他進程出問題,生產環境慎用),或者kill掉訪問掛載點的進程,然後再卸載。
2. 強制卸載: umount -l /test , umount -l 會等到掛載點空閑後再卸載,相對讓人放心一些。
㈡ 虛擬機中的uuid該填什麼,我想知道的不是該怎麼修改,而是想要知道該填什麼,有什麼用呢
每個虛擬機都有一個通用唯一標識符 (UUID)。該 UUID 在您最初開啟虛擬機時生成。
您可以使用虛擬機的 UUID 進行系統管理,方式與使用物理機的 UUID 相同。UUID 存儲在 SMBIOS 系統信息描述符中,您可以使用標准 SMBIOS 掃描軟體(包括 SiSoftware Sandra 或 IBM smbios2)進行訪問。
如果不將虛擬機移動或復制到其他位置,UUID 將保持不變。當您開啟移動或復制到新位置的虛擬機時,系統會提示您指定是移動還是復制了虛擬機。如果您指出復制了虛擬機,虛擬機將收到新的 UUID。
掛起和恢復虛擬機不會觸發生成 UUID 的過程。即便經過了復制或移動,虛擬機從掛機狀態繼續運行時還會使用掛起時使用的 UUID。在下次重新引導虛擬機後,系統才不會提示您指定是移動還是復制了虛擬機。
將虛擬機配置為保留相同 UUID
您可以將虛擬機配置為始終保留同一個 UUID,即便虛擬機發生移動或被復制。將虛擬機設置為始終保留同一個 UUID 後,在移動或復制該虛擬機時將不會收到提示。
㈢ mysql創建資料庫時怎麼將主鍵設置為UUID,建表語句怎麼寫
mysql設置UUID為主鍵需要先將數據類型設置為VARCHAR(36),然後插入數據的時候用UUID函數插入UUID。下面我用win10系統下的CMD命令行具體演示一下:
1、打開CMD,輸入mysql -uroot -p命令連接mysql,如下圖所示
㈣ Mysql 用UUID做主鍵可行么
在mysql中可以把UUID作為邏輯主鍵,物理主鍵依然使用自增ID
1、UUID定義
UUID含義是通用唯一識別碼 (Universally Unique Identifier),這 是一個軟體建構的標准,也是被開源軟體基金會 (Open Software Foundation, OSF) 的組織應用在分布式計算環境 (Distributed Computing Environment, DCE) 領域的一部分。UUID是指在一台機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的。
2、UUID優點
1) 能夠保證獨立性,程序可以在不同的資料庫間遷移,效果不受影響。
2) 保證生成的ID不僅是表獨立的,而且是庫獨立的,這點在你想切分資料庫的時候尤為重要。
3) 在oracle做數據遷移的時候不會因為表的sequence不連續而出現問題
3、UUID缺點
1) 比較佔地方,和INT類型相比,存儲一個UUID要花費更多的空間。
2) 使用UUID後,URL顯得冗長,不夠友好。
㈤ uuid是什麼意思
UUID 是 通用唯一識別碼(Universally Unique Identifier)的縮寫,是一種軟體建構的標准,亦為開放軟體基金會組織在分布式計算環境領域的一部分。其目的,是讓分布式系統中的所有元素,都能有唯一的辨識信息,而不需要通過中央控制端來做辨識信息的指定。
如此一來,每個人都可以創建不與其它人沖突的UUID。在這樣的情況下,就不需考慮資料庫創建時的名稱重復問題。最廣泛應用的UUID,是微軟公司的全局唯一標識符(GUID),而其他重要的應用,則有Linux ext2/ext3文件系統、LUKS加密分區、GNOME、KDE、Mac OS X等等。
UUID由以下幾部分的組合:
(1)UUID的第一個部分與時間有關,如果你在生成一個UUID之後,過幾秒又生成一個UUID,則第一個部分不同,其餘相同。
(2)時鍾序列。
(3)全局唯一的IEEE機器識別號,如果有網卡,從網卡MAC地址獲得,沒有網卡以其他方式獲得。
㈥ linux下的UUID是個什麼東西
UUID
簡介
UUID含義是通用唯一識別碼 (Universally Unique Identifier),這 是一個軟體建構的標准,也是被開源軟體基金會 (Open Software Foundation, OSF) 的組織應用在分布式計算環境 (Distributed Computing Environment, DCE) 領域的一部分。
2作用
UUID 的目的,是讓分布式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定。如此一來,每個人都可以建立不與其它人沖突的 UUID。在這樣的情況下,就不需考慮資料庫建立時的名稱重復問題。目前最廣泛應用的 UUID,即是微軟的 Microsoft's Globally Unique Identifiers (GUIDs),而其他重要的應用,則有 Linux ext2/ext3 檔案系統、LUKS 加密分割區、GNOME、KDE、Mac OS X 等等。
3組成
UUID是指在一台機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的。通常平台會提供生成的API。按照開放軟體基金會(OSF)制定的標准計算,用到了乙太網卡地址、納秒級時間、晶元ID碼和許多可能的數字
UUID由以下幾部分的組合:
(1)當前日期和時間,UUID的第一個部分與時間有關,如果你在生成一個UUID之後,過幾秒又生成一個UUID,則第一個部分不同,其餘相同。
(2)時鍾序列。
(3)全局唯一的IEEE機器識別號,如果有網卡,從網卡MAC地址獲得,沒有網卡以其他方式獲得。
UUID的唯一缺陷在於生成的結果串會比較長。關於UUID這個標准使用最普遍的是微軟的GUID(Globals Unique Identifiers)。在ColdFusion中可以用CreateUUID()函數很簡單地生成UUID,其格式為:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每個 x 是 0-9 或 a-f 范圍內的一個十六進制的數字。而標準的UUID格式為:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx (8-4-4-4-12),可以從cflib 下載CreateGUID() UDF進行轉換。
4應用
使用UUID的好處在分布式的軟體系統中(比如:DCE/RPC, COM+,CORBA)就能體現出來,它能保證每個節點所生成的標識都不會重復,並且隨著WEB服務等整合技術的發展,UUID的優勢將更加明顯。根據使用的特定機制,UUID不僅需要保證是彼此不相同的,或者最少也是與公元3400年之前其他任何生成的通用唯一標識符有非常大的區別。
通用唯一標識符還可以用來指向大多數的可能的物體。微軟和其他一些軟體公司都傾向使用全球唯一標識符(GUID),這也是通用唯一標識符的一種類型,可用來指向組建對象模塊對象和其他的軟體組件。第一個通用唯一標識符是在網路計算機系統(NCS)中創建,並且隨後成為開放軟體基金會(OSF)的分布式計算環境(DCE)的組件。
㈦ mysql表分區使用及詳細介紹
一、分區概念
分區是將一個表分成多個區塊進行操作和保存,從而降低每次操作的數據,提高性能。而對於應用來說則是透明的,從邏輯上看只有一張表,但在物理上這個表可能是由多個物理分區組成的,每個分區都是獨立的對象,可以進行獨立處理。
二、分區作用
1.可以邏輯數據分割,分割數據能夠有多個不同的物理文件路徑。
2.可以存儲更多的數據,突破系統單個文件最大限制。
3.提升性能,提高每個分區的讀寫速度,提高分區范圍查詢的速度。
4.可以通過刪除相關分區來快速刪除數據
5.通過跨多個磁碟來分散數據查詢,從而提高磁碟I/O的性能。
6.涉及到例如SUM()、COUNT()這樣聚合函數的查詢,可以很容易的進行並行處理。
7.可以備份和恢復獨立的分區,這對大數據量很有好處。
三、分區能支持的引擎
MySQL支持大部分引擎創建分區,入MyISAM、InnoDB等;不支持MERGE和CSV等來創建分區。同一個分區表中的所有分區必須是同一個存儲引擎。值得注意的是,在MySQL8版本中,MyISAM表引擎不支持分區。
四、確認MySQL支持分區
從MySQL5.1開始引入分區功能,可以如下方式查看是否支持:
老版本用:SHOW VARIABLES LIKE '%partition%'
新版本用:show plugins;
五、分區類型
1. RANGE分區:基於屬於一個給定連續區間的列值,把多行分配給分區。
例如,可以將一個表通過年份劃分成兩個分區,2001 -2010年、2011-2020。
2. LIST分區:類似於RANGE分區,LIST是列值匹配一個離散值集合中的某個值來進行選擇。
比如 根據欄位 把值為1、3、5的放到一起,2、4、6的另外放到一起 等等...
3. HASH分區:基於用戶定義的表達式的返回值來進行選擇分區,該表達式使用將要插入到表中的這些行的列值來進行計算,這個函數必須產生非負整數值。
通過HASH運算來進行分區,分布的比較均勻
4. KEY分區:類似於按HASH分區,由MySQL伺服器提供其自身的哈希函數。
按照KEY進行分區類似於按照HASH分區
六、分區創建注意事項
1. 如果表中存在primary key 或者 unique key 時,分區的列必須是paimary key或者unique key的一個組成部分,也就是說,分區函數的列只能從pk或者uk這些key中取子集
2. 如果表中不存在任何的paimary key或者unique key,則可以指定任何一個列作為分區列
3. 5.5版本前的RANGE、LIST、HASH分區要求分區鍵必須是int;MySQL5.5及以上,支持非整形的RANGE和LIST分區,即:range columns 和 list columns (可以用字元串來進行分區)。
七、分區命名
1. 分區的名字基本上遵循其他MySQL 標識符應當遵循的原則,例如用於表和資料庫名字的標識符。應當注意的是, 分區的名字是不區分大小寫的 。
2. 無論使用何種類型的分區,分區總是在創建時就自動的順序編號,且從0開始記錄。
八、 創建分區
1. RANGE分區:
CREATE TABLE `test01` (
`dayid` int(11) DEFAULT NULL,
`mac` varchar(32) NOT NULL DEFAULT '',
`dtype` varchar(50) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50100 PARTITION BY LIST (dayid)
(PARTITION p20171205 VALUES IN (20171205) ENGINE = InnoDB,
PARTITION p20171204 VALUES IN (20171204) ENGINE = InnoDB,
PARTITION p20171206 VALUES IN (20171206) ENGINE = InnoDB,
PARTITION p20171207 VALUES IN (20171207) ENGINE = InnoDB) */
解讀:以上為 uuid小於5時放到p0分區下,uuid大於5且小於10放到p1分區下,uuid大於10且小於15放到p2分區下,uuid大於15 一直到最大值的存在p3分區下
2. LIST分區:
CREATE TABLE tbl_test (
uuid INT NOT NULL,
title VARCHAR(20)
)
)
PARTITION BY List (uuid) (
PARTITION p0 VALUES in (1,2,3,5),
PARTITION p1 VALUES in (7,9,10),
PARTITION p2 VALUES in (11,15)
)
);
解讀:以上為uuid 等於1/2/3/5時放到p0分區,7/9/10放到p1分區,11/15放到p2分區。當時用insert into時 如果uuid的值不存在p0/p1/p2分區時,則會插入失敗而報錯。
3. HASH分區:
HASH分區主要用來確保數據在預先確定數目的分區中平均分布。在RANGE分區和LIST分區中必須明確指定一個指定的列值或列值集合以指定應該保存在哪個分區中。而在HASH分區中,MySQL會自動完成這些工作,要做的只是基於將要被哈希的列值指定一個表達式,以及指定被分區的表將要被分割成的分區數量,如:
CREATE TABLE tbl_test (
uuid INT NOT NULL,
title VARCHAR(20)
))
PARTITION BY HASH (uuid) (
PARTITIONS 3
));
解讀:MySQL自動創建3個分區,在執行insert into時,根據插入的uuid通過演算法來自動分配區間。
注意:
(1) 由於每次插入、更新、刪除一行,這個表達式都要計算一次,這意味著非常復雜的表達式可能會引起性能問題,尤其是在執行同時影響大量行的運算(例如批量插入)的時候。
(2) 最有效率的哈希函數是只對單個表列進行計算,並且它的值隨列值進行一致的增大或減小,因為這考慮了在分區范圍上的「修剪」。也就是說,表達式值和它所基於的列的值變化越接近,就越能有效地使用該表達式來進行HASH分區。
3.1:線性HASH分區
線性HASH分區在「PARTITION BY」子句中添加「LINEAR」關鍵字。
線性HASH分區的有點在於增加、刪除、合並和拆分分區將變得更加快捷,有利於處理含有及其大量數據的表。它的缺點在於各個分區間數據的分布不大可能均衡。
4. KEY分區
類似於HASH分區,HASH分區允許用戶自定義的表達式,而KEY分區則不允許使用用戶自定義的表達式;HASH分區只支持整數分區,KEY分區支持除了blob和text類型之外的其他數據類型分區。
與HASH分區不同,創建KEY分區表的時候,可以不指定分區鍵,默認會選擇使用主鍵或唯一鍵作為分區鍵,沒有主鍵或唯一鍵,就必須指定分區鍵。
CREATE TABLE tbl_test (
uuid INT NOT NULL,
title VARCHAR(20)
))
PARTITION BY LINEAR Key (uuid)
PARTITIONS 3;
解讀:根據分區鍵來進行分區
5. 子分區
子分區是分區表中,每個分區的再次分割,適合保存非常大量的數據。
CREATE TABLE tbl_test (
registerTime Date
))
PARTITION BY GANGE(YEAR(registerTime))
SUBPARTITION BY HASH (TO_DAYS(registerTime))
SUBPARTITIONS 2
(
PARTITION p0 VALUES LESS THAN (2017),
PARTITION p1 VALUES LESS THAN (2020),
PARTITION p2 VALUES LESS THAN MAXVALUE
);
解讀:主分區使用RANGE按照年來進行分區,有3個RANGE分區。這3個分區中又被進一步分成了2個子分區,實際上,整個表被分成了3 * 2 = 6個分區。每個子分區按照天進行HASH分區。小於2017的放在一起,2017-2020的放在一起,大於2020的放在一起。
注意:
(1) 在MySQL5.1中,對於已經通過RANGE或LIST分區了的表在進行子分區是可能的。子分區既可以使用HASH分區,也可以使用KEY分區。這也被稱為復合分區。
(2) 每個分區必須有相同數量的子分區。
(3) 如果在一個分區表上的任何分區上使用SUBPARTITION來明確定義任何子分區,那麼就必須定義所有的子分區。
(4) 每個SUBPARTITION子句必須包含(至少)子分區的一個名字。
(5) 在每個子分區內,子分區的名字必須是惟一的,目前在整個表中,也要保持唯一。例如:
PARTITION BY RANGE(YEAR(registerTime))
SUBPARTITION BY HASH(TO_DAYS(registerTime))
(
PARTITION p0 VALUES LESS THAN (2017) (
SUBPARTITION s0,
SUBPARTITION s1
),
PARTITION p1 VALUES LESS THAN (2020) (
SUBPARTITION s2,
SUBPARTITION s3
),
PARTITION p2 VALUES LESS THAN MAXVALUE (
SUBPARTITION s4,
SUBPARTITION s5
)
)
子分區可以用於特別大的表,可以在多個磁碟間分配數據和索引。例如:
SUBPARTITION s0
DATA DIRECTORY = '/disk0/data'
INDEX DIRECTORY = '/disk0/idx'
,
,
SUBPARTITION s1
DATA DIRECTORY = '/disk1/data'
INDEX DIRECTORY = '/disk1/idx'
九、MySQL分區處理NULL值的方式
MySQL中的分區禁止空值NULL上沒有進行處理,無論它是一個列值還是一個用戶定義表達式的值,一般而言,在這種情況下MySQL把NULL視為0。如果你希望迴避這種做法,你應該在設計表時聲明列「NOT NULL」。
十、分區管理概述
可以對分區進行添加、刪除、重新定義、合並或拆分等管理操作。
① RANGE和LIST分區的管理
1. 刪除分區語句如:alter table tbl_test drop partition p0;
注意:
(1) 當刪除了一個分區,也同時刪除了該分區中所有的數據。
(2) 可以通過show create table tbl_test;來查看新的創建表的語句。
(3) 如果是LIST分區的話,刪除的數據不能新增進來,因為這些行的列值包含在已經刪除了的分區的值列表中。
2. 添加分區語句如:alter table tbl_test add partition(partition p3 values less than(50));
注意:
(1) 對於RANGE分區的表,只可以添加新的分區到分區列表的最高端。
(2) 對於LIST分區的表,不能添加已經包含在現有分區值列表中的任意值。
3. 如果希望能不丟失數據的條件下重新定義分區,可以使用如下語句:
ALTER TABLE tbl_name REORGANIZE PARTITION partition_list INTO(partition_definitions)
(1) 拆分分區如:
ALTER TABLE tbl_name REORGANIZE PARTITION partition_list INTO(partition s0 values less than(5),partition s1 values less than(10));
或者如:
ALTER TABLE tbl_name REORGANIZE PARTITION p0 INTO(partition s0 values in(1,2,3), partition s1 values in(4,5));
(2) 合並分區如:ALTER TABLE tbl_name REORGANIZE PARTITION s0,s1 INTO(partition p0 values in(1,2,3,4,5));
4. 刪除所有分區,但保留數據,形式:ALTER TABLE tbl_name remove partitioning;
② HASH和KEY分區的管理
1. 減少分區數量語句如:ALTER TABLE tbl_name COALESCE PARTITION 2;
2. 添加分區數量語句如:ALTER TABLE tbl_name add PARTITION partitions 2;
③ 其他分區管理語句
1. 重建分區 :類似於先刪除保存在分區中的所有記錄,然後重新插入它們,可用於整理分區碎片。如:ALTER table tbl_name REBUILD PARTITION p2,p3;
2. 優化分區 :如果從分區中刪除了大量的行,或者對一個帶有可變長度的行(也就是說,有VARCHAR,BLOB或TEXT類型的列)做了許多修改,可以使用 ALTER TABLE tbl_name OPTIMIZE PARTITION來收回沒有使用的空間,並整理分區數據文件的碎片。如:ALTER TABLE tbl_name OPTIMIZE PARTITION p2,p3;
3. 分析分區 :讀取並保存分區的鍵分布,如:ALTER TABLE tbl_name ANALYZE PARTITION p2,p3;
4. 檢查分區 :檢查分區中的數據或索引是否已經被破壞,如:ALTER TABLE tbl_name CHECK PARTITION p2,p3;
5. 修補分區 :修補被破壞的分區,如:ALTER TABLE tbl_name REPAIR PARTITION p2,p3;
十、查看分區信息
1. 查看分區信息:select * from information_schema.partitions where table_schema='arch1' and table_name = 'tbl_test' G;
2. 查看分區上的數據:select * from tbl_test partition(p0);
3. 查看MySQL會操作的分區:explain partitions select * from tbl_test where uuid = 2;
十一、 局限性
1. 最大分區數目不能超過1024,一般建議對單表的分區數不要超過50個。
2. 如果含有唯一索引或者主鍵,則分區列必須包含在所有的唯一索引或者主鍵在內。
3. 不支持外鍵。
4. 不支持全文索引,對分區表的分區鍵創建索引,那麼這個索引也將被分區。
5. 按日期進行分區很合適,因為很多日期函數可以用。但是對字元串來說合適的分區函數不太多。
6. 只有RANGE和LIST分區能進行子分區,HASH和KEY分區不能進行子分區。
7. 臨時表不能被分區。
8. 分區表對於單條記錄的查詢沒有優勢。
9. 要注意選擇分區的成本,沒插入一行數據都需要按照表達式篩選插入的分區。
10. 分區欄位盡量不要可以為null
㈧ 弱弱的問一句:在資料庫中把主鍵設為自動遞增,不是已經能確保唯一性了嗎為何有時要用uuid
是啊!!uuid是確保主鍵的id是唯一的,這樣增加了資料庫的安全性!!UUID 的目的,是讓分布式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定。如此一來,每個人都可以建立不與其它人沖突的 UUID。在這樣的情況下,就不需考慮資料庫建立時的名稱重復問題。目前最廣泛應用的 UUID,即是微軟的 Microsoft's Globally Unique Identifiers (GUIDs),而其他重要的應用,則有 Linux ext2/ext3 檔案系統、LUKS 加密分割區、GNOME、KDE、Mac OS X 等等
㈨ hibernate 中oracle配置uuid
你要明白一個問題,generator class中填寫的是類的全限定名,只要一個類實現了IdentifierGenerator這個介面,都可以配置在generator的class屬性中,而不只是你在文檔上面看到的什麼native,uuid,identity,sequence等幾個,所以別人的建議是對的。