And the attacker can simply replace the server with a fake which collects new data anyway.
I'm beginning to think you didn't actually read my post. I said: "If an attacker gets in he might be able to siphon off new customer information coming in, but that's no reason to hand over all the info for all my past customers.".
Or install keyloggers etc, to catch the key as it arrives (it must come from somewhere).
You keep missing the "public / private key system" part. The decryption key is never seen on the server. Never.
(which is a highly unlikely situation; I would rather you used a VPN), then you should enable SSL in MySQL which will encrypt everything between the web app and database
Agreed, VPN or an ssl tunnel would be much better than exposing mysql to the world.
If I did have a fit of temporary insanity and decide to store credit card details, I would still not encrypt them in the database.
Then you'd be in violation of Visa CISP, among others, and you'd be subject to a fine as well as possible loss of ability to process credit card transactions.