刘焉为汉鲁恭王之后裔,汉章帝元和中,鲁恭王一支徙封竟陵。刘焉年轻时在州郡任职,因为宗室身份而被授予郎中一职,后因师祝恬去世而离职。在阳城山,讲学教授。有被推举为贤良方正,被司徒府征辟。历任雒阳令、冀州刺史、南阳太守、宗正、太常等官。
公元188年(中平五年),刘焉目睹汉灵帝朝纲混乱、王室衰微,故向朝廷建议说:“刺史、太守行贿买官,盘剥百姓,招致众叛亲离。应该挑选那些清廉的朝中要员去担任地方州郡长官,借以镇守安定天下。”他本人自请充任交州牧,意欲借此躲避世乱。
当时益州刺史郤俭在益州大事聚敛,贪婪成风。本来想领交州避祸的刘焉因为听侍中董扶说益州有天子之气,改向朝廷请求为益州牧。于是以刘焉为监军使者、益州牧,被封为阳城侯,命其前往益州逮捕郗俭,整饬吏治。因为道路不通,刘焉暂驻在荆州东界。此时郤俭已被黄巾贼马相等杀死,但是刚称帝的几日的马相又被益州从事贾龙组织军队击败。贾龙于是迎接刘焉入益州,治所定在绵竹。刘焉上任后,任命贾龙为校尉,将他迁到绵竹居住。刘焉安抚收容逃跑反叛的人,极力实行宽容恩惠的政策,但内心别有图谋。
“五斗米道”首领张鲁的母亲长得很漂亮,加上懂得神鬼邪说,和刘焉家有往来,刘焉就任命张鲁为督义司马,与别部司马张修一起前往汉中,攻打汉中太守苏固。张鲁在汉中得势后,却杀死张修,截断交通,斩杀汉使,刘张两家由此结怨。刘焉则以米贼作乱阻隔交通为由,从此中断与中央朝廷的联络。他进一步对内打击地方豪强,巩固自身势力,益州因而处于半独立的状态。天下诸侯讨伐董卓之时,刘焉也拒不出兵,保州自守。犍为太守任岐及之前平乱有功的贾龙在司徒赵谦的游说下起兵反对刘焉,赵谦又奉命率军进益州,但是因贾龙等被刘焉击杀,于是撤军。
中原大乱之下,南阳、三辅一带有数万户流民进入益州,刘焉悉数收编,称为“东州兵”。这支军力虽然引起了不少民患,但是也成为刘璋继任后平定赵韪内乱的决定性力量。
公元191年(初平二年),刘焉更造作乘舆车重千余,欲称帝。荆州牧刘表上言朝廷,称刘焉似乎有子夏在西河说圣人论的迹象。疽发而死,此后,刘焉称病,让朝廷将其子奉车都尉刘璋从京城派到益州,刘焉趁机将其留下。
公元194年(兴平元年),在朝中的长子左中郎将刘范和次子治书御史刘诞与征西将军马腾策划进攻长安,但密谋败露,逃往槐里,马腾兵败,退还凉州。刘范不久被杀,刘诞亦被抓获处死。议郎庞羲送刘焉的孙辈入蜀免受牵连。此时绵竹发生大火,刘焉的城府被焚烧,所造车乘也被烧得一干二净,四周民房亦受其害,刘焉不得已迁州治到成都。因为伤心死去的两个儿子,又担忧灾祸,不久便发背疮而死。