南朝宋孝武帝刘骏去世后,他的儿子刘子业继位,刘子业荒淫无道,他的叔叔刘彧发动政变,杀死刘子业,登上帝位。刘彧的这一举动,又引发了刘宋的内斗。
起初不肯效忠刘彧的徐州刺史薛安都和汝南(治所悬瓠,今河南省汝南县)太守常珍奇等人,后来向刘彧投降。北魏天安元年(466)十月,刘彧命大军前去受降。薛安都和常珍奇以为是刘彧不相信他们,要武力收复他们,于是向北魏投降。薛安都为了表示诚意,还把儿子送到北魏做人质,请求派兵救援。北魏为了褒奖薛安都和常珍奇,任命薛安都为都督徐、南兖、北兖、青、冀五州诸军事,封河东公;任命常珍奇为平南将军、豫州刺史,封河内公。
北魏命镇东大将军尉元、镇东将军孔伯恭率领一万名骑兵,东下前去救援彭城,命镇西大将军拓跋石和都督荆、豫、南雍州诸军事张穷奇西下救援悬瓠。
十一月二十九日,尉元率领大军占领了瑕丘(今山东省济宁市兖州区东北五里)后,抵达了秺(dù)县(今山东省成武县西北)。
西河公拓跋石进驻悬瓠。没想到常珍奇并不是真心投降,他想乘夜放火,然后袭击北魏军。但拓跋石早有准备,常珍奇只得作罢。
尉元率军抵达彭城,薛安都出城迎接,为了万无一失,尉元命部将李璨和薛安都入城,控制各个城门,再派镇东将军孔伯恭率精锐武士两千人,在城内巡逻,然后他才进入彭城。
这时,刘宋镇军将军张永、中领军沈攸之也逼近彭城。他们到达下礚后驻扎下来,派羽林监王穆之率领五千名将士屯驻武原(今江苏省邳州市西北),看守辎重。
尉元命李璨和薛安都守卫彭城,他亲自带军切断了刘宋军的粮道,然后挥师攻占武原。王穆之带领残兵败将奔向下礚城,尉元率军追击。
北魏皇兴元年(467)正月,尉元率大军对下礚城发起进攻,张永抵挡不住,在深夜逃出了下礚城。这时天气寒冷,泗水结冰,无法行驶战船,张永命令军队徒步南逃。刘宋军队不断减员,被冻死大半,手足冻烂的十之七八,狼狈不堪。尉元率大军赶到了刘宋军前面进行堵截,薛安都又从后面追杀,刘宋军被杀死一万多人,抛弃的军资器械不可胜数。
张永的脚指头被冻掉了,他和沈攸之等人逃了出来。梁州、南秦州二州刺史垣恭祖被北魏军俘虏。
二月,拓跋石从悬瓠出兵攻打汝阴(今安徽省阜阳市),刘宋汝阴太守张超顽强坚守,拓跋石无法攻克,撤退到了长社(今河南省长葛市)。
北魏派平东将军长孙陵等率军南下攻打青州,征南大将军慕容白曜(前燕太祖慕容皝玄孙)率五万名骑兵作为后援。三月三日凌晨,慕容白曜率大军对无盐(今山东省东平县东)发起凌厉攻击,攻克,擒住了无盐守将、刘宋东平郡太守申纂并斩首。慕容白曜又采用左司马郦范(《水经注》作者郦道元的父亲)之计,接连攻克了肥城(今山东省肥城市)、垣苗(今山东省济南市长清区西南)和糜沟(在今山东省济南市长清区境)三座城池。十日之内,慕容白曜接连攻克了四座城池,声威震动三齐大地。
慕容白曜又率军对升城(今山东省济南市长清区东北)发起攻击,但防守升城的刘宋并州刺史房崇吉顽强抵抗。慕容白曜从二月攻打到四月,终于攻下了该城,房崇高逃走。
八月二十三日,南朝宋明帝刘彧命令驻扎在淮阴的沈攸之率军北上反攻彭城;命行徐州事萧道成率兵一千人驻防淮阴。尉元命孔伯恭率一万大军阻击沈攸之,沈攸之大败,龙骧将军姜彦之战死,沈攸之身受重伤,逃回了淮阴。
刘宋防守下邳的徐州刺史王玄载,被北魏军的声势吓破了胆,弃城而逃。尉元命辛绍先为下邳郡太守,防守下邳。孔伯恭进攻宿豫(今江苏省宿迁市),守将鲁僧遵也弃城而逃。北魏大将孔大恒进攻淮阳(今江苏省淮安市西),守将崔武仲放火烧城后逃走。
慕容白曜驻扎瑕丘,之前逃到盘阳的房崇吉投降。慕容白曜率军进攻历城,刘宋冀州刺史崔道固亲自登上城楼抵抗。
尉元派人招降防守团城(今山东省沂水县)的刘宋东徐州刺史张谠,张谠献城投降。尉元又派人招降了刘宋兖州刺史王整和兰陵郡太守桓忻,二人也都投降。
北魏朝廷擢升尉元开府仪同三司,都督徐、南兖、北兖三州诸军事,徐州刺史,镇守彭城。
皇兴二年(468)二月,慕容白曜进攻历城好几个月,已经跨了年头,终于攻陷了历城的东门外城。崔道固知道历城守不住了,二月二十七日,他出城投降。防守梁邹(今山东省邹平县北)的刘宋兖州刺史刘休宾也献城投降。慕容白曜派人把崔道固和刘休宾送到了北魏首府平城。
前文说过,常珍奇并非真降,他趁拓跋石进攻汝阴的机会,纵火焚烧悬瓠,拓跋石回军攻击常珍奇,常珍奇只身一人逃奔寿阳。
三月,慕容白曜率军包围东阳(今山东省青州市)。刘宋命辅国将军沈文静,率领高密郡、平昌郡、长广郡、东海郡、东莞郡的军队,从水路救援东阳,抵达不其城(今山东省青岛市即墨区)。
十二月,北魏军攻克不其城,杀死了沈文静。北魏军乘势攻入东阳西门外城。防守东阳的南朝宋青州刺史沈文秀异常顽强,他命令将士盔甲不离身,日夜抵抗攻击,不少将士身上都生了虱子。
皇兴三年(469)正月二十四日,北魏军终于攻破东阳城,生擒沈文秀,慕容白曜派人把沈文秀押送到平城。
至此,这场打了两年多的战争总算落下了帷幕,刘宋失去了淮河以北的青州、冀州、徐州和兖州四个州,北魏和南朝宋两国以淮河为界。
北魏朝廷任命征南大将军慕容白曜都督青、齐、东徐三州诸军事,开府仪同三司,青州刺史,封济南王。