The Premier League champions were toothless in the first half but finally clicked 10 minutes after the break when the impressive Trent Alexander-Arnold set up Diogo Jota for a tap-in.
A late penalty lashed home by substitute Mohamed Salah gave the scoreline unwarranted gloss as Liverpool went to top of Group D.
“It was a tough night,” Liverpool manager Jurgen Klopp told BT Sport. “It’s a bit like in a marriage, there are good and bad times. It’s not a bad time but it’s a tricky time. A hundred percent we have to stick together and fight harder and that’s what the boys did tonight.”
The German boss said Fabinho’s injury was “exactly the last thing we needed”.
“He felt his hamstring so that’s not good,” said Klopp. “He didn’t feel it that much — he said he could’ve played on — but not sprinting so that doesn’t help. We will see, we will have to do a scan and see but clearly it’s not good.”
Klopp left his first-choice attack of Salah, Sadio Mane and Roberto Firmino on the bench against the Danes, giving his second string a chance to shine.
But Liverpool, lacking urgency and fluency at an empty Anfield, struggled to break down the hard-working visitors, who had lost their Champions League opener to Atalanta 4-0.
Midtjylland had a chance to take a shock lead in the opening minutes when a long clip down the middle sent Anders Dreyer in on goal and Alisson Becker had to make a smart save.
Liverpool, who beat Ajax away in their Champions League opener, dominated possession but struggled to create clear chances.
– Alexander-Arnold threat –
Most of what little threat there was in the first half came from full-back Alexander-Arnold, who was lively down the right.
He produced a cross which Takumi Minamino failed to connect with before dancing through the Midtjylland defence but failing to find the Japan international.
But Klopp’s problems became a lot more serious just before the half-hour when Fabinho, filling in alongside Joe Gomez in central defence, limped off with an apparent hamstring injury, with teenager Rhys Williams entering the fray.
Klopp is already coming to terms with the absence of central defensive lynchpin Virgil van Dijk, who could be out for the whole season.
As half-time approached, Alexander-Arnold drilled another cross to Minamino, who headed wide.
But Liverpool failed to register a single first-half shot on target for the first time in 51 home games in all competitions, since October 2018.
Georginio Wijnaldum replaced captain Jordan Henderson at half-time and after a few minutes Klopp ordered Salah and Mane to warm up on the sidelines.
The breakthrough finally came when Alexander-Arnold received the ball on the right and found Xherdan Shaqiri, who played a delightful reverse pass back into the path of the marauding full-back.
The England international squared for Jota to finish from close range.
It was Liverpool’s 10,000th goal in all competitions, 128 years after their first, netted by Jock Smith in September 1892.
Salah and Mane were introduced on the hour mark for Minamino and the disappointing Divock Origi but Liverpool still struggled to find their rhythm and it was Midtjylland who threatened next as their substitute Evander fired narrowly wide.
Firmino wasted a clear chance for Liverpool in the closing minutes after yet more good work from Alexander-Arnold
The home side almost paid the price immediately but Dreyer could only find the side-netting after drifting past Gomez.
Liverpool escaped and Salah won the penalty after a searching through-ball from Alexander-Arnold. He lashed home to make the three points safe.