Geis has impressed since moving to the Coface Arena ahead of the 2013-14 season, and scored five goals in 67 Bundesliga appearances for Mainz.
The 21-year-old, who is currently representing Germany's Under-21 team at the European Championship with new Schalke team-mate Max Meyer, has now opted for a new challenge.
"Schalke fascinates me. The stadium, the fans, playing in the Veltins Arena is something special," he told the club's official website following confirmation of the deal on Tuesday.
""I want to roll up my sleeves and work hard. It could be the start of something new at Schalke and I want to play my part in that."
Schalke sporting director Horst Heldt added: "We are delighted that one of the most coveted young players has chosen to join our club.
"Johannes possesses many great qualities, his dangerous set pieces, his passing game and his ability to find a man in space make him one of the Bundesliga's best central defensive midfielders.
"The fact that he was already captain at Mainz at such a young age shows that he can and wants to take on responsibility."
Meanwhile, Mainz have reacted by immediately signing Basel midfielder Fabian Frei, 26, as Geis' replacement as they aim to better 2014-15's 11th-place finish..