One common cause of the tablespace growing is the undo space. Simplified: transactions that haven't committed yet keep track of changes that can be rolled-back if necessary. See the article that Phil links on further explanations for the growing tablespace.
Of course, there is still no way to shrink the tablespace other than a logical restore [see decreasing tablespace in the documentation].
If undo space is the reason yours is growing, starting in 5.6 you can store the undo logs in separate files. Some things to keep in mind:
- This can only be done on a newly created instance, so you can separate the undo space when you do the aforementioned logical restore.
- You cannot change the innodb_undo_tablespaces, so estimate high.
- You can change the number of innodb_undo_logs, so this can be tuned based on your performance tests.
- Creating the undo logs in a directory on SSD storage is recommended by specifying the innodb_undo_directory
- You can't shrink the size of the undo space until 5.7. See this article on how it works.
- You can't downgrade to a version below 5.6 once you've separated the undo space. I suspect this is not an issue, but it requires mentioning.
My recommendations:
- Plan upgrade to 5.7. It's worth it for added performance schema insights alone.
- Identify if undo space is truly why the tablespace is growing. It likely is.
- Identify if this is growing tablespace is really a concern: are you running into performance issues? Are you running out of disk space?
- If it is, plan for the logical restore to separate the undo space, realizing that the larger dataset will take longer time. Plan accordingly.
Additional insight on moving the undo space:
Can I move the undo log outside of ibdata1 in MySQL 5.6 on an existing server?