西汉于今县城东南30千米关王庙村置骐县,属河东郡;东汉废。
北魏延兴四年(474)置昌宁县(治今县城西南20千米西村),于县置中阳郡,县属之;又于今县境别置洛陵县,属中阳郡,北齐废。
隋开皇初年废中阳郡,县属耿州,后又次第属汾州、文城郡、慈州。
五代唐改乡宁县。据嘉庆《一统志》,后唐避李国昌讳改昌宁为乡宁。又据《郡县释名》:“乡宁县,盖合吕乡、昌宁之名为名也。”
宋皇佑三年(1051)徙治今县城。
熙宁五年(1072)废,元佑元年(1086)复置,仍属慈州。金属吉州。
清乾隆三十七年(1772)属平阳府。
民国初年属河东道,道废后直属省。
1949年属临汾专区。
1954年属晋南专区。
1967年属晋南地区。
1970年属临汾地区。2000年属临汾市。