八王之乱的第二阶段是从元康九年(299年)开始到光熙元年(306年)结束。
这个阶段规模比第一阶段更大,参与的宗室王更多,战争更加惨烈。贾南风掌权八年,社会比较平静。但她没有儿子,为了将来能当太后,又开始。当时的太子司马遹乃才人谢玖所生,且与贾南风一向不和。
赵王废太子、除贾南风
元康九年(299年),贾南风欲除太子。她找人用酒把太子灌醉,然后让太子照抄一篇事先写好要晋惠帝退位的文章。太子由于太醉,有一大半未抄完。贾皇后又亲自模拟其笔迹补完,呈送给惠帝。晋惠帝看了太子手书,要处死太子。贾皇后要惠帝马上执行,但因张华劝阻,一直争论到傍晚仍未决定。贾皇后怕拖延下去对自己不利,于是先让晋惠帝下诏废除司马遹的太子地位,囚禁于洛阳郊外金墉城。
赵王司马伦当时是太子太傅,常讨好贾南风,一向为贾南风所信任,掌握了守卫皇宫的禁军。太子被废时司马伦与孙秀等人密谋要推翻贾皇后党羽。但孙秀害怕废太子司马遹聪明过人,若复位,将亲近贤人,孙秀等人必不受重用。孙秀更指出司马伦向来被认为是贾皇后,即使救了太子,太子也不会嘉赏他们,救太子是自取其祸。于是司马伦、孙秀等人决定先等一等,让贾南风先杀了太子再动手为太子报仇。
司马伦、孙秀劝贾南风尽早杀了太子,以断绝大家要复位太子的希望。不久,太子在金墉城被杀。司马伦、孙秀等人伪造晋惠帝的诏书,以杀太子的罪名,发兵收捕贾皇后及其党羽,废贾皇后为庶人,囚禁在建始殿。张华、裴頠等人当时被杀,很多官员都被罢免。贾南风后来被送到金墉城,司马伦又以伪诏书让贾南风喝下金屑酒而死。
齐王执政废赵王
事后司马伦伪造诏书自封相国,孙秀等人都被封大郡,握有兵权。司马伦掌握了朝政大权。永康二年(301年)正月,赵王司马伦废惠帝自立为帝,晋惠帝被软禁于金墉城。
司马伦道德低下,缺乏治国能力,党羽之间勾心斗角,在上并无建树,因此司马伦称帝,人心不稳,随即引发了三王起义。在许昌的齐王司马冏,联合长安的河间王司马颙、邺城的成都王司马颖乘机起兵讨伐司马伦。司马伦与孙秀兴兵反击,战败,死者近10万人。司马伦后来被囚禁于金墉城,也被赐金屑酒而死。至此,司马伦被消灭。
永康二年(301年)四月,司马冏在杀了司马伦后,迎接司马衷复位,改元永宁。司马冏担任大司马一职,主理朝政。司马颙、司马颖二王被封高爵,拥兵自重。但司马冏没有好好利用其兴复皇位之功的大名,独揽政权后不可一世,没有臣下之礼,俨然自己就是个皇帝,而且沉迷女色,政事荒废,结果又给其他有野心争权的藩王有了讨伐的借口。
长沙王讨伐齐王
当时翊军校尉李含携私到长安,矫称受密诏劝河间王司马颙除掉当朝的司马冏。太安元年(302年)底,司马颙经一番利害考量后答应,上表陈述司马冏的罪状,兴兵讨伐首都洛阳,声称当时驻军在洛阳的长沙王司马乂为内应。司马冏得知消息,派遣其将董艾攻袭司马乂。司马乂连同其党羽百多人,乘车奔袭皇宫,以奉天子的名义攻打司马冏。司马冏战败被杀,其子被囚禁于金墉城。于是,司马冏的两千名党与都被夷灭了三族,司马乂独揽大权。
长沙王、河间王、东海王、成都王内乱
司马颙见朝政被司马乂独揽,心怀不满,于是多次派人刺杀司马乂,却都没有成功。太安二年(303年),司马颙令部将张方领兵7万与司马颖20多万大军起兵讨伐洛阳。晋惠帝下诏令司马乂为大都督,兴兵迎击。双方连续作战几个月,司马乂曾攻破司马颙、司马颖军,斩杀数万人。终因战事太久,司马乂军粮食缺乏,但将士们愿意效死,固守洛阳。司马颙的部将张方认为难以取胜,建议要班师回长安。
永兴元年(304年)初,在朝廷内任职司空的东海王司马越乘司马乂军疲惫,勾结一些禁军将领,夜里捕获司马乂,将其交给了河间王司马颙的部将,结果司马乂被火烤而死。
司马颖在朝野向来有威望,而且军事实力强,入洛阳后被增封二十郡,拜丞相。河间王司马颙也官升太宰,东海王司马越为尚书令。司马颙上表认为司马颖应该成为皇位继承人,过后废除皇太子司马覃,以司马颖为皇太弟,丞相位置不变。
东海王司马越对成都王司马颖的非常不满,就云集10多万士兵带着晋惠帝进攻邺城讨伐司马颖。东安王司马繇劝司马颖投降。司马颖不听,派奋武将军石超率5万军队拒战,在荡阴击败司马越,并俘虏了晋惠帝。石超把晋惠帝送到邺城。司马颖改年号为建武,杀死司马繇。
东海王集团败成都王
司马越在兵败时先逃到下邳,当时的徐州都督、东平王司马楙不接纳他,司马越就逃回其封地东海(山东郯城北)。司马颖以同是宗室兄弟的名义,下令宽恕司马越,要招他回朝。司马越不应命。
司马越败后,其亲弟并州刺史东瀛公司马腾及王浚,杀死司马颖所置的幽州刺史和演。于是司马颖出兵讨伐司马腾。司马腾与王浚结合异族乌丸、羯朱等势力共同攻击司马颖。司马颖派遣新选的幽州刺史王斌及石超、李毅等人抵抗司马腾等人,被羯朱打败。
失败的消息传到邺城后,人心惶惶,官僚士兵相续逃跑。司马颖甚是恐慌,与几十个将军连同晋惠帝连夜逃到洛阳。羯朱的军队一路追赶司马颖等人到朝歌,不及而还。
东海王胜河间王
洛阳由司马颙的部将张方控制,张方又挟持晋惠帝。司马颖到长安,司马颙废除司马颖的皇太弟之位,要司马颖离开回封地。司马颙自行选置百官,改秦州为定州。
司马颙又让晋惠帝下诏,要立远在东海的司马越为太傅,要司马越回朝与太宰司马颙共同辅政。但司马越不受。
永兴二年(305年),司马颙挟持晋惠帝,发诏要罢免司马越等人。司马越就打出“张方劫迁车驾,天下怨愤,欲奉迎大驾,还复旧都洛阳”的名义起兵。
司马越又派人游说司马颙,只要司马颙送帝还都,就与司马颙分陕而居。司马颙欲从之,但张方不同意。张方作出建议称其本身还拥有士兵十余万众,可以亲自送晋惠帝回洛阳宫中,以堵司马越之口。然后让司马颖回邺城掌权,司马颙可留守关中,而后张方出兵北伐博陵。
这样一来,局势就比较稳定,天下再也没有帮助司马越者。司马颙不赞同张方的建议,命豫州刺史刘乔为镇东大将军,派遣司马颖率领楼褒、王阐等,据河桥以抗拒司马越。
司马越亲自率领3万士兵,西进到了萧县。刘乔派遣其儿子刘祐抗拒司马越,司马越军战败。这时范阳王司马虓派遣督护田徽以八百骑兵帮助司马越,在谯与刘祐相遇,一战之下,刘祐众溃,司马越进屯阳武。
消息传到长安,司马颙非常恐慌,于是命令张方的亲信将领郅辅夜里暗杀张方,然后派人把张方的头颅送到司马越军中,认为这可以平息祸乱。而后司马颙又后悔,怪罪郅辅杀张方,又杀了郅辅。然后派遣刁默守潼关。张方的死对司马颙更是不利,例如范阳王司马虓从官渡渡河,其司马刘琨把张方头颅给荥阳守将吕朗看,吕朗马上献出城池投降,又击破石超,攻占许昌,在萧县又大败刘乔,刘乔逃奔南阳。
司马越军中的鲜卑将领祁弘等后来攻破潼关进入关中,司马颙大为恐惧。又派遣马瞻、郭传等在霸水抗拒司马越军,马瞻军又战败,司马颙单骑出长安,逃到太白山。司马越军进入长安。鲜卑部队大掠长安,杀2万余人。
而在河桥的司马颖军方面,支持司马越的安北将军王浚派遣督护刘根,率领三百骑兵至河上。王阐出战,被刘根所杀。司马颖要固守,范阳王司马虓就派出鲜卑的骑兵与平昌公司马模等袭河桥,楼褒军西逃,追兵一直追到新安,沿途死亡惨重。
东海王扶晋惠帝
司马越军进入长安后,封梁柳为镇西将军,守关中。光熙元年(306年),司马越率领诸侯及鲜卑将领许扶历、驹次宿等军队护送晋惠帝回到洛阳。晋惠帝下诏升司马越为太傅录尚书,增封下邳、济阳二郡。范阳王司马虓也被封为司空。
晋惠帝又下令镇南将军刘弘、南中郎将刘陶搜捕司马颖。于是司马颖抛弃母亲及妻子,单独与两个儿子庐江王司马普及中都王司马廓逃到朝歌,途中集合了故将及士兵数百人,欲逃到邺城故将公师籓那里。到达顿丘县后,为太守冯嵩所抓获,并送到邺城交范阳王司马虓处置,司马虓只将司马颖父子囚禁,并不忍心将其加害。
八王之乱结束
一个多月后,司空、范阳王司马虓暴毙。司马虓的长史刘舆想到司马颖在邺城素有威望,担忧留司马颖在邺将成为后患,就秘不发丧,且令人装扮台使,矫诏赐死司马颖。司马颖被看守他的人田徽缢死,时年二十八。他的两位儿子也被杀。
光熙元年十一月十八日(307年1月8日),晋惠帝司马衷突然死亡。有人说是被司马越毒死。司马炽继位,是为晋怀帝。晋怀帝刚登基,就下诏书要以司马颙为司徒,让其回朝廷。司马颙不疑有他,就乘车上路。到新安雍谷时,被南阳王司马模所派遣的将领梁臣掐死在车内。他的三个儿子也被杀死。司马颙就此绝后。八王之乱到此终结。