基于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 SHELL ,mysql shell 一个有意思的地方是他与我们的MYSQL 的版本同时发布,如果有MYSQL 8.027 就有MYSQL shell 8.027 这个版本。
https://downloads.mysql.com/archives/shell/
1 直接运行 yum -y install mysql-shell-8.0.27-1.el7.x86_64.rpm
2 在安装完毕后,直接运行 mysqlsh 就进入到对应的环境中
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@'%';
4 准备通过mysql shell 的方式连接MYSQL
mysqlsh --sql--uri=test@192.168.198.101 -P3306 -p1234.Com -D mysql –vertical
5 通过SQL方式连入到MYSQLSHELL 后我们通过第一个简单的命令就可以获得我们的MYSQL上的一些统计信息,\status
6 在MYSQL 中运行一些LINUX 系统的命令,这个功能对于时长需要在系统和数据库之间进行工作的人比较方便
\system linux 命令
\system ls /data
7连接的方式的不同,针对MYSQL SHELL 连接MYSQL的不同主要在于MYSQLSHELL 提供了更多的功能,如PYTHON JAVASCRIPT 等,这样的连接的方式是使用 X Protocol 的方式来进行连接的方式,在连接前可以通过—mx 来标注你要用X协议的方式来连接,--mc则是使用老式传统的方式来对数据库进行连接。
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
mysqlsh--sql --uri=test@192.168.198.101 -P3306-p1234.Com -D world_x -e "SELECT Name as Sights FROMworld_x.city limit10" --table
mysqlsh--sql --uri=test@192.168.198.101 -P3306-p1234.Com -D world_x -e "SELECT Name as Sights FROMworld_x.city limit10" – vertical
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()
3 获得当前连接的情况,是打开,还是关闭,可以关闭连接
my_session.isopen()
mysql_sesion.close()
4 获得当前的数据库,并执行SQL
my_db = my_session.set_current_schema('test')
下面我们通过一个综合性的操作来结束mysql shell 的文字
#引入一个创建表的变量并赋值
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