0
点赞
收藏
分享

微信扫一扫

MYSQL 8 从 MYSQL SHELL 开始

灵魂跑者 2022-06-10 阅读 58

MYSQL 8  从 MYSQL SHELL 开始_mysql

基于mysql 5.x  大家一般都是通过mysql 客户端来管理MYSQL ,但基于ORACLE 对于MYSQL 8 整体的规划,如果仅仅基于 mysql 客户端命令来操作MYSQL 8 则就有点,不与时俱进了,上个系列从performance_schema说起还差一篇关于MYSQL 索引的问题,然后就告一段落了,那么后面会围绕着 MYSQL SHELL ,以及MYSQL 锁,锁的探查,以及问题的解决产生一个新的系列     


基于MYSQL 8 后ORACLE 加大在MYSQL 各个方面的周边产品的研发,MYSQL SHELL 作为最新的控制和管理MYSQL 的一个方式的选择。

MYSQL 8  从 MYSQL SHELL 开始_mysql_02


首先我们的安装我们的MYSQL SHELL ,mysql shell 一个有意思的地方是他与我们的MYSQL 的版本同时发布,如果有MYSQL 8.027 就有MYSQL shell 8.027 这个版本。

​​https://downloads.mysql.com/archives/shell/​​


MYSQL 8  从 MYSQL SHELL 开始_mysql_03

1        直接运行 yum -y install mysql-shell-8.0.27-1.el7.x86_64.rpm

MYSQL 8  从 MYSQL SHELL 开始_数据库_04

2        在安装完毕后,直接运行 mysqlsh 就进入到对应的环境中

MYSQL 8  从 MYSQL SHELL 开始_数据库_05


3  常用的命令

在使用mysqlshell 的情况下我们一般使用的方式是在使用的命令前加斜杠 \

作为你要输入命令的开头。

\connect 的命令是在mysqlsh中连接你的mysql数据
\history 为展示你曾经执行的命令的回放
\js 切换到javascript  命令中

\py 切换到 python的状态中

\sql 切换到 SQL 语句的状态

mysqlshell 支持3中方式来管理你的MYSQL
\nowarnings \w  关闭警告
\q  为退出你的操作界面

\ reconnect 重新对数据库进行连接

\rehash    更新自动补齐名字的缓存

\status    打印连接信息

\use      连接数据库中的其他数据库

\warnings  打开告警


在进行操作之前我们可以创建一个用于操作的账号

create usertest@'%' identified by '1234.Com';

grant all on *.*to test@'%';

MYSQL 8  从 MYSQL SHELL 开始_sql_06

4  准备通过mysql shell 的方式连接MYSQL

 

mysqlsh --sql--uri=test@192.168.198.101 -P3306 -p1234.Com -D mysql –vertical

MYSQL 8  从 MYSQL SHELL 开始_sql_07


5  通过SQL方式连入到MYSQLSHELL 后我们通过第一个简单的命令就可以获得我们的MYSQL上的一些统计信息,\status


MYSQL 8  从 MYSQL SHELL 开始_sql_08


6  在MYSQL 中运行一些LINUX 系统的命令,这个功能对于时长需要在系统和数据库之间进行工作的人比较方便

\system  linux 命令


\system ls /data

MYSQL 8  从 MYSQL SHELL 开始_mysql_09


7连接的方式的不同,针对MYSQL SHELL 连接MYSQL的不同主要在于MYSQLSHELL 提供了更多的功能,如PYTHON JAVASCRIPT 等,这样的连接的方式是使用 X  Protocol 的方式来进行连接的方式,在连接前可以通过—mx 来标注你要用X协议的方式来连接,--mc则是使用老式传统的方式来对数据库进行连接。

  

MYSQL 8  从 MYSQL SHELL 开始_sql_10


8 查询数据的格式问题

 

Mysqlsh展示数据的方式主要有三种

 

1   针对json 数据的 josn pretty

2   针对传统数据的 table

3   针对传统数据的 vertical

 

mysqlsh--uri=test@192.168.198.101 -P3306 -p1234.Com -D world_x --sql -e "SELECTName,District, JSON_EXTRACT(info, '$.Places_of_interest[?].name') as SightsFROM world_x.city WHERE JSON_EXTRACT(info, '$.Places_of_interest') IS NOTNULL" --json=pretty

MYSQL 8  从 MYSQL SHELL 开始_sql_11

mysqlsh--sql  --uri=test@192.168.198.101 -P3306-p1234.Com -D world_x -e "SELECT Name as Sights FROMworld_x.city limit10" --table

MYSQL 8  从 MYSQL SHELL 开始_mysql_12

mysqlsh--sql  --uri=test@192.168.198.101 -P3306-p1234.Com -D world_x -e "SELECT Name as Sights FROMworld_x.city limit10" – vertical

MYSQL 8  从 MYSQL SHELL 开始_sql_13


9  通过PYTHON 来控制数据库


在MYSQLShell 的操作中可以通过python的代码来控制我们的数据库服务器系统,实际上我们通过X DEVAPI 来控制和掌握MYSQL 数据库系统。通过这个方法可以更有效的控制数据库中的关系数据类和方法,以及处理JSON文档对象。mysqlshell 提供了众多的操作数据库的函数来在py的环境下操作数据库,方便了开发者。


下面通过一些案例来进行操作


1  建立连接串,将连接的信息进行打包,


user_info = {

'host': '192.168.198.101',

'port': 33060,

'user': 'test',

'password': '1234.Com',

}


my_session = mysqlx.get_session(user_info)


通过get_session 的函数获取数据库的连接


2   获取当前数据库中的数据库列表


my_db = my_session.get_current_schema();

my_db = my_session.get_schemas()


MYSQL 8  从 MYSQL SHELL 开始_数据库_14


3   获得当前连接的情况,是打开,还是关闭,可以关闭连接


my_session.isopen()

mysql_sesion.close()

MYSQL 8  从 MYSQL SHELL 开始_数据库_15


4  获得当前的数据库,并执行SQL 


my_db = my_session.set_current_schema('test')


下面我们通过一个综合性的操作来结束mysql shell 的文字

MYSQL 8  从 MYSQL SHELL 开始_sql_16


#引入一个创建表的变量并赋值


CREATE_TBL = """

CREATE TABLE `test`.`info` (

`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 DEFAULT CHARSET=latin1

"""

#针对要查询的字段进行赋值

COLUMNS = ['sensor_name', 'sensor_value', 'sensor_units']

#复制连接字符串


user_info = {

'host': '192.168.198.101',

'port': 33060,

'user': 'test',

'password': '1234.Com',

}

#建立连接

my_session = mysqlx.get_session(user_info)

#  连接到test 数据库

my_db = my_session.set_current_schema('test')

#  执行SQL 创建表

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

#获得操作表的变量

my_tbl = my_db.get_table('info')

# 插入数据

my_tbl.insert(COLUMNS).values('paint_vat_temp', 32.815, 'Celsius').execute()

my_tbl.insert(COLUMNS).values('tongue_height_variance', 1.52, 'mm').execute()

my_tbl.insert(COLUMNS).values('ambient_temperature', 24.5, 'Celsius').execute()

my_tbl.insert(COLUMNS).values('gross_weight', 1241.01, 'pounds').execute()


print("\nShowing results after inserting all rows.")

#获得整体表的数据

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

#打印数据

for row  in  my_res.fetch_all():

    print row


MYSQL 8  从 MYSQL SHELL 开始_mysql_17


举报

相关推荐

0 条评论