Regarding SQL, if there are changes to the structure itself, and the site is busy, I will take the site offline for a couple of minutes while the changes are made, if they are small. This is assuming that there is user generated content (be that shopping, posts, whatever). Changes are made using either the MySQL command line interface, or phpmyadmin. As far as the data goes, unless it is all controlled by the site (simple cms with no user input), there are few occasions where I would repopulate with local data.
My current dev environment is mamp. I use a mac with Lion, Apache, php and MySql installed, BBEdit for coding, yummyFTP for file transfer. Having said that, I have developed on Win and Linux over the years, and only recently stopped using the Linux box as a staging server (hippy environmentalist in me).
I work freelance and have had the good fortune to work in a fair few full time studios. I would say that there is probably a 50:50 split on average as far as environment goes between Win and Mac, Linux dev is out there, but less frequent.
So, my dev process currently (and I don't claim for a second that it is the most efficient method) is:
Develop site on local machine (if major amends are being made, a zipped, dated backup is made). Test on local machine, when happy, upload to live environment. Previously, as I said, I did have a Linux box set up in much the same way as server as well, but have found that largely unnecessary recently as sites have been relatively simple.
For one project recently, the entire process, including collaborative changes and upload was managed with Git, which is probably a far more sensible way of working, but there is obviously a learning curve, and unless you are working with developers familiar with it, can be a headache.
I have yet to use subversion, but it is certainly a common approach in some studios and something I must get my head around soon.