In a correctly normalised database this should be rare, confined to version upgrades.
If you have to do it, since 8.0 with InnoDB see https://mysqlserverteam.com/mysql-8-0-innodb-now-supports-instant-add-column/, otherwise follow a sequence like this ...
1 Record a starting time or replication log position
2 Disable transactions
3 Make a working copy of the table, add the desired column to it
4 Give the original table a backup name
5 Rename the new table to the original name
6 Replay the transaction log from the timestamp in #1.
7 Enable transactions.
Last updated 16 Aug 2019