It's the second significant move this past week for the Mets, who brought back free-agent outfielder Jay Bruce on a three-year, $39 million contract Wednesday.
Gonzalez gives the Mets a veteran presence at first base, where Lucas Duda and Dominic Smith mainly played for them last season. Duda was traded to the Tampa Bay Rays during the season, and Smith, 22, struggled offensively, batting just .198.
Gonzalez spent the past six seasons with the Los Angeles Dodgers but was limited to 71 games in 2017 because of a herniated disk in his back that put him on the disabled list for a long stretch. When he returned, National League Rookie of the Year Cody Bellinger had taken over for the NL champion Dodgers.
Gonzalez, 35, is owed $21.5 million in the final year of his contract. The Mets would owe him just $545,000, with Atlanta paying the rest.
USA Today first reported the agreement between Gonzalez and the Mets.