MySQL 구성/관리등을 편리하게 해 주기 위해서 MySQL shell이 나왔는데, 주요 특징은 아래와 같습니다.

 

[특징]

1. Auto completion

2. APIs : javascript and python 

    1) X devApi  : api를 통해 json 및 rdbms 관리 

    2) AdminApi : innodb cluster 구성

3. Batch code execution

4. command history

5. global variables

    1) session

    2) db : schema

    3) dba : innodb cluster 구성/관리

    4) shell 

    5) util : load/dump등과 같은 유틸리티 함수

6. upgrade checker : mysql 8.0으로 upgrade가 가능한지 체크

 

[사용]

1. shell

mysqlsh --user root --host localhost --sql    # ssl : --ssl-mode=REQUIRED

or

mysqlsh --url root@localhost:33060/world --sql

 

Py> \option --persist history.autoSave = true

Py> shell.list_credentials()     # 기존 패스워드를 지울때  shell.delete_credentials(~~) 

 

 

 

2. py

mysql_con = mysqlx.get_session('root@localhost:33060', 'test');

print(mysql_conn)

or

mysql_class_conn = mysql.get_classic_session('root@localhost:3306', 'test');

print(mysql_class_conn)

 

#python 연결. (x devapi를 사용하는 것으로 33060 포트를 사용해야 함)

import mysqlx

m_s1 = mysqlx.get_session({'host' : 'localhost', 'port' : 33060, 'user' : 'root', 'password' : 'test'})

m_s2 = mysqlx.get_session('root:test@localhost:33060')

 

#python script 실행

mysqlsh --py -f test.py

 

#python script (test.py)

from mysqlsh import mysqlx

CREATE_TBL = """
CREATE TABLE `test`.`sensor_device` (
  `id` int auto_increment,
  `sensor_name` char(30) NOT NULL,
  `sensor_value` float DEFAULT NULL,
  `sensor_event` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `sensor_units` char(15) DEFAULT NULL,
  PRIMARY KEY `sensor_id` (`id`)
) ENGINE=InnoDB
"""
COLUMNS = ['sensor_name', 'sensor_value', 'sensor_units']

my_session = mysqlx.get_session('root:test@localhost:33060')

my_session.drop_schema('test')

my_db = my_session.create_schema('test')

sql_res = my_session.sql(CREATE_TBL).execute()

my_tbl = my_db.get_table('sensor_device')

my_tbl.insert(COLUMNS).values('place1', 32.4, 'Celsius').execute()

my_tbl.update().set('sensor_units', 'degree').where('sensor_value LIKE 32.4').execute()

my_res = my_tbl.select(COLUMNS).execute()

for row in my_res.fetch_all():
    print row
my_tbl.delete().where('sensor_value > 30').execute()

'RDB > MySQL' 카테고리의 다른 글

MySQL Performance 스키마  (0) 2023.01.27
Unused indexes 확인  (0) 2022.12.30
MySQL and Python 코드  (0) 2022.12.12
mysql download  (0) 2022.12.12
mysql rebuild index  (0) 2022.12.05

+ Recent posts