Meza/Importing data
Importing data from another wiki can be done in several ways.
Defining existing server to pull SQL and uploads from
[edit]secret.yml
[edit]The following lines are required in secret.yml. See Meza/Secret config for more info.
backups_server_alt_source: addr: example.com remote_user: src-meza-ansible uploads_dir_path: /opt/data-meza/uploads/<id> backups_server_db_dump: addr: example.com remote_user: src-meza-ansible mysql_user: backupuser mysql_pass: "some123long456password7890"
hosts file
[edit]The following lines are required in your hosts file. See Meza/Secret config for more info.
[db-src] example.com alt_remote_user=src-meza-ansible [backup-src] example.com alt_remote_user=src-meza-ansible [exclude-all] example.com
Setup backup server
[edit]- Create user
src-meza-ansible
on backup server. Unfortunately, with current Meza, this user has to be a passwordless sudoer. - Create MySQL/MariaDB user
backupuser
with rights SELECT, INSERT, UPDATE, LOCK TABLES, SHOW DATABASES, SHOW VIEW. If the backup server is a Meza server, this can be achieved by adding the following to themysql_users
section ofsecret.yml
:
mysql_users: - name: "backupuser" host: "%" password: "some123long456password7890" priv: "*.*:SELECT,INSERT,UPDATE,LOCK TABLES,SHOW DATABASES,SHOW VIEW"
Run meza deploy
with --overwrite
[edit]Running sudo meza deploy <environment> --overwrite
will overwrite all wikis with their corresponding backups. This is highly destructive!
Manually position files for import
[edit]When running sudo meza deploy <environment> --overwrite
Meza will try to pull data from a backup source. The simplest backup source is the one that is generated when you do sudo meza backup <environment>
. This generates the required backup directories for your existing wikis. Navigate to /opt/data-meza/backups/<environment>
to see the structure. It looks something like:
/opt/data-meza/backups/<environment> demo 20180414122334_wiki.sql 20180413122334_wiki.sql 20180412122334_wiki.sql uploads/ anotherwiki ... anotherwiki2 ...
If you run sudo meza backup <environment>
then delete these SQL files, upload your own SQL file, and replace the uploads/
directory with your desired uploads, running sudo meza deploy <environment> --overwrite
will import that data into the wiki. Note that all wikis will be overwritten with whatever they have as backups, so be careful how you use this!
Pushing database and uploads rather than pulling
[edit]Available since Meza 31.5.0
If you have a production server, and you want development servers to periodically synchronize with data from production, the "pull" method above works. However, if your security policy does not allow for development servers to SSH into production, then instead you can setup a push-from-production as outlined below. This (a) doesn't require any servers to log into production, (b) requires production to log into other servers with non-sudo access, and (c) this allows for pushing upload files directly to the uploads/
directory of the destination server rather than into the backups directory (removing duplicated directories which could be very large). For the purposes of this manual we'll assume you want to push from Prod to Dev, but any server could be setup to push to another server.
On Prod, configure secret config as follows:
backups_server_db_push:
addr: example.com # domain or IP address to push to
remote_user: meza-push-user # username on remote server to login to
sql_files_path: /opt/data-meza/backups/vagrant/<id>/ # where to put SQL files
backups_server_uploads_push:
addr: example.com # domain or IP address to push to
remote_user: meza-push-user # must be the same username as above
uploads_dir_path: /opt/data-meza/uploads/<id> # where to put uploads
Here you define what servers to push data to, what user to push data with, and the exact location in the file system to push it to. In the paths listed, <id>
will be replaced with each wiki's ID. While you're on Prod, copy the meza-ansible user's public SSH key for later user (i.e. copy the output of sudo cat /opt/conf-meza/users/meza-ansible/.ssh/id_rsa.pub
).
Then on Dev do the following to create meza-push-user
:
# Add meza-push-user and put its home directory within meza config to avoid
# getting in the way of "real" users.
sudo useradd -m -d /opt/conf-meza/users/meza-push-user meza-push-user
# Add the meza-backup and apache groups to meza-push-user
sudo usermod -a -G meza-backups meza-push-user
sudo usermod -a -G apache meza-push-user
# become meza-push-user and setup SSH
sudo su meza-push-user
cd ~
mkdir .ssh
chmod 700 .ssh
# Edit .ssh/authorized_keys and add meza-ansible's public key from your Prod
# server (id_rsa.pub you copied earlier)
vim .ssh/authorized_keys
# Then set permissions on authorized keys:
chmod 644 .ssh/authorized_keys
Now test that meza-ansible
on Prod can ssh into Dev as meza-push-user: sudo su meza-ansible
then ssh meza-push-user@your.Dev.server.address
(you'll have to accept host key).
If you now run meza push-backup <your Prod environment>
on Prod it will push data from Prod to Dev. In a later version of Meza a crontime
field will be added allowing configuration of push-backup
on regular intervals.