Karim Onisiwo put Die Nullfunfer in front, heading home from a corner with less than 20 minutes to play in the first half.
Kevin Stoger, who left Mainz to join Bochum, leveled after capitalizing on some sloppy play, beating Robin Zentner on the left side.
In the end, it was a second-half header by Onisiwo that ensured the visitors would come away with all three points.
Story of the match
Bochum started on the front foot, pressuring the Mainz back-line, but never really threatening Robin Zentner's goal.
In the 11th minute, Kevin Stoger, who joined Bochum from Mainz in the summer transfer window, almost took advantage of a poor clearance by Zentner, but his ambitious effort from the center circle went over.
Two minutes later, the hosts were on the counterattack, Simon Zoller feeding Gerrit Holtmann, whose piercing volley was turned away by the busy Zentner.
After surviving a check for a penalty via handball, De Nullfunfer went in front. A cross by Edmilson Fernandes from a corner kick was met by Onisiwo, who headed home.
Moments later, the Austrian should have doubled his and Mainz' tally, but after being through on goal, he could only fire over the crossbar.
In the 39th minute, Stoger caught Zentner out again and his overhit cross from the left went past the goalkeeper and into the far corner to level the match.
Halftime: VfL Bochum 1-1 FSV Mainz 05
Just after the restart, Takuma Asano went down following a clash of heads, but he was able to get up and continue.
A free-kick from Stoger and two minutes later, a chance from Simon Zoller saw Bochum in search of a winner.
After Riemann saved in the 73rd minute, he was beaten four minutes later, a corner kick by Anton Stach was met by Onisiwo, who headed home.
A final chance for the hosts came when Konstantinos Stafylidis had a go from distance, but he could only find the side netting as Mainz took all three points.