时任都督荆州诸军事的新野王司马歆为政严厉苛刻,在他治下的少数民族渐渐对他心生不满,民怨越积越大。
义阳郡(今河南信阳市)的张昌组织了数千人,准备反叛。张昌是汉化的少数民族,年轻时做过县里的小吏,懂得一些政府运作的内幕,他武力过人,会算命,经常宣称自己命中有富贵,平时和伙伴们聊天时喜欢说些打仗方面的谋略攻防。当时荆州政府遵从壬午诏书(正月八日颁布的诏书),征召乡里勇士前往益州讨伐李流等人,号称“壬午兵”。前路遥远,生死未卜,这些壮丁都不想上路,但诏书上要求的时间急迫,惩罚措施相当严厉——壮丁不服从的要被杀头,他们如果在某个地方耽搁五天以上,当地太守要被免职,因此各地太守、县令亲自出马,督促他们尽快出发。
壬午兵一面走一面逃,逃走的人又不敢回家,就聚堆干起了强盗勾当。当时江夏(今湖北云梦县)庄稼大丰收,各地流民到此来求生的有数千人,张昌在此处招兵买马,流民和逃避兵役的人有许多都去投靠了他。张昌给自己改名叫李辰,在安陆县石岩山(今湖北安陆市)集结兵力,这里离江夏郡府只有八十里地,太守弓钦派兵讨伐,屡战屡败。司马歆派骑督靳满征讨张昌,结果靳满失利,张昌占领了江夏郡。
张昌开始编造谣言,叫人四处散播:“现在应该有圣人出现为百姓做主!”他把山都县(今湖北襄阳西北)一个小吏当作圣人,声势浩大地把他迎接过来,给他改名刘尼,假称是汉朝皇室后裔,拥立他为天子,张昌自封为相国,设置百官,伪造凤凰、玉玺等祥瑞,立年号为“神凤”,服装颜色、祭祀等全部跟汉朝的一样。
张昌任命弟弟张味为车骑将军,张放为广武将军。在他管辖之下的人不服从招募的,都要被灭族,百姓们不敢反抗。他又散布谣言:“长江、淮河以南的地区都造反了,官军大批出动,要全部诛杀这些人!”谣言起了作用,一时间人心惶惶,很多人认为等死不如放手一搏,于是长江、沔水地区纷纷起兵响应,张昌一月之间就拉起了三万多人的队伍,他们都头戴红帽,把马尾巴毛粘到下巴上当假胡须。
朝廷又下诏派监军华宏讨伐张昌,结果出师不利,反叫张昌的声势更为浩大。
事态紧急,司马歆上书朝廷请求派兵支援。朝廷命屯骑校尉刘乔任豫州刺史、宁朔将军刘弘任荆州刺史,命河间王司马颙派雍州刺史刘沈带领一万州兵,加上安西将军府的五千人一起,从蓝田关出兵讨伐张昌。司马颙拒不服从调度,刘沈带兵走到蓝田时被司马颙逼停,交出了部队。好在其他几路听从了调遣,刘乔屯兵汝南,刘弘和前将军赵骧、平南将军羊伊屯兵宛地(今河南南阳市)。张昌派他的部将黄林率领两万人进攻豫州,被刘乔击退。
当初,司马歆与齐王司马冏关系比较好,司马冏被杀后,司马歆害怕受到牵连,便主动巴结实力强大的成都王司马颖。张昌叛乱,司马歆上书朝廷请求讨伐,但这时掌权的长沙王司马乂和司马颖的关系微妙,两人面和心不和。司马乂怀疑司马歆与司马颖有什么密谋会对自己不利,因此不准司马歆出兵,张昌这才趁机做大。
从事中郎孙洵对司马歆说:“您是封疆大吏,将在外君命有所不受,出兵的事您可以自主决定。”司马歆决定要亲自率兵前往。亲信王绥劝他道:“张昌等人不过一些宵小之辈,派部将去剿灭他就足够了,您何必要违抗诏命,还亲自上阵冒险?”但司马歆心意已决。
等到张昌进攻樊城,司马歆亲自带兵迎敌,不敌兵败,被张昌杀死——司马歆成了西晋第一个被流民杀死的亲王。
朝廷下令让宁朔将军刘弘接替司马歆为镇南将军、都督荆州诸军事。太安二年(303)六月,刘弘任命南蛮长史陶侃为大都护(大营总指挥),参军蒯恒为义军督护,牙门将皮初为都战帅,守卫襄阳。
张昌出动全部兵士包围宛城,打败赵骧的军队,杀死了羊伊。见此情况,刘弘暂时撤兵回到梁县。