The visitors went toe-to-toe with the Blues in the opening period before the hosts gradually took control after the break.
There was the added drama Sergio Aguero missing a penalty as the Blues’ talisman missed the chance to become the Club’s equal greatest goal-scorer.
What happened?
City will have done their homework on Shakhtar, but facing this skilful, tidy Ukrainian side was an entirely different proposition.
Pep Guardiola had warned his players that Shakhtar were a dangerous side, and it quickly became evident from the opening few minutes that this was going to be a tricky night for the Blues who have pretty much swept all before them in the past month or so.
The visitors, with several Brazilians in their starting line-up, looked very comfortable in possession with their intricate passing and movement causing City plenty of problems.
The first real scoring opportunity came on 12 minutes as the Blues were caught flat-footed allowing Fred to race clear, only to be denied by his former Shakhtar team-mate Fernandinho’s last-ditch tackle.
With the silky skills of Shakhtar playmaker Bernard causing all kinds of problems for City on the right flank, it was Ederson who the busier of the two keepers for the opening half-hour.
Then, a real chance for the hosts to take the lead.
Gabriel Jesus won possession in the final third and played in De Bruyne who looked certain to score - only for the Belgian to miss the target when one-on-one with goalkeeper Andriy Pyatov.
Shakhtar responded almost immediately with Marlos firing a 20-yard curling drive goalwards that Ederson clawed away and five minutes before the break Facundo Ferreyra somehow managed to bundle a point-blank header from six yards out wide of the target.
There was still time for Leroy Sane to jink past three players and fire a low shot inches past the post as this entertaining game somehow reached the halfway point goalless.
The deadlock was finally broken just minutes after the re-start – and it was yet another stunning effort.
David Silva carried the ball towards the Shakhtar box, shrugging off one challenge before squaring a pass to De Bruyne who shifted the ball on to his right foot and then sending a howitzer of a shot past Pyatov who watched it fizz over his shoulder and into the net.
It was KDB’s first of the campaign, but it will no doubt be the first of many.
Silva then almost unlocked the Shakhtar defence again on 55 minutes, sending a delightful chip into the path of Aguero whose volley was beaten away by Pyatov.
City were much sharper, first to the ball and now the dominant force and as De Bruyne raced down the right, his perfect low cross found second-half sub free in the middle – but this time the England winger fluffed his lines on this occasion, firing wide of the post.
Then, with 71 minutes played, Sane was fouled in the box and Aguero had the opportunity of equalling Eric Brook’s record from the penalty spot.
As the Etihad Stadium held its collective breath, the Argentine stepped up only to see his spot-kick well saved by Pyatov leaving Kun still one goal short of Brook’s 177.
There were half-chances to increase the lead in the minutes that remained and two half-appeals for penalties as Sane and Sterling tumbled in the box, but the officials weren’t impressed.
Then, in the last minute of normal time, Bernardo Silva raced clear on the right before finding the darting Sterling who finished emphatically off the underside of the crossbar.
Game over!
So, the Blues win the first two group stage games for the first time in the Champions League, record another clean sheet and a seventh successive victory in all competitions – not to mention the added bonus of an excellent display from makeshift left-back Fabian Delph!
Now on to Chelsea…
Key moment:
A brilliant tackle by Fernandinho early in the game when Shakhtar had their tails up was crucial - falling a goal behind to a technically excellent side such at that stage might have made this an even tougher evening.
City Matchday App star man: Kevin De Bruyne
Another fine display by the Belgian who’s star again shone brightly throughout.
What it means…
City stay top of Group F with maximum points from the two games – Napoli and Shakhtar are on three points from two and Feyenoord bottom and yet to take a point.
What’s next?
City travel to Chelsea for Saturday’s early evening kick-off.
The Premier League leaders versus the current Premier League title holders – it should be a fascinating match.
The Blues then wrap up for the international break before resuming against Stoke City a fortnight later.