DevOps: Database Change Management with TiDB
A series of articles about DevOps: Database Change Management with TiDB
- DevOps: Database Change Management with TiDB (this one)
- DevOps: Database Change Management with TiDB and GitHub
TiDB is an open-source NewSQL database that supports Hybrid Transactional and Analytical Processing (HTAP) workloads. It is MySQL compatible and can provide horizontal scalability, strong consistency, and high availability.
This tutorial will guide you step-by-step to set up database change management for TiDB in Bytebase. With Bytebase, a team can have a formalized review and rollout process to make TiDB schema change and data change.
Bytebase provides a GUI for teams to perform database changes and retain the full migration history. You can use Bytebase free version to finish the tutorial.
There is also a bonus section about drift detection for those advanced users if needed.
Before you start this tutorial, make sure:
Step 1 - Start Bytebase in Docker
Make sure your docker daemon is running, and start the Bytebase docker container by typing the following command in the terminal.
Bytebase is running successfully in Docker, and you can visit it via
localhost:5678in your browser. Register the first admin account which will be granted
Step 2 - Add a TiDB cluster in Bytebase
In Bytebase, an Instance could be your on-premises MySQL instance, an AWS RDS instance etc, in this tutorial, a TiDB account.
localhost:5678and login as
Click Add Instance.
Add a TiDB instance. You need to pay attention to some fields:
- Environment: choose
Test, if you choose
Prod, you will need approval for all future change requests. In this tutorial, let's try to keep it simple. (However, it’s all configurable later.)
- Account name / Port: host.docker.internal / 4000
- Username and password: root / (leave it empty)
Step 3 - Create a Project
In Bytebase, Project is the container to group logically related Databases, Issues and Users together, which is similar to the project concept in other dev tools such as Jira, GitLab. So before you deal with the database, a project must be created.
After the instance is created, click Projects on the top bar.
Click New Project to create a new project
TestTiDB, key is
TT, mode is
standard. Click Create.
Step 4 - Create a database in TiDB via Bytebase
In Bytebase, a Database is the one created by
CREATE DATABASE xxx. A database always belongs to a single Project. Issue represents a specific collaboration activity between Developer and DBA such as creating a database, altering a schema. It's similar to the issue concept in other issue management tools.
After the project is created, go to the project and click New DB.
Fill the form with Name -
demo, Environment -
Test, and Instance -
TiDB instance. Click Create.
Bytebase will create an issue “CREATE DATABASE ….” automatically. Because it’s for the
Testenvironment, the issue will run without waiting for your approval by default. Click Resolve, and the issue is Done. The database is created.
Go back to the home page by clicking Home on the left sidebar. If it’s the first time you use Bytebase, it’ll show a celebration. On the home page, you can see the project, the database, and the issue you just resolved.
Step 5 - Create a table in TiDB via Bytebase
In Step 4, you actually created an issue in UI workflow and then executed it. Let’s make it more explicit.
- Go to project
TestTiDB, and click Alter Schema.
demoand click Next.
- Input title, SQL, and Assignee, and click Create.
Bytebase will do some basic checks and then execute the SQL. Since it’s for
Testenvironment, the issue is automatically approved by default. Click Resolve issue.
The issue status will become Done.
On the issue page, click view migration. You will see diff for each migration.
You can also go to Migration History under the project to view the full history. Or go into a specific database to view its history.
Bonus Section - Schema Drift Detection
To follow this section, you need to have Team Plan or Enterprise Plan (you can start 14 days trial directly in the product without credit card).
Now you can see the full migration history of database
demo. However, what is Establish new baseline? When should it be used?
By adopting Bytebase, we expect teams to use Bytebase exclusively for all schema changes. Meanwhile, if someone has made TiDB schema change out side of Bytebase, obviously Bytebase won’t know it. And because Bytebase has recorded its own copy of schema, when Bytebase compares that with the live schema having that out-of-band schema change, it will notice a discrepancy and surface a schema drift anomaly. If that change is intended, then you should establish new baseline to reconcile the schema state again.
In this section, you’ll be guided through this process.
Go to the Terminal, and connect to TiDB. and add a COLUMN there. Make sure the new column is added.
Wait for 10 mins (as Bytebase does the check roughly every 10 mins). Go back to Bytebase, and you can find the Schema Drift on database
The Anomaly Center also surfaces the drift:
Click View diff, you will see the exact drift.
Use baseline to reconcile the schema state from the live database schema. Go to demo > Migration History and click Establish new baseline.
It will create an issue. Click Resolve to make it done.
Go back to demo or Anomaly Center, and you will find the Drift is gone.
Summary and Next
Now you have connected TiDB with Bytebase, and tried out the UI workflow to do schema change. Bytebase will record the full migration history for you. With Team or Enterprise Plan, you can even have schema drift detection.
In the next article, you’ll try out GitOps workflow, which will store your TiDB schema in GitHub and trigger the change upon committing the change to the repository, to bring your TiDB change workflow to the next level of Database DevOps - Database as Code.