Pep Guardiola will be delighted with the second half performance from his Manchester City team as Ilkay Gundogan struck either side of the break to put the Premier League team back into Group C contention.
Lionel Messi put Barcelona ahead 21 minutes into the first half as the Blaugrana were in impervious form, but Gundogan ushered a revitalised City team in at half-time, and with Guardiola making a few tweaks to his side, City dominated his former team in the second half.
First a Kevin De Bruyne freekick, then Gundogan's second ensured City emerged victorious and are now two points behind group leaders Barcelona.
A scrappy opening to the game saw both sides give away a number of free kicks, though it was the Spanish champions who settled quicker and asserted their dominance on Pep Guardiola's men.
There was early controversy as Samuel Umtiti looked to have tripped Raheem Sterling in the penalty area, but referee Viktor Kassai booked the City striker for simulation, though it looked as if he was touched by the Barcelona defender.
Despite few real chances for the Blaugrana as City coped well with MSN upfront, Messi bagged the opener 21 minutes in.
Starting from their own end as Messi sent Neymar on his way, and the Brazilian ran half the length of the pitch before playing the ball back to his teammate who made no mistake against Willy Caballero.
A ball over the top for Messi was headed back across goal to Luis Suarez, but the striker was caught a little by surprise and failed to get his effort on target.
Then very much against the run of play City levelled the game as Gundogan powered home from close range following good work from Sterling down the right.
After that goal City looked a different side as both Sterling and Sergio Aguero went close, but it was De Bruyne who placed a freekick into the top corner to give the home side the lead just after the break, with ter Stegen completely beaten by the strike.
The referee had to wave away more Manchester City penalty appeals as Aguero felt he was pulled down in the box by Javier Mascherano. Moments later, the Argentine headed inches wide of the near post from a freekick.
Clearly on top City almost let Barcelona regain the lead following a silly mistake by John Stones.
The defender gave the ball away straight to Luis Suarez deep inside the City half, Suarez then nutmegged Otamendi and his slide-rule pass to Andre Gomes allowed the Portuguese to get a shot in, but he could only smash the crossbar from just outside the box.
Seconds later, a City counter attack caught Luis Enrique's men flat-footed and De Bruyne's shot went inches wide with ter Stegen rooted to the spot.
Gundogan got his second with 16 minutes left, De Bruyne's perfectly weighted pass to Jesus Navas got the Spaniard in behind the Barcelona backline and his cross was deflected into the path of the ex-Dortmund star who smashed home from six-yards.
Looking to get back into the game Barcelona had to dig deep but were unable to create any chances of note with Messi heading into his own arm in the dying moments.
3 - Manchester City: Caballero; Zabaleta, Stones, Otamendi, Kolarov; Fernandinho (Fernando, m.60), Gündogan, Silva; Sterling (Jesús Navas, m.70), De Bruyne (Nolito, m.88) and Agüero.
1 - Barcelona: Ter Stegen; Sergi Roberto, Mascherano, Umtiti, Digne; Busquets, Rakitic (Turan, m.61), Gomes (Rafinha, m.76); Messi, Neymar and Suárez.
Goals: 0-1, m.21: Messi. 1-1, m.39: Gündogan. 2-1, m.50: De Bruyne. 3-1, m.74: Gündogan.
Referee: Viktor Kassai (HUN). Sterling yellow card (m.11) and Kolarov (m.59),for Manchester City; Rakitic yellow (m.20), Neymar (m.28) and Busquets (m.76), for Barcelona.
Fourth Champions League Match-Day for Group C at the Etihad Stadium (England).
Guardiola: This win proves Manchester City can compete
Pep Guardiola savoured a memorable night as Manchester City beat his old club Barcelona, "the best team in the world", 3-1 on Tuesday with a display that hinted he may be building something special.
Coming from behind to defeat the side that crushed his team 4-0 two weeks ago prompted a smile from the former Barca coach who said going into the Champions League Group C match that it felt like their "final".
Defeat could have had calamitous repurcussions for the first year of coach Guardiola's City adventure, making qualification for the knockout stages look precarious.
However, he watched his men deliver the sort of attacking masterclass he patented at the Nou Camp and could gaze contentendly at a table that sees second-placed City two points behind Barca.
What pleased Guardiola most was the character of his side.
City produced the goods when humiliation beckoned again with Barca offering what coach Luis Enrique called "one of the best 40 minutes we have played on a stage like this against top-quality rivals".
After Lionel Messi had put the visitors in front, the hosts roared back to dominate with Ilkay Guendogan scoring twice and Kevin De Bruyne netting with a brilliant free kick.
"I am so happy for the guys, it is the first time we have beaten the best team in the world," Guardiola told reporters.
"They (Barca) had an amazing 30 minutes, we had a lot of problems but our first goal helped us a lot. In the second half we created a lot of counter-attacks."
Here was evidence, after a recent barren spell which seemed to be putting the pressure on Guardiola, that the Spaniard's determination to stick to his attacking pass-and-move principles is going to pay serious dividends.
City suffered at the Nou Camp after the sending-off of goalkeeper Claudio Bravo but this time, even if Guardiola felt his players were more impressive "11 versus 11" in Barcelona, there was only one team growing in stature as the contest progressed.
The celebrated trident of Messi, Neymar and Luis Suarez began to disappear as the dazzling De Bruyne, the restored totem Sergio Aguero and the constant menace Raheem Sterling caused havoc for Barca's rearguard.
"In the second half we were incredible and dominated Barcelona," said the equally impressive Germany midfielder Guendogan.
"The win was more than deserved. It was more about the mentality and winning the one v ones. It was an unbelievable game."
Messi confronts City players in the tunnel after Barcelona defeat
A dominant second-half Manchester City performance left Barcelona frustrated, so much so that Lionel Messi got into a post-match altercation in the tunnel after the final whistle.
An as of yet unnamed Manchester City player is said to have said something to the Argentine No. 10, and the Blaugrana striker responded by calling him 'stupid'.
Barcelona match-day delegate Carles Naval and City striker Sergio Aguero looked to maintain the peace, as the situation dissipated.
Luis Enrique: Barcelona played 40 minutes of scandalous football
Barcelona coach Luis Enrique has conceded that his team were outplayed for the majority of the match and were punished by Manchester City for decisive errors made on the pitch.
The Catalan club looked to be in control when Lionel Messi opened the scoring in the 21st minute off a swift counterattack.
However, Pep Guardiola's side responded in emphatic fashion with an Ilkay Gundogan brace on either side of half time in conjunction with a spectuacular second half free-kick from Kevin de Bruyne sealing a memorable 3-1 victory.
The result leaves Manchester City trailing the Blaugrana by just two points in Group C.
And the Asturian manager believes that Barcelona's lacklustre performance has left the group opened up and says that the team cannot settle for anything less than a win in their final two group fixtures.
"Barcelona played 40 minutes scandalous football, but we made a decisive error that harmed our chances," he told reporters. "However, that was the best 50 minutes of football I've seen from one of our rivals.
"We certainly made more mistakes than we usually make. Now the group is open and the goal is to win the final two games."
Barcelona are set to take on Celtic on November 23 before concluding the group stage with a match against Borussia Monchengladbach on December 6 at the Camp Nou.
Zidane: Never keeping a clean sheet bothers me
The debate between whether Karim Benzema or Alvaro Morata deserves to start for Real Madrid has kicked up a gear recently but Zinedine Zidane is refusing to change his approach.
Preferring the more experienced striker for the majority of his line-ups, Zidane has found Morata to be a very capable option off the bench with the Spaniard now pushing for a first whistle call up.
"I know they're two important players," the Frenchman told his pre-match press conference. "Both will get their chance and I know that your concerns are always the same, well my answers are always the same.
"I cannot say anything else, I know what you want and regardless of that everybody plays, the same with these two and the whole group."
Taking on the Polish side with Legia under a stadium closure order, Real will find themselves in a very different scenario to the 80,000-strong arenas that usually host their European fixtures.
"It will be different but for us nothing changes," he admitted.
"We have to stay focused and motivated, because it's still a Champions League match just with a little strange feeling.
"There is no advantage for us, we'll prepare in the same way."
Having managed just two clean sheets in the 2016/17 season so far, Los Blancos' coach is very keen to right that wrong in upcoming games against Legia and Leganes.
"I don't care too much but the fact that we always concede at least one goal, and we let in one in the Copa del Rey too, is annoying," Zidane noted.
"You cannot control everything, and of course we can improve, but opponents will always find a way to score past you."
Wednesday night will also mark Zidane's 100th game as coach, having started out in the dugout with Real Madrid Castilla in 2014, and the Frenchman is ready to continue his development on the biggest stage.
"I'm proud for the first 100 games but I still have to improve in every area," he stated.
"I have much to learn. I like what I'm doing and hopefully I can continue for a long time at this club."