First, distill your data. You do not need to keep a row for every visitor forever. Take it from someone who's tried... you don't. After (an amount of time) take the stats from the day and distill them into a single row that gives you overall traffic, average time per page, average total stay, hits, surfers, bots etc etc. Then you'll wind up having 365 rows per year per site

It would be silly to track every single IP that comes in ... so make yourself a table of IPs you want to watch for. I DL the spiderSpy DB every day, convert it to mySQL and then see who's coming to dinner on the first call of every surfer. I keep bots, spiders, asshats etc in a table with a unique integer ID for each one - then when I see one, I simply create an xref record of date and id. Much lighter.
I track surfer actions, click by click and hang onto then for anywhere from 2 days to 2 months, depending on the application. A cron job nightly distills data based on the cutoff time for (that application), then I run a table optimize (to shrink it back down) and backup. Clean, simple.