公元1240年(宋理宗嘉熙四年),四川制置副使彭大雅为了抗击蒙古军,派甘闰于合州(今重庆合川)东十里钓鱼山上筑寨。
当时的蒙古国在欧亚大陆从未遇到过对手,1258年,蒙古大汗蒙哥命忽必烈进攻鄂州、察塔儿进攻两淮及兀良哈台进攻云南,自己则领兵往四川。1259年2月,蒙哥大汗亲自率领四万军队到钓鱼城下。
钓鱼城坐落在今重庆市合川区城东5公里的钓鱼山顶,其山突兀耸立,相对高度约300米。处嘉陵江、渠江、涪江汇合处,南、北、西三面环水,壁垒悬江,城周十二三里,均筑高数丈的石墙,南北各建一条延至江中的一字城墙;城内有大小池塘13个,井92眼,可谓兵精粮足,水源充足;江边筑设水师码头,布有战船,上可控三江,下可屏蔽重庆(今重庆市),是支撑四川战局的防御要塞,地势十分险要。
蒙哥并没有把钓鱼城放在眼里,因为当时成都及川西北府州都是蒙古国的天下了。他命降臣晋国宝入城劝降,被王坚杀了。蒙哥得知后,愤怒至极,命令元帅纽璘占领长江一带,在涪州的蔺市造起浮桥,隔断长江下游的援兵。又在重庆下游铜锣峡夹江建造要塞,威胁和牵制重庆的宋军,派南宋叛将杨大渊进攻合州,掳走一万余人(一说八万余人)。
1259年(开庆元年)二月,蒙哥进驻石子山,亲自督阵攻城。先后猛攻一字城和镇西﹑东新﹑奇胜﹑护国等城门以及外城,均被击退。
宋四川制置副使兼知重庆府吕文德率战舰千艘往援,为史天泽击败,退回重庆。
加上蒙军长久驻扎,又值酷暑季节,蒙古人本来畏暑恶湿,加以水土不服,导致军中暑热、疟疠、霍乱等疾病流行,情况相当严重。
不久,四川制置副使吕文德率宋朝战船万艘,溯江而上,冲破蒙古军的封锁进入重庆。后又率舰千余艘沿嘉陵江北上,救援合州,不过,当他们至三槽山西,遇蒙古军阻截。经略使史天泽分军为两翼,跨江侧射,亲率舟师顺流纵击,夺宋战船百余艘,击退南宋的支援部队,乘势追至重庆而返。
时天气大热,瘟病流行,蒙古军战斗力大减。王坚乘机多次夜袭蒙古军营地,使其人人惊恐,夜不得安。初五日晨,蒙古军前锋元帅汪德臣率军乘夜突破外城马军寨,王坚率兵拒战。
尽管如此,蒙古军还是加紧攻城。不料,天刚亮就下起雨来,蒙军攻城云梯又被折断,被迫撤退。汪德臣遂单骑至钓鱼城下劝降,被城上飞石击中,不久死于缙云山寺庙中。蒙哥汗大怒,命军在东新门外筑台建楼,窥探城内虚实以便决战。
为了尽快结束战斗,蒙哥汗亲临现场指挥,中飞石受伤,不久就死于军中,蒙古军被迫撤围。
蒙哥死后,蒙古贵族在汗位继承上发生火并,在湖北前线的忽必烈匆忙北撤,争夺汗位。钓鱼城抗蒙的胜利,扭转了局势。
此后,马千代替王坚为合州主将,1263年(景定四年)张珏又代马千。张珏守合州,屡败元军。十二年后,王立又代张珏为合州安抚使, 1279年(祥兴二年)正月,王立降元,坚守36年的钓鱼城终于失陷。