Real Madrid entered the game after a disappointing loss to newly-promoted side Cadiz in the La Liga. The Madrid giants lost their captain Sergio Ramos due to a knock to the knee.
With Barcelona to come in La Liga on the weekend, Zinedine Zidane elected to rest Karim Benzema and start Luka Jovic. Shakhtar Donetsk were without eight first-team players due to COVID-19.
Real Madrid started better of the two sides, keeping possession well. However, the Ukrainian side were countering expertly and their captain Marlos had the first big chance of the game.
The Brazilian was through on goal but shot straight at goalkeeper Thibaut Courtois. Shakhtar, though, weren't to be denied on their next counter, with Tete scoring with a low shot in the 29th minute.
Before the Real Madrid players could rally, they were 2-0 down after another excellent counter-attack, as Raphael Varane deflected a ball box past his goalkeeper.
Solomon made it 3-0 in the 41st minute, as the away side caught Real Madrid on another counter. He slotted the shot into the bottom corner, as the away side went into half-time 3-0 up.
Real Madrid started the second half testing the Shakhtar defense and goalkeeper, something they hardly managed to do in the first half. Karim Benzema, who came on for Rodrygo, started dropping deep to affect the game.
Luka Modric took things into his own hands, going past a player and unleashing from 30 yards to find the top corner. Jovic, who missed a glorious chance in the first half, was taken off for Vinicius Junior.
The 20-year-old Brazilian reduced the deficit just 13 seconds after coming on, picking the pocket of Marlos to finish low into the bottom corner. Shakhtar, meanwhile, had many presentable chances on the other end.
Federico Valverde's equalizer for Real Madrid in stoppage time was ruled out for offside, as Vinicius was adjudged to have obstructed the goalkeepers view upon consultation with the VAR.
Here are the best tweets from the game