劉焉爲漢魯恭王之後裔,漢章帝元和中,魯恭王一支徙封竟陵。劉焉年輕時在州郡任職,因爲宗室身份而被授予郎中一職,後因師祝恬去世而離職。在陽城山,講學教授。有被推舉爲賢良方正,被司徒府徵辟。歷任雒陽令、冀州刺史、南陽太守、宗正、太常等官。
公元188年(中平五年),劉焉目睹漢靈帝朝綱混亂、王室衰微,故向朝廷建議說:“刺史、太守行賄買官,盤剝百姓,招致衆叛親離。應該挑選那些清廉的朝中要員去擔任地方州郡長官,藉以鎮守安定天下。”他本人自請充任交州牧,意欲藉此躲避世亂。
當時益州刺史郤儉在益州大事聚斂,貪婪成風。本來想領交州避禍的劉焉因爲聽侍中董扶說益州有天子之氣,改向朝廷請求爲益州牧。於是以劉焉爲監軍使者、益州牧,被封爲陽城侯,命其前往益州逮捕郗儉,整飭吏治。因爲道路不通,劉焉暫駐在荊州東界。此時郤儉已被黃巾賊馬相等殺死,但是剛稱帝的幾日的馬相又被益州從事賈龍組織軍隊擊敗。賈龍於是迎接劉焉入益州,治所定在綿竹。劉焉上任後,任命賈龍爲校尉,將他遷到綿竹居住。劉焉安撫收容逃跑反叛的人,極力實行寬容恩惠的政策,但內心別有圖謀。
“五斗米道”首領張魯的母親長得很漂亮,加上懂得神鬼邪說,和劉焉家有往來,劉焉就任命張魯爲督義司馬,與別部司馬張修一起前往漢中,攻打漢中太守蘇固。張魯在漢中得勢後,卻殺死張修,截斷交通,斬殺漢使,劉張兩家由此結怨。劉焉則以米賊作亂阻隔交通爲由,從此中斷與中央朝廷的聯絡。他進一步對內打擊地方豪強,鞏固自身勢力,益州因而處於半獨立的狀態。天下諸侯討伐董卓之時,劉焉也拒不出兵,保州自守。犍爲太守任岐及之前平亂有功的賈龍在司徒趙謙的遊說下起兵反對劉焉,趙謙又奉命率軍進益州,但是因賈龍等被劉焉擊殺,於是撤軍。
中原大亂之下,南陽、三輔一帶有數萬戶流民進入益州,劉焉悉數收編,稱爲“東州兵”。這支軍力雖然引起了不少民患,但是也成爲劉璋繼任後平定趙韙內亂的決定性力量。
公元191年(初平二年),劉焉更造作乘輿車重千餘,欲稱帝。荊州牧劉表上言朝廷,稱劉焉似乎有子夏在西河說聖人論的跡象。疽發而死,此後,劉焉稱病,讓朝廷將其子奉車都尉劉璋從京城派到益州,劉焉趁機將其留下。
公元194年(興平元年),在朝中的長子左中郎將劉範和次子治書御史劉誕與徵西將軍馬騰策劃進攻長安,但密謀敗露,逃往槐裡,馬騰兵敗,退還涼州。劉範不久被殺,劉誕亦被抓獲處死。議郎龐羲送劉焉的孫輩入蜀免受牽連。此時綿竹發生大火,劉焉的城府被焚燒,所造車乘也被燒得一乾二淨,四周民房亦受其害,劉焉不得已遷州治到成都。因爲傷心死去的兩個兒子,又擔憂災禍,不久便發背瘡而死。