Jerome Boateng's deflected late strike against his former side was enough for Bayern Munich to see off Manchester City with a 1-0 win at the Allianz Arena in their Champions League opener.
The hosts had the better chances of the opening 45 minutes as both Thomas Muller and Robert Lewandowski hit the side-netting after rounding Joe Hart, who was in inspired form to keep both Muller and Mario Gotze at bay.
Hart denied Gotze again in a much more subdued second period, while David Silva threatened for City, but Boateng, who left Eastlands after a year with the club in 2011, struck with one minute remaining on the clock via Gotze's back to secure the three points.
Bayern were without Franck Ribery for the Group E opener but Pep Guardiola’s three-pronged attack still boasted plenty of goal threat with Lewandowski leading the line, while Arjen Robben returned to the bench following a knee injury.
Manuel Pellegrini, who was serving the final game of his touchline ban, opted to start Edin Dzeko ahead of Sergio Aguero up front in the most eye-catching of his four changes from Saturday’s 2-2 draw at Arsenal.
It was Guardiola’s men who began the liveliest and within 40 seconds of kick-off, one side of the ground thought Bayern had taken the lead as Muller rounded Hart after racing through on goal, only to find the side-netting as he lost his footing.
The German felt Hart had tripped him as he looked to apply the finish but Spanish referee Alberto Undiano Mallenco waved away the protests in an early warning for City assistant Ruben Cousillas.
City were seeing more of the ball than they might have expected in the opening stages, though, and Dzeko forced Manuel Neuer into a smart low stop at his near post after being threaded into an acute angle by Silva.
It was a fairly open start to proceedings and Joe Hart was called upon for the first time after 18 minutes with a superb one-handed save to deny Muller’s goal-bound header, before Boateng sliced over from the resulting corner.
Hart was busy again two minutes later to beat away Gotze’s deflected effort, while Dzeko curled a wicked left-footer inches wide of Neuer’s post at the opposite end after a swift City break up-field.
After two half chances in quick succession for Dzeko, David Alaba looked to up the ante in Bayern’s favour, lashing wide from range before Hart pushed away his half-volley after the ball had fallen kindly on the edge of the City box.
The hosts were beginning to find their rhythm and Lewandowski threatened for the first time on 35 minutes in a similar chance to Muller’s early miss, rounding Hart but hitting the side-netting after Alaba’s through ball.
Bacary Sagna, who came into the side for the suspended Pablo Zabaleta, then saw a near-post header pushed away by Neuer from Samir Nasri’s corner as the game remained goalless at half-time.
Five minutes after the restart, Philipp Lahm dragged a low strike wide after being invited to shoot from range before Hart clutched onto the ball after Vincent Kompany’s block had taken the sting out of Gotze’s shot.
City were prompted into their first change on 57 minutes as the match-winner in this fixture last year, James Milner, replaced the largely ineffectual Nasri.
Bayern had started the second half the brighter of the two and there was a nervy moment for Hart as he misjudged the flight of Rafinha’s cross from the right, but the England keeper managed to recover in time to push away the danger from Mehdi Benatia’s return ball.
City looked at their most dangerous on the counter-attack and an incisive move into the Bayern half culminated with Silva launching himself at a right-wing cross from Navas that he was just unable to direct on target.
That chance triggered a brief spell of possession inside the Bayern half for the visitors but Martin Demichelis was still needed to stand firm to block and then hook away Bernat’s inviting low cross from the left.
Hart then spilled a speculative strike from Rafinha but managed to react in time to block Muller’s rebound from close-range, although the linesman’s raised flag would have spared his blushes.
Dzeko made way for Aguero on 73 minutes, while Robben replaced Muller soon after for the hosts. The Dutchman was soon in the thick of things as his penalty appeals were dismissed after going to ground under the close watch of Fernandinho.
Silva then felt he was fouled inside the area at the other end after a clumsy challenge from Benatia.
Bayern were pressing for a late winner as Hart produced another stunning stop to push away Boateng’s long-range strike before the former City man finally broke the deadlock with one minute on the clock as he lashed home a half-volley from the resulting corner.
Replays later showed the strike to have taken a slight deflection on its way off the back of Gotze, but the former City defender was quick to claim a rare goal.
Substitute David Pizarro smashed into Hart’s side-netting moments later, while Aguero poked wide the game’s final chance after a gut-wrenching finale for the Premier League side.