I use mysqldump and tar.
But the devil is in the details, and it really depends on the specifics of your system.
DO make sure you know your encoding: this should be (but isn't always) consistent between your CMS software (e.g. Expression Engine, WordPress, Joomla, whatever), your framework (e.g. PHP), your database (e.g. mysql), and this includes, the tables' individual collation settings, AND the settings of the client, (in this case, mysqldump; to be sure, use the command-line option --default-character-set=utf8, or whatever your encoding is). If your data is encoded one way, and you backup to another encoding, and restore that backup, your data may be subtly corrupted. Everything from; funny characters showing up for double-quotes, hyphens, foreign characters, umlauts and accents, etc - to the worst-case, text strings in serialized fields come back with bad lengths, causing php's unserialize() to fail.
A quicker way of saying all this: TEST your backups! Frequently!