LoginSignup
0
0

TiDBを使ってみる その1

Last updated at Posted at 2023-12-10

その1 この記事
その2 https://qiita.com/ssugimoto/items/17a0609d8990ef85e5f1

サーバーレスのRDB TiDB

TiDBの特徴で気になった点を少しだけ

  • DBaasの1つ、昨今mysqlやpostgresのDBaasは増えており、RDBのサーバーレスやデータウェアハウスの用途
  • NewSQLの時代、幕開け
    • RDB + NoSQLそんないいところ取りできるのか?
  • Amazon DynamoDB + Amazon Redshift -> TiDBというデータベース移行事例が上がってるのを見るとそれなりに性能も良いんだろうと想像してしまう

TiDBの種類、提供されるもの

ツール類

Docker

TiDB TiDB Cloud(TiDB クラウド版)

ここからは クラウド上にあるTiDBの利用についてのいくつかの情報です

mysql-clinetとして接続

  • Windowsから使う場合では手間かもしれない
  • mysql-clinetが動かせる環境からTLS接続する

CLIとして接続

  • mysqlコマンドが使える環境ならばコマンドラインで接続、SQL実行が可能
    • mysql docker コンテナを利用できる

UIとして接続

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の画面が表示される
FireShot Capture 065 - TiDB Cloud - tidbcloud.com.png

2-2. 画面右上の「Connect」ボタンを押す
FireShot Capture 066 - TiDB Cloud - tidbcloud.com.png

  • 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の拡張機能から使う

A5:SQL Mk-2から接続を試してみたのですが、接続できず

A5-mysql-connect-error-alert40.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0