漢朝以來,漢族統治者為了強化對各少數民族的控制,補充內地勞動力和加強軍事實力等,經常招引和強制原居住在西北、東北邊疆的少數民族人居內地。當時內遷的民族主要有匈奴、鮮卑、羯、氐這四個少數民族,人們通常將其稱為“胡人”。至西晉時期,這些胡人已人居關中以及涇水、渭水流域,對晉國首都洛陽形成了包圍之勢。
八王之亂後,西晉王室分裂,國力空虛,民生凋敝,軍力迅速衰退。而就在各地流民不斷起義時,內遷的胡人也趁機起兵反晉,其中尤以匈奴首領劉淵起兵最早。
公元304年,劉淵在匈奴貴族的支援下,於離石(今山西西部)建“漢”,自稱漢王,舉兵反晉。胡、漢各族很多人都願意歸附他,遂劉淵兵力激增,很快就攻佔了太原、平陽等地。
隨著劉淵勢力的擴大,鮮卑酋長陸逐延、氏族酋長單徵以及揭族小帥石勒等人都紛紛歸附劉淵。為了進步提高自己的威望,公元308年,劉淵在蒲子正式稱帝,立長子劉和為太子,任命四子劉聰為車騎大將軍,侄子劉曜為龍驤大將軍。
劉淵稱帝后,加供了對西晉的進攻步伐。公元309年夏天,劉淵派劉聰率軍進攻洛陽。劉聰長驅直入,擊敗了西晉平北將軍曹武率領的大軍,進抵離洛陽只有100裡的弘農郡宜陽城(今屬河南)。獲勝的劉聰有點驕傲輕敵,被弘農太守垣延夜襲得手。匈奴人傷亡慘重,劉聰不得不撤軍回都。同年11月,劉聰再次率領大軍進攻洛陽,又遭到了晉軍的拼死反擊,被迫再次撤退。
公元310年7月,劉淵病死,太子劉和繼承帝位。劉和生性猜忌,繼位沒多久就打算對手握兵權的劉聰等人下手。劉聰自不會坐以待斃,他攜十萬大軍揮師反叛,一舉攻人平陽,殺死了劉和,自立為帝。
當時西晉在位的皇帝是晉懷帝,而真正掌握大權的是司馬越。司馬越不但沒有抓住匈奴內亂的時機整頓軍務,奪取失地,反而帶著洛陽城中僅有的四萬精兵奔逃而出,把晉懷帝丟在了洛陽。劉聰得知司馬越出逃的訊息後,立即派大將石勒千里追擊,徹底消滅了西晉最後的這支武裝力量。
公元311年,劉聰派劉曜率軍向洛陽發起了最後攻擊。當時洛陽城中守軍不過千人,且城中缺糧,百官逃亡者十之八九。劉曜率領的匈奴大軍很快就將其攻陷,晉懷帝被俘。當時的洛陽簡直成了人間地獄,劉曜帶著兇暴的匈奴士兵焚燒宮廟,姦汙嬪妃,大肆屠殺官吏。西晉至此滅亡。
因為這次慘絕人衰的變亂髮生在永嘉年間,所以歷史上將其稱為“永嘉之亂”。