Bristol City mounted a brilliant second-half comeback to force an FA Cup fourth round replay with Middlesbrough.
Bristol City celebrate Scott Murray's equaliser against Middlesbrough
Yakubu swept Boro ahead after Adriano Basso spilled Stewart Downing's shot and Malcolm Christie made it 2-0 after a defensive error freed James Morrison.
But Richard Keogh gave City hope when he nodded home Lee Johnson's free-kick.
Scott Murray levelled with a superb lob after Mark Schwarzer's punch landed at his feet - and Jamie McAllister almost won it for the League One side late on.
The draw extends the Robins' unbeaten run to 18 games and they have not lost at home since August.
City boast the best home record outside of the Premiership it was understandable why Ashton Gate was packed to the rafters with Robins fans anticipating a Cup shock.
Unfortunately for Gary Johnson's men, they made the worst possible start, handing the visitors the lead after just four minutes.
Downing's shot should have posed Basso few problems but he could only push the ball into the path of the onrushing Yakubu to slam the ball into the roof of the net.
Credit to City, they did not allow that setback to affect their game plan, and their neat passing game began to cause Boro problems.
The only thing lacking was a cutting edge. Lee Johnson and Cole Skuse did force saves from Schwarzer but too many efforts flew high, wide or both.
Boro were firmly on the back foot, however, so it was something of a surprise when they extended their lead - and from another mistake at the back.
Liam Fontaine surrendered possession and Morrison made ground down the right flank before supplying a low cross for Christie to turn the ball home.
That was harsh on City - but they were soon right back in the game after half-time.
Keogh leapt unchallenged to meet Johnson's curling free-kick and his header dropped into the bottom corner to make it 2-1.
And soon after David Noble flashed a shot past the angle, the home side were level.
Schwarzer came a long way to punch clear another Johnson delivery - but the ball dropped at the feet of Murray on the edge of the box and he found the top corner with his first-time shot.
By now the Premiership side were rocking and it could have got even better for City when McAllister saw his shot fizz past the post after Schwarzer tipped Murray's cross into his path.
Boro finally managed to regroup but Gareth Southgate will still be relieved his side managed to hang on for a replay, which will be at The Riverside on 13 February.
Bristol City boss Gary Johnson:
"I'm proud of my side for how they came back at a Premiership side.
"I must admit I find it difficult to be angry before a game to get everyone going. But at half-time it was easy.
"At the break I told the lads to show more determination, more bottle and have the confidence to make something happen."
Middlesbrough boss Gareth Southgate:
"We were very good in the first period and could have had more.
"But all the good things we did in the first half we stopped doing after the break and City took advantage.
"City had spirit and passion. We have been on a good run of late but the game shows we are not quite there yet, you cannot take your foot off the gas."
Bristol City: Basso, Orr, Carey, Keogh, Fontaine (Woodman 83), Murray, Skuse (Russell 76), Johnson, Noble (Myrie-Williams 73), McAllister, Showunmi.
Subs Not Used: Weale, Artus.
Goals: Keogh 53, Murray 59.
Middlesbrough: Schwarzer, Xavier, Woodgate, Pogatetz, Taylor, Morrison (Johnson 86), Cattermole, Arca, Downing, Yakubu, Christie (Euell 75).
Subs Not Used: Jones, Davies, Hines.
Goals: Yakubu 4, Christie 23.
Ref: G Poll (Hertfordshire).