'I nearly took him off' - Michael Carrick on Middlesbrough goalscorer Matt Crooks
Sam Bell fired the hosts ahead from a Harry Cornick pass in first-half stoppage time and Cornick doubled the advantage with a close-range finish four minutes into the second half.
But Boro stormed back to level, Aaron Ramsey heading home from a Tommy Smith cross on 58 minutes and Crooks firing low past Max O’Leary six minutes later.
Both sides could have won it in a frantic finish.
Advertisement
Hide AdAdvertisement
Hide AdBoro substitute Cameron Archer had the ball in the net just before the final whistle, but was denied by a linesman’s flag for offside.
Carrick said: “I thought Matt had given his all and was about to make changes when he scored.
“He is a very important player for us, as is Aaron Ramsey and their goals showed the character we have, which will be needed in the games ahead.
“I am more pleased with the way we fought back than the result. It was a tough game and showed again how hard it is to earn points in the Championship.
Advertisement
Hide AdAdvertisement
Hide Ad“We played some really good football and the overall performance pleased me. It is just the fine details that are costing us and we need to work on them.
“After Matt’s goal I thought we would go on to win it. Cameron Archer’s finish at the end was fantastic, but apparently he was just offside.
“It’s important that the team never know when they are beaten and they showed that quality in not losing heart at two goals down.”
Bristol City: O'Leary, Tanner, Vyner, Pring, Dasilva, King (Naismith 69), James, Cornick (Conway 69), Weimann, Bell (Mehmeti 75), Wells (Taylor-Clarke 90). Unused substitutes: Wiles-Richards, Wood, Leeson.
Advertisement
Hide AdAdvertisement
Hide AdMiddlesbrough: Steffen, Smith, McNair, Lenihan, Giles, Hackney, Howson, Forss (McGree 84), Akpom, Ramsey, Crooks (Archer 75).Unused substitutes: Mowatt, Barlaser, Dijksteel, Roberts, Bola.
Referee: T Robinson (West Sussex).