* Version installed was v2.1.1
* **Server** is server.example.com (64-bit CentOS 6.2)
* **Client** is client.example.com (64-bit CentOS 5.8)
Preparing the server
--------------------
yum -y install mysql MySQL-zrm
Make a copy of, and start editing the ZRM config file.
cp /etc/mysql-zrm/mysql-zrm.conf{,.original}
### Global Params
I edit `/etc/mysql-zrm/mysql-zrm.conf` to change the default backup
destination.
destination=/backups/databases
encrypt-plugin="/usr/share/mysql-zrm/plugins/encrypt.pl"
decrypt-option="-d"
mailto="support@example.com"
mail-policy=always
html-report-directory=/var/www/html/reports/
html-reports=backup-status-info,backup-method-info,backup-performance-info,backup-retention-info
There are [plenty of other options
available](http://wiki.zmanda.com/index.php/How_do_I_configure_MySQL_ZRM).
### Creating a client backupset
Create a directory with whatever you want to call your backupset:
mkdir /etc/mysql-zrm/backupset-client.example.com
Now create the client config file
vim /etc/mysql-zrm/backupset-client.example.com/mysql-zrm.conf
I'm going to try encrypted backups. You can create a passphrase file
called `.passphrase` file in the backupset directory or define your own
name for it. I'm trying the latter option.
I added this for basic trial run:
# MySQL connection params
host=client.example.com
user=backupser
password=Pas5a7hasd
# Host connection params and options
copy-plugin="/usr/share/mysql-zrm/plugins/ssh-copy.pl"
# Backup params
backup-mode=logical
compress=1
encrypt=1
passfile=/etc/mysql-zrm/backupset-client.example.com/passphrase
# Retention policy
retention-policy="10D"
Preparing the Client
--------------------
### Backup User
Make sure that your backup user [has the appropriate
privileges](http://wiki.zmanda.com/index.php/Do_I_need_to_make_changes_to_MySQL_database_configuration%3F#MySQL_backup_user).
We'll be using "support":
```sql
GRANT LOCK TABLES, SELECT, RELOAD, SUPER
ON *.* TO 'backupuser'@'backupserver.tld'
IDENTIFIED BY 'pgubSfHpm';
```
### Keyless access
ZRM will use the "mysql" user to connect. Therefore, we need to set up
keyless SSH access. On CentOS, the mysql user's homedir is `/var/lib/mysql`. So:
cd /var/lib/mysql
mkdir .ssh
chmod 700 .ssh
chown mysql:mysql .ssh
cd .ssh
touch authorized_keys
chmod 600 authorized_keys
chown mysql:mysql authorized_keys
echo "ssh-rsa {your public key} root@server.example.com" >> authorized_keys
Now place the key of the backup server in the authorized keys file and
test a connection:
ssh mysql@client.example.com
If you log in, you're good to go! You can alternately create another
user if you don't want to muck with the MySQL user.
Testing
-------
With the server and client configured, try this on the server.
mysql-zrm-scheduler --now --backup-set backupset-client.example.com --backup-level 0
If all goes well, you should see a timestamped backup folder in the
backup destination (`/backups/databases` in our case) with a compressed
file called `backup-data`
### Extracting the compressed backup
**Don't use gzip!** Rather:
mysql-zrm --action extract-backup --source-directory /backups/databases/backupset-client.example.com/20061012232713
If your backup is encrypted, decrypt it first:
gpg --decrypt --output test.gz /backups/databases/backupset-client.example.com/20061012232713/backup-data
It's always advisable to use the ZRM restore feature first.
### Generating reports
mysql-zrm-reporter
# To see a particular backup set
mysql-zrm-reporter --where backup-set=backupset-client.example.com
# Generate HTML reports (output is in backup destination dir)
mysql-zrm-reporter --destination /backups/databases --type html --output report.html
There are a [a lot of other options
available](http://wiki.zmanda.com/index.php/Mysql-zrm-reporter). I
wanted global reports and set this in my crontab:
30 4 * * * cd /var/www/html/zrm && /usr/bin/mysql-zrm-reporter --destination /backups/databases/ --type html --output index.html --show backup-status-info,backup-method-info,backup-performance-info,backup-retention-info >> /dev/null 2>&1
### Validation
mysql-zrm --action verify-backup --backup-set backupset-client.example.com
### [Scheduling](http://wiki.zmanda.com/index.php/Mysql-zrm-scheduler)
# Schedule daily at 1:30PM
mysql-zrm-scheduler --add --interval daily --start 13:30 --backup-set backupset-client.example.com
# View all scheduled jobs
mysql-zrm-scheduler --query
# Remove the scheduled job
mysql-zrm-scheduler --delete -interval daily --start 13:30 --backup-set backupset-client.example.com
This is added to crontab.
### Rotating Backups
Set the retention policy for a given backup set and run this against
your backup destination:
mysql-zrm --action purge --destination /backups/databases/
See your crontab. All purge jobs run at 4:00AM (granularity is one day.)
Plugins
-------
These are installed in `/usr/share/mysql-zrm/plugins`. Some good stuff!
Errors and Miscellaneous
------------------------
### Ubuntu
The MySQL user's homedir on Ubuntu is `/nonexistent`. While this makes
sense, you may want to change this for keyless access.
### mysql-bin.00000x: Cannot stat: No such file or directory
Make sure that this is uncommented in your global or client configs:
mysql-binlog-path="/var/log/mysql"
Make sure that the `log-bin` directive in your client config is set.
### ERROR 1381 (HY000) at line 1: You are not using binary logging
Edit `my.cnf` to add this line:
log-bin=/var/log/mysql/mysql-bin.log
Make sure that the folder exists and has the right permissions:
mkdir /var/log/mysql
chown mysql:mysql /var/log/mysql
service mysqld restart
### Lost connection to MySQL server at 'reading initial communication packet', system error: 111
This is because:
* Your firewall might be blocking connections
* The MySQL user specified doesn't have the right privileges (e.g.
does `backupuser@backupserver.tld` have privileges? Or did you
set `backupser@localhost`?)
* The `bindaddress` in `my.cnf` must be set to your target's IP and
*not* `127.0.0.1`
* The `skip-networking` option is set in `my.cnf`
Sources
-------
* [MySQL ZRM Users Manual](http://wiki.zmanda.com/index.php/Zmanda_Recovery_Manager_for_MySQL_Users_Manual)