England forward Theo Walcott had slotted in a fine breakaway goal after 10 minutes for the injury-hit Premier League side, who were without captain Cesc Fabregas.
However, Shakhtar - trashed 5-1 at Emirates Stadium a fortnight ago - responded well and were eventually rewarded when 19-year-old Craig Eastmond, making his European debut, diverted Dmytro Chygrynskiy's header into his own net.
Eduardo - who scored a late consolation goal in north London - slotted home from close range on the stroke of half-time, which proved enough to force his old club to wait for qualification to the knockout stages.
Gunners boss Arsene Wenger had warned his team not to expect another European romp against a side which boasted an impressive home record, the Miners having kept clean sheets in nine from 10 matches, and lost just two of the last 30 games in all competitions.
As the locals cranked up the atmosphere, Shakhtar made a positive start.
However, it was Arsenal who came close to breaking the deadlock on eight minutes when Samir Nasri strode forward to the edge of the Shakhtar box and sent a low shot against the outside of the post.
At the other end, Chygrynskiy's close-range header from a corner was blocked by Sebastien Squillaci.
The Donbass Arena was then left in stunned silence as Walcott put Arsenal ahead on 10 minutes.
Jack Wilshere - back after serving a three-match domestic ban - laid the ball into the path of the on-rushing England forward, who showed the Shakhtar defence a clean pair of heels before breaking into the area and slotting a cool finish past Andriy Pyatov into the right-hand corner.
The Ukrainians immediately went on the offensive, and there was an amazing let-off for Arsenal on 16 minutes.
Jadson's snapshot smashed into Johan Djourou, with the Brazilian midfielder then eventually turning the loose ball against the post.
From the resulting corner, Lukasz Fabianski made a brilliant reaction save to deny Chygrynskiy.
Swiss referee Massimo Busacca allowed play to go on after Tomas Hubschman flattened Wilshere, before then showing the yellow card first to Emmanuel Eboue for tripping Jadson on the left flank following a swift counter-attack and also then booking the Czech midfielder.
It proved a somewhat controversial decision as from the resulting free-kick, Shakhtar equalised when the unfortunate Eastmond deflected Chygrynskiy's header into his own net on 29 minutes.
Arsenal were now in danger of being over-run, as Shakhtar continued to pour forwards.
Jadson should have done better when played into the penalty area, but his shot was straight at the keeper.
Bendtner fed Walcott on the penalty spot after a surging run from Eastmond, but Yaroslav Rakitskiy made a saving tackle just as the England forward shaped to shot.
On the stroke of half-time, the home side went ahead when Darijo Srna capitalised on Gael Clichy's hesitation on the nearside touchline and slotted the ball across the six-yard box, where Eduardo swept home - the Croatian again opting not to celebrate.
At the start of the second half, Wilshere had a great chance to equalise when he robbed Willian on the edge of the area, only to bend the ball wide before Walcott then scuffed his effort following another scramble inside the Shakhtar box.
The home fans were screaming for a penalty when Jadson took a tumble, but the referee was not interested.
Arsenal wasted another opportunity to get level when Sebastien Squillaci headed straight at the keeper from six-yards out after more patient build-up and a fine cross from Nasri.
Walcott's snapshot was caught by Pyatov as the English side continued to press.
Fabianski got behind Srna's curling, 20-yard free-kick as the hosts looked to wrap up the victory.
With eight minutes to go, Wenger looked to inject some fresh legs into the Arsenal attack when he sent on youngster Jay Emmanuel-Thomas, replacing Walcott.
However, the hosts were not troubled as they moved level on nine points with Arsenal in the battle for Group H.