The Saints, thrashed 9-0 at home by Leicester in their last league game, led until the 70th minute when Sergio Aguero finally levelled.
In the onslaught that followed, Kyle Walker scored a dramatic late winner to seal three crucial points for the champions - particularly give Liverpool’s late win at Villa.
With the visitors setting up with two banks of five players, City were going to need patience against a Southampton side determined to make amends for their heavy home loss to Leicester.
But the visitors’ resolve doubled when they took a shock lead on 12 minutes with James Ward-Prowse following up a long-range effort from Stuart Armstrong and prodding the ball Ederson had uncharacteristically spilled into the net to silence the Etihad.
The remainder of the half was like attack versus defence as Southampton players threw themselves in the way of every shot and cross City made in a frustrating opening period for the champions.
As the teams walked off at the break, Pep Guardiola, who had been animated on the sidelines throughout, was already planning a change with Gabriel Jesus summoned from the bench just before the half drew to a close.
Jesus replaced David Silva, as the Blues looked to add more goal-threat in the box where the Saints defence had thus far been on top.
The pattern continued with Southampton’s defensive diamond designed to spoil and frustrate the hosts - City needed a deflection, mis-hit or slice of luck to change the way the game was going.
Then, finally, the first shot on target - and it resulted in the equaliser.
The siege continued with new vigour.
Then there was bizarre moment of confusion after referee Lee Mason restarted play after the ball had hit him - a Saints defender played the ball to McCarthy who was closed down by Aguero -so he picked up what was technically a back pass.
The resulting free-kick was drilled inches wide by De Bruyne.
It was a frenetic finish and justice was served just three minutes from the end when Phil Foden fed Angelino and the Spaniard’s deep cross was palmed down by McCarthy into the path of Walker who volleyed home from close range.
The Blues should have killed the game off with Sterling and Jesus guilty of missing counter-attacking goals, but it was the result that mattered on a dramatic day at the Etihad.
Star man: Kyle Walker
An assist and a goal for the England right-back who was bright and breezy throughout.
More injury woe?
Pep Guardiola confirmed David Silva had a muscular problem towards the end of the first half.
The skipper didn’t appear after the break and the boss confirmed he is probably a doubt for Atalanta next week.
With the Blues suffering a succession of injury set-backs this campaign, Silva’s injury couldn’t be at a worse time with Liverpool next up a week on Sunday.
Check mancity.com for updates on Silva’s condition in the next few days.
“Football players have pride. They are humans and they suffer.
“Southampton didn’t want to be in that position again. It is our job to attack them. I knew it, I knew it in the Carabao Cup. Our big problem would be against a team who suffered their own pride.
“They would not accept what happened against Leicester again. That means be aggressive, win the duels. We knew it.
“After the goal it is more difficult. We were so intense and aggressive that’s why we came back to win..”
What it means….
On a day of late drama, City’s win ensures the gap remains six points to leaders Liverpool who had been losing with 87 minutes played at Villa Park but recovered to win 2-1.
We resume our Champions League group stage campaign on Wednesday with a trip to Atalanta where victory will ensure a passage into the Round of 16.
Then the top of the table clash between Liverpool and City in the Premier League – kick-off 4.30pm, Sunday 10 November.