その1 この記事
その2 https://qiita.com/ssugimoto/items/17a0609d8990ef85e5f1
サーバーレスのRDB TiDB
- 知ったきっかけは、Serverless days 2023(https://tokyo.serverlessdays.io/)
-
TiDB
- GitHub TiDB
- ロードマップ
- TiDB Storage
- 行志向のOLTP、列志向のOLAP
TiDBの特徴で気になった点を少しだけ
- DBaasの1つ、昨今mysqlやpostgresのDBaasは増えており、RDBのサーバーレスやデータウェアハウスの用途
- NewSQLの時代、幕開け
- RDB + NoSQLそんないいところ取りできるのか?
-
Amazon DynamoDB + Amazon Redshift
-> TiDBというデータベース移行事例が上がってるのを見るとそれなりに性能も良いんだろうと想像してしまう
TiDBの種類、提供されるもの
- TiDB cluster
- ローカル等でデータベースクラスターそのもの動かす , https://docs.pingcap.com/tidb/stable/quick-start-with-tidb, https://docs.pingcap.com/tidb/v5.3/quick-start-with-tidb
- Mac, Linuxのみサポート?
ツール類
- https://docs.pingcap.com/tidb/stable/download-ecosystem-tools
- k8sへのデプロイ
- TiDBにCSVでのインポート
- MySQL、Auroraからインポート
- MySQL、Auroraからマイグレーション
- TiDBバックアップ
- 他
Docker
- 単純なローカル環境でdockerコンテナとして動かす方法はあるのか?
- docker hub にコンテナイメージはある https://hub.docker.com/r/pingcap/tidb
- GitHub https://github.com/pingcap/tidb-docker-compose
- docker compose用のyamlもある https://github.com/pingcap/tidb-docker-compose/blob/master/docker-compose.yml
- 従来のmysqlのようにコンテナ1つではない(ホストのメモリやCPU不足が懸念)
TiDB TiDB Cloud(TiDB クラウド版)
ここからは クラウド上にあるTiDBの利用についてのいくつかの情報です
mysql-clinetとして接続
- Windowsから使う場合では手間かもしれない
- mysql-clinetが動かせる環境からTLS接続する
CLIとして接続
- mysqlコマンドが使える環境ならばコマンドラインで接続、SQL実行が可能
- mysql docker コンテナを利用できる
UIとして接続
- VS Codeから https://docs.pingcap.com/tidb/stable/dev-guide-gui-vscode-sqltools
- MySQL Workbench https://docs.pingcap.com/tidb/stable/dev-guide-gui-mysql-workbench
- DataGrip、DBeaver、VS Code SQLToolsなど、TiDBを公式にサポートしている他のGUIツールを使用することを推奨
- CA証明書が必要
- TiDBのWeb画面で Cluster選択 -> Overview -> 画面右上「Connetct」ボタンを押すと
Download the CA cert for server certificate verification and replace <CA_PATH> with your local path.
で「CA cert」リンクを押すとpemファイルをダウンロードできる
TiDBクラウドへのmysql-clientで接続
-
手っ取り早くmysql データベースが動くdocker イメージをコンテナ起動して使う。 mysqlクライアントだけ使いたいけど、それだけ入ったイメージがすぐに見つからず。
-
データベースのローカルは(使わないので)値が入っていれば良いです
compose.yml
version: '3.8'
services:
mysql8-db:
image: mysql:8.0.34
container_name: tidb-mysql-clinet-8.0.34
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
networks:
- default
volumes:
- ./data/database:/var/lib/mysql
# restart: always
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: test
MYSQL_USER: user1
MYSQL_PASSWORD: user1
ports:
- 13306:3306
- localhostからのポートを3306にすると、他のmysqlのコンテナと衝突するかもしれないので、コンテナ内のポートとホストのポート番号のうち、ホストのポート番号を変える
"<Host IP>:<Host Port>:<Container Port>"
例
ホストのポートを13306、コンテナ内のポートを3306
- 13306:3306
1. mysqlコンテナを起動
cd compose.ymlを置いた場所
docker compose up -d
- Operating SystemでコンテナのOSを確認
mysql8の場合では
# cat /etc/*-release
Oracle Linux Server release 8.8
NAME="Oracle Linux Server"
VERSION="8.8"
ID="ol"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="8.8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Oracle Linux Server 8.8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:8:8:server"
HOME_URL="https://linux.oracle.com/"
BUG_REPORT_URL="https://github.com/oracle/oracle-linux"
ORACLE_BUGZILLA_PRODUCT="Oracle Linux 8"
ORACLE_BUGZILLA_PRODUCT_VERSION=8.8
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=8.8
Red Hat Enterprise Linux release 8.8 (Ootpa)
Oracle Linux Server release 8.8
2. TiDB Cloudでconnect方法を確認する
2-1. TiDBクラウドの画面で、Clusterを選ぶと、Overviewの画面が表示される
- CentOS/RedHat系をプルダウンで選ぶ(OSでssl-caの証明書の場所が異なってくる)
- 次に、Connect With のプルダウンで、 MySQL CLI をエラー選ぶと myslのcliを使った接続文字列が取得できる
mysql --comments -u 'XXXX.root' -h xxxxtidbcloud.com -P 4000 -D 'test' --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/pki/tls/certs/ca-bundle.crt -p'<PASSWORD>'
値 | 説明 | -- |
---|---|---|
XXXX.root | 自分自身のものに、Web画面では値が入った状態になっている | |
xxxxtidbcloud.com | 自分自身のものに、Web画面では値が入った状態になっている | |
'<PASSWORD>' | DB接続のパスワード、-pの後はスペース等はなく、そのまま続けて入力する |
3. mysqlコマンドを実行
mysql: [Warning] Using a password on the command line interface can be insecure.
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1230978
Server version: 5.7.25-TiDB-Serverless TiDB Server (Apache License 2.0) Community Edition, MySQL 5.7 compatible
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
3-1. データベースのバージョンを表示
mysql> select version();
+-------------------------------+
| version() |
+-------------------------------+
| 5.7.25-TiDB-v6.6.0-serverless |
+-------------------------------+
1 row in set (0.00 sec)
3-2. データベース一覧
mysql> show databases;
+---------------------+
| Database |
+---------------------+
| INFORMATION_SCHEMA |
| PERFORMANCE_SCHEMA |
| fortune500 |
| game |
| lightning_task_info |
| mysql |
| test |
+---------------------+
8 rows in set (0.01 sec)
3-3. 接続先データベース変更
mysql> use game;
Database changed
3-4. データベース内のテーブル一覧
mysql> SHOW TABLES;
+--------------------+
| Tables_in_game |
+--------------------+
| all_audio_language |
| category |
| company |
| developer |
| game_category |
| game_genre |
| game_tag |
| games |
| genre |
| language |
| publisher |
| supported_language |
| tag |
+--------------------+
13 rows in set (0.99 sec)
3-5. select 等の実行
mysql> select count(1) from company;
+----------+
| count(1) |
+----------+
| 48276 |
+----------+
1 row in set (0.02 sec)
mysql> desc company;
+--------------+--------------+------+------+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+------+---------+----------------+
| company_id | int(11) | NO | PRI | NULL | auto_increment |
| company_name | varchar(256) | YES | | NULL | |
+--------------+--------------+------+------+---------+----------------+
2 rows in set (0.01 sec)
mysql>
レスポンスさくさく動いて比較的高速かなと思う
VSCodeの拡張機能から使う
-
Windows環境では、VSCodeからの接続が最も手軽と思われる
-- TiDBでの説明 - https://docs.pingcap.com/tidb/stable/dev-guide-gui-vscode-sqltools
-- 使用するExtension、https://marketplace.visualstudio.com/items?itemName=mtxr.sqltools-driver-mysql
-- CA証明書は空(指定しない)