gdrivesql is a module running on top of golang language that enable developers/devOps to automate daily process to backup both filesystems and databases(.sql) into Google Drive without having to do it manually. All these are done by executing golang binary file(executable file).
Since this package using Google Drive as a place to store backups files, its required few steps for authorization for the first time. For the subsequent execution, authorization no longer needed.
Until now, only MYSQL and postgreSQL are supported. For the backup, it doesn't has to backup both databases and filesystems at the same time. You may choose either one or both.
View demo below to get the whole picture and overview how things works.
Getting client credentials and placed directly(credentials.json) into credentials folder of gdrivesql. You may defined your own folder to store credentials. Look section gdriveauth, gdrivesql for more details how to configure.
Head over to Google Drive Api Quickstart to get client credential file.
Get consent link by using gdriveauth executable to paste into browser URL
Get authorization key
Paste authorization key back to terminal. This time, file token.json automatically created for you and placed under credentials directory
If you provide custom credentials folder path, script will automatically store inside path provided instead of the default path
This module require Google Drive ID to upload backup files.
Use gdrivesql executable file to create a backup file and upload into google drive's folder
Check google drive's folder for uploaded files
This module provide 3 config files:
- Database config : List of database's name to export into .sql
- Filesystem config : List of absolute filesystem's(project) path that need to archive to backup into google drive
- Google drive config : Defined which filesystem and databases files(from above config) that able to upload into google drive
- Mail config : Defined email credentials to send mail notification after successful backup into google drive
---
# List of connection's name
connections:
- name: "connection_a"
driver: "mysql"
host: "127.0.0.1"
port: "3306"
user: "root"
password:
- name: "connection_b"
driver: "mysql"
host: "external_ip_address"
port: "3306"
user: "root"
password: "root@1234"
- name: "connection_c"
driver: "postgres"
host: "127.0.0.1"
port: "5432"
user: "postgres"
password:
# List of available database's name that need to export.
databases:
- connection: connection_a # Will use `connection_a`
list:
- DatabaseA
- DatabaseB
- connection: connection_c # will use `connection_c`
list:
- DatabaseCFrom the above config, this module will export DatabaseA.sql, DatabaseB.sql and DatabaseC.sql into temp folder.
** Notes for postgreSQL, you may need to create .pgpass file under home directory. On windows the file is named %APPDATA%\postgresql\pgpass.conf while on linux/unix should be ~/.pgpass.
This file should contain lines of the following format:
hostname:port:database:username:password
On Unix systems, the permissions on a password file must disallow any access to world or group; achieve this by a command such as chmod 0600 ~/.pgpass. If the permissions are less strict than this, the file will be ignored. On Microsoft Windows, it is assumed that the file is stored in a directory that is secure, so no special permissions check is made.
---
# List of filesystem path's name.
path: # Absolute path to filesystem that need to be archive
- "/Users/metallurgical/projects/automate" # "/path/to/the/folder/to/archive"From the above config, this module will compress and create automate.tar.gz into temp folder.
---
# List of available database's name.
config:
- folder: "automate" # Folder name to create inside temp folder to store backup files
filesystem: true # Set to true to backup and upload along with
driveid: "Google Drive ID" # Backup archive will be stored under this google drive's folder
files: # Archived and database name that will stored under "automate" folder. E.g: automate.tar.gz and dbname.sql
- "automate" # Filesystem: this name must be matched with folder defined inside filesystem.yaml(if exist)
- "DatabaseA" # Database name defined inside database.yaml
- "DatabaseB" # Database name defined inside database.yamlFrom the above config, this module will move file automate.tar.gz, DatabaseA.sql, DatabaseB.sql into automate(depend on folder option) folder and finally compress those folder into automate.tar.gz.
gdrivesql module will upload automate.tar.gz into google drive's folder(depend on driveid option) with the name backup.tar.gz.
---
# Mail configurations
from: "from@example.com"
to: "to@example.com"
host: "smtp.mailtrap.io"
port: "2525"
username: "username"
password: "password"
encryption:Simple as it is, script will sending notification mail after successfull upload into google drive along with Download Link and Parent Folder's link. To enable this option, provide option -m 1 to gdrivesql command. See gdrivesql section for more details.
Make sure you install golang in your server. Clone this repository somewhere. Head over into cloned repository and run below command to build:
$ cd gdrivesql
Build gdriveauth to get token.json. This command must be execute first before able to upload into google drive(required to run one time only)
$ go build cmd/gdriveauth/gdriveauth.go
$ ./gdriveauth
Build gdrivesql to do start backup filesystem and database
$ go build cmd/gdrivesql/gdrivesql.go
$ ./gdrivesql
Build gdriveclean to remove all leftovers files inside temp folder
$ go build cmd/gdriveclean/gdriveclean.go
$ ./gdriveclean
- Credentials folder path: Provide option
-cto set custom credentials path that holds filescredentials.jsonandtoken.json
Note: This option is compulsory if run the command outside of gdrivesql root folder. After run this command, script will store token.json into specified path.
E.g:
$ gdriveauth -c path/to/credentials/folder
- Configs folder path : Provide option
-confto set custom configs folder path that holds filesdatabases.yaml,gdrive.yamlandfilesystems.yaml - Temp folder path : Provide option
-tto set custom temporary folder path that holds compressed file - Credentials folder path: Provide option
-cto set custom credentials path that holds filescredentials.jsonandtoken.json. Script will looks the filetoken.jsoninside this folder to execute gdrive api thingy - Send email : Sending an email to notify owner after successfully backup files into google drive. Provide option
-mwith value1to enable mail notification.
Note: This option is compulsory if run the command outside of gdrivesql root folder except send email option which is optional.
E.g:
$ gdrivesql -conf path/to/folder/configs -t path/to/folder/temp -c path/to/folder/credentials -m 1
- Temp folder path: Provide option
-tto set custom temporary folder path that holds compressed file. Script will looks into this folder and remove generated files
Note: This option is compulsory if run the command outside of gdrivesql root folder.
E.g:
$ gdriveclean -t path/to/folder/temp
You may simplified tedious tasks automatically by run this scripts using crontab instead of execute manually in CLI.
Example usage with crotab
File : /etc/crontab
# Backrup script: upload into google drive
# Run script every 5th, 12th, 19th and 26th of a month at midnight
00 00 5,12,19,26 * * root gdrivesql -conf /path/to/gdrivesql/configs -t /path/to/gdrivesql/temp -c /path/to/gdrivesql/credentials > /path/to/gdrivesql/dummy.log 2>&1
# Cleanup script: delete all unused(generetad) files inside temp folder
# Run script every 6th, 13th, 20th and 27th of a month at midnight
00 00 6,13,20,27 * * root gdriveclean -t /path/to/gdrivesql/temp
# OR
00 00 6,13,20,27 * * root cd /path/to/gdrivesql/temp && find . ! -name .gitignore -delete
Copy executable code into bin folder to make it global access:
# gdrivesql
$ cp /path/to/gdrivesql/gdrivesql-linux-386 /usr/local/bin/gdrivesql # linux 386
$ cp /path/to/gdrivesql/gdrivesql-386 /usr/local/bin/gdrivesql # apple darwin
# gdriveauth
$ cp /path/to/gdrivesql/gdriveauth-linux-386 /usr/local/bin/gdriveauth # linux 386
$ cp /path/to/gdrivesql/gdriveauth-386 /usr/local/bin/gdriveauth # apple darwin
# gdriveclean
$ cp /path/to/gdrivesql/gdriveclean-linux-386 /usr/local/bin/gdriveclean # linux 386
$ cp /path/to/gdrivesql/gdriveclean-386 /usr/local/bin/gdriveclean # apple darwin
This module assume the script will executed inside gdrivesql root directory, then no need to specify the option for credentials, configs and temp path. If run outside gdrivesql root directory(copy over executable files into /usr/local/bin), you may need to pass in the options mentioned above. Example of run outside could be if you like to automate call the scripts from crontab.






