Mario Balotelli stepped off the bench to rescue Manchester City's Champions League hopes with a controversial penalty to secure a 1-1 draw against Borussia Dortmund.
Joe Hart made eight top-class saves for City but the visitors finally made the breakthrough when Jack Rodwell left a square pass short on the hour for Marco Reus to score the opener. Dortmund looked set to hold on for a 1-0 victory, but a harsh penalty - given for a Neven Subotic handball - allowed Balotelli to equalise for a barely deserved point.
City almost led inside 25 seconds as Sergio Aguero made space for himself on the edge of the box, firing his shot too close to keeper Roman Weidenfeller. Pablo Zabaleta then had no excuses in the eighth minute, smashing wildly over on his left foot from close to the penalty spot after David Silva's sublime pass.
However, moments later City were lucky not to fall behind as Mario Gotze advanced from the right, forcing Hart to tip the ball onto the far upright for his first save of the night. Up the other end Silva continued to work his magic with another delightful slide-rule ball for Aguero, who shot tamely at the onrushing keeper as Mario Balotelli and Carlos Tevez watched from the stands.
Mancini's plans were disrupted before half-time as Javi Garcia was forced off - replaced by Rodwell, and City were lucky to reach the break level after Hart firstly foiled Gotze at point-blank range and then tipped the same player's effort onto the bar. Silva then volleyed over at the other end, but Hart produced his fourth quality save of the half to deny Ilkay Gundogan on the stroke of the interval.
Another full-stretch dive from Hart chalked up his fifth notable contribution of the match, but he was finally beaten when Rodwell's blind pass was seized upon by Reus who ran clear to score. Dortmund weren't done, though, with Hart spreading himself for save No. 6 and then getting fingertips to the ball for No. 7.
City had the chance to level when Aguero was sent through, opting to square the ball rather than shoot, but the better opportunities continued to fall Dortmund's way as Robert Lewandowski clipped wide. Then came the penalty call, given when Aguero fired at his marker's arm from a close range, and Balotelli stepped up to calmly send the 'keeper the wrong way in the 90th minute.
In Group D's other game, Real Madrid made it two wins out of two as they secured a 4-1 victory at Ajax thanks to a Cristiano Ronaldo hat-trick.
The Spanish champions dominated the first half but came up against a goalkeeper in fine form, with Kenneth Vermeer making save after save, but Madrid finally went ahead three minutes before the break as Ronaldo poked home from close range.
Almost as soon as the second half kicked off they had doubled their lead, and in some style, with Karim Benzema meeting a cross with a stunning scissor kick. On 56 minutes, though, Ajax were back in it, Niklas Moisander heading home from close range from a corner.
Ajax threatened an equaliser, but Ronaldo put the game to bed with a quickfire double, first curling into the far corner on 79 minutes before, on 81 minutes, expertly chipping over Vermeer.
Arsenal appear set for an easy ride into the competition's knockout stages after they made it six points from six with a 3-1 triumph over Olympiakos at Emirates Stadium. Arsene Wenger, who completes 16 years in charge of Arsenal this week, saw his side overturn the Greeks thanks to goals from Gervinho, Lukas Podolski and Aaron Ramsey.
Mikel Arteta was deemed fit to start for the Gunners, but he failed to inspire a fast opening as Olympiakos created the most dangerous moment of the first half hour. Paulo Machado picked out a superbly paced pass to the edge of the Arsenal area, where Kostas Mitroglou scuffed a shot through a host of bodies to nearly surprise Vito Mannone.
Machado then threatened again when he headed over from the edge of the six-yard box, but Gervinho struck against the run of play when he drove a tame effort home from outside the area. Arsenal's joy was short-lived, though, as Mitroglou found himself in between Laurent Koscielny and Thomas Vermaelen to head beyond Mannone.
Santi Cazorla should have restored the advantage early in the second half when he stabbed his effort wide from Gervinho's cross, but the next time Gervinho caused havoc Podolski - who had barely featured all evening, swivelled and shot through keeper Balazs Megyeri in the 56th minute. Ramsey then capped off the win in injury-time.
AC Milan claimed a 3-2 victory at Zenit St Petersburg in a open encounter in Group C.
Milan were ahead on 13 minutes when Urby Emanuelson's free-kick took a significant deflection past goalkeeper Vyacheslav Malafeev, and the Rossoneri had doubled their lead less than five minutes later as Stephan El Shaarawy danced through the defence before sliding the ball into the corner of the net.
However, Zenit did not give up the fight and got their reward on the stroke of half-time as Hulk drilled the ball under Christian Abbiati. In the 49th minute, the scores were level, Roman Shirokov heading home from a corner.
With a quarter of an hour remaining, though, the visitors claimed the goal that secured all three points when Tomas Hubocan diverted a Riccardo Montolivo cross into his own net. The defeat brought an end to Zenit's 16-game unbeaten run in home games in Europe.
Porto secured a 1-0 victory at home to big-spending Paris Saint-Germain.
The hosts looked the stronger side and took a deserved lead on 83 minutes, with James Rodriguez providing a fine finish, and PSG were unable to find an equaliser.
Malaga put in another impressive showing as they beat Anderlecht 3-0 in Belgium.
Malaga took the lead on the stroke of half-time as Eliseu found the net with a fierce volley from just outside the area, and on 57 minutes they doubled their lead when Nacho Monreal was brought down for a penalty that Joaquin placed into the top left corner of the goal. Seven minutes later, it was 3-0, with Eliseu rounding off the scoring with his second of the game with a stunning chip.
Schalke had to settle for a 2-2 draw at home to ten-man Montpellier.
Schalke started the better, but it was the visitors who took the lead as Karim Ait-Fana curled the ball into the far corner from just outside the area on 13 minutes. On 26 minutes, Schalke were level as Klaas-Jan Huntelaar played an intelligent pass through to Julian Draxler, who took the ball around goalkeeper Geoffrey Jourdren before rolling the ball into the empty net.
The game looked to have turned in Schalke's favour early in the second half when Draxler, after a fine run into the area, was fouled by Garry Bocaly. The defender was dismissed, and Huntelaar made no mistake from the penalty spot. However, Souleymane Camara equalised in the 90th minute to give the Ligue 1 champions a share of the spoils.
Dynamo Kiev saw off Croatian side Dinamo Zagreb 2-0.
Kiev broke the deadlock in the opening minutes, Oleg Gusev heading home from an Ognjen Vukojevic cross after some good build-up play, and on 34 minutes it was 2-0 when Josip Pivaric diverted a cross into his own goal.