This example demonstrates how to use Bytebase API to configure Bytebase Instance.
You have to call Bytebase API with service account.
export bytebase_url=http://localhost:8080
export bytebase_account=api-sample@service.bytebase.com
export bytebase_password=bbs_bQlG4Lc1kRt9fQNa1rNf
bytebase_token=$(curl -v ${bytebase_url}/v1/auth/login \
--data-raw '{"email":"'${bytebase_account}'","password":"'${bytebase_password}'","web":true}' \
--compressed 2>&1 | grep token | grep -o 'access-token=[^;]*;' | grep -o '[^;]*' | sed 's/access-token=//g; s/;//g')
echo $bytebase_tokencurl --request POST "${bytebase_url}/v1/instances?instance_id=test1" \
--header 'Authorization: Bearer '${bytebase_token} \
--data @data/instance/create-instance.jsonThe update-instance.json file contains all configurable parameters.
curl --request PATCH "${bytebase_url}/v1/instances/test1" \
--header 'Authorization: Bearer '${bytebase_token} \
--data @data/instance/update-instance.jsonData sources are uniquely identified by data source ID(the value of "id" within "dataSource").
Note: Only READ_ONLY data source can be added.
In case you hadn't had a MySQL server before, you may follow this doc to configure a MySQL server from scratch with brew.
curl --request POST "${bytebase_url}/v1/instances/test1:addDataSource" \
--header 'Authorization: Bearer '${bytebase_token} \
--data @data/data-source/add-data-source.jsonThe update-data-source.json file includes all configurable parameters, including "validateOnly" which tests the data source connection, and updateMask as the list of fields to update. By default, "validateOnly" is set to false when adding new data sources to prevent overwriting existing ones.
curl --request PATCH "${bytebase_url}/v1/instances/test1:updateDataSource" \
--header 'Authorization: Bearer '${bytebase_token} \
--data @data/data-source/update-data-source.jsonOnly READ_ONLY data source can be removed.
curl --request POST "${bytebase_url}/v1/instances/test1:removeDataSource" \
--header 'Authorization: Bearer '${bytebase_token} \
--data '{
"dataSource": {
"id": "A1B2C3D4-E5F6-7890-1234-56789ABCDEF0",
"type": "READ_ONLY"
}
}'This command displays the names of all databases within the specified instance in your terminal. If no database exists, it will create a default database named employee.
curl --request POST "${bytebase_url}/v1/instances/test1:databases" \
--header 'Authorization: Bearer '${bytebase_token} \
--data @data/databases.jsonFull sync updates all databases in the instance, whereas setting "enableFullSync" to false only refreshes instance metadata (e.g., the database list) and newly discovered instances.
curl --request POST "${bytebase_url}/v1/instances/test1:sync" \
--header 'Authorization: Bearer '${bytebase_token} \
--data '{
"name": "instances/test1",
"enableFullSync": true
}'The "request" data in batch-sync.json defines the instances to sync, with a maximum batch limit of 1,000 instances.
curl --request POST "${bytebase_url}/v1/instances:batchSync" \
--header 'Authorization: Bearer '${bytebase_token} \
--data @data/batch-sync.jsonTo use this feature, first enable slow query logs in your database.
Next, navigate to the desired Project, go to Database -> Slow Queries, and click Configure in the upper right corner. Toggle on the Report switch for the target instance, such as the newly created MySQL instance via API.
Once configured, you can sync slow queries at any time via the API.
curl --request POST "${bytebase_url}/v1/instances/test1:syncSlowQueries" \
--header 'Authorization: Bearer '${bytebase_token} \
--data '{
"parent": "instance/test-sample-instance"
}'curl --request GET ${bytebase_url}/v1/instances \
--header 'Authorization: Bearer '${bytebase_token}curl --request GET ${bytebase_url}/v1/instances/test1 \
--header 'Authorization: Bearer '${bytebase_token}All databases should be transferred to the unassigned project before deleting the instance.
curl --request DELETE ${bytebase_url}/v1/instances/test1 \
--header 'Authorization: Bearer '${bytebase_token}Operates on deleted resources only. Needs calling the DELETE API first.
curl --request POST "${bytebase_url}/v1/instances/test1:undelete" \
--header 'Authorization: Bearer '${bytebase_token} \
--data '{
"name": "instance/test1"
}'