MySQL的UUID

ywxj_001發表於2019-08-14

MySQL在初始化的時候會產生一個UUID:

[root@mha03 opt]# mysql/bin/mysqld --initialize --user=mysql --basedir=/opt/mysql/ --datadir=/opt/mysql/data/

2019-08-14T03:42:26.588685Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

2019-08-14T03:42:26.899821Z 0 [Warning] InnoDB: New log files created, LSN=45790

2019-08-14T03:42:26.944820Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.

2019-08-14T03:42:27.023508Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 88e4e8ea-be45-11e9-b3d0-000c29c8d0f8.

2019-08-14T03:42:27.024729Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.

2019-08-14T03:42:27.026127Z 1 [Note] A temporary password is generated for root@localhost: &didSDjQn2dk


UUID 是 通用唯一識別碼(Universally Unique Identifier)的縮寫,是一種軟體建構的標準,亦為 組織在 環境領域的一部分。其目的,是讓分散式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定。如此一來,每個人都可以建立不與其它人衝突的UUID。在這樣的情況下,就不需考慮資料庫建立時的名稱重複問題。目前最廣泛應用的UUID,是 ),而其他重要的應用,則有Linux ext2/ext3檔案系統、LUKS加密分割槽、GNOME、KDE、Mac OS X等等。另外我們也可以在e2fsprogs包中的UUID庫找到實現。


定義

UUID是由一組32位數的16進位制數字所構成,所以UUID理論上的總數為16^32=2^128,約等於3.4 x 10^38。也就是說若每納秒產生1兆個UUID,要花100億年才會將所有UUID用完。
UUID的標準型式包含32個 數字,以連字號分為五段,形式為8-4-4-4-12的32個字元。示例:
550e8400-e29b-41d4-a716-446655440000
UUID亦可刻意重複以表示同類。例如說 的 中,所有元件皆必須實現出 介面,方法是產生一個代表IUnknown的UUID。無論是程式試圖訪問元件中的IUnknown介面,或是實現IUnknown介面的元件,只要IUnknown一被使用,皆會被參考至同一個ID:00000000-0000-0000-C000-000000000046。  [1]

組成

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-xxxxxxxxxxxx (8-4-4-4-12),可以從cflib 下載CreateGUID() UDF進行轉換。  [2]
(4)在 hibernate(Java orm框架)中, 採用 IP-JVM啟動時間-當前時間右移32位-當前時間-內部計數(8-8-4-8-4)來組成UUID



UUID作用:

UUID 的目的是讓 中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定。如此一來,每個人都可以建立不與其它人衝突的 UUID。在這樣的情況下,就不需考慮資料庫建立時的名稱重複問題。目前最廣泛應用的 UUID,即是微軟的 Microsoft's Globally Unique Identifiers (GUIDs),而其他重要的應用,則有 Linux ext2/ext3 檔案系統、LUKS 加密分割區、GNOME、KDE、Mac OS X 等等。


UUID應用:

使用UUID的好處在分散式的軟體系統中(比如:DCE/RPC, COM+,CORBA)就能體現出來,它能保證每個節點所生成的標識都不會重複,並且隨著WEB服務等整合技術的發展,UUID的優勢將更加明顯。根據使用的特定機制,UUID不僅需要保證是彼此不相同的,或者最少也是與公元3400年之前其他任何生成的通用唯一 有非常大的區別。UUID最少在3000+年內不會重複。
通用唯一識別符號還可以用來指向大多數的可能的物體。微軟和其他一些軟體公司都傾向使用全球唯一識別符號(GUID),這也是通用唯一識別符號的一種型別,可用來指向組建物件模組物件和其他的 。第一個通用唯一識別符號是在網路計算機系統(NCS)中建立,並且隨後成為 (OSF)的 (DCE)的元件。


以上摘自 htm

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22996654/viewspace-2653644/,如需轉載,請註明出處,否則將追究法律責任。

相關文章