MYSQL SHELL 到底是個什麼局? 劍指MongoDB

如果在WINDOWS上想鏈接在LINUX上的MYSQL有什麼方法,windows上各種GUI,還是打開MYSQL那個原本黑漆漆的小方格。現在你有了新的選擇,MYSQL Shell 全新的連接MYSQL 的方式,一個滿足各種人群連接MYSQL的方式。從官方上下載後,在WINDOWS 上解壓,直接點擊執行。

雙擊mysqlsh


MYSQL SHELL 到底是個什麼局? 劍指MongoDB

為什麼要有mysql shell,這是ORACLE 的一個計劃,這個工具支持社區和企業版的MYSQL,首先這個工具並不是只針對DBA,或者說白了,他的對象是更廣闊的開發人員和會寫程序的DBA們。

下圖就是ORACLE 對MYSQL Shell 的定位。

MYSQL SHELL 到底是個什麼局? 劍指MongoDB

如果用過MONGODB的話,就深有體會會JS的優點,操作MONGODB 可以如行雲流水一般。,那mysql shell的功能可是要更廣,看下圖。

MYSQL SHELL 到底是個什麼局? 劍指MongoDB

原理先不多講,直接使用, 目前MYSQL Shell 自帶了PYTHON3.7 ,以下的案例大部分在 Python中調用一些 MYSQL SHELL 的命令,最後在總結。

打開下載的文件,其中有一個可以執行的文件

MYSQL SHELL 到底是個什麼局? 劍指MongoDB

雙擊然後\\py, 然後輸入 連接 mysql 的連接字符串, \\connect -mc 用戶名:密碼@IP或域名:端口號

MYSQL SHELL 到底是個什麼局? 劍指MongoDB

然後就進來了。


\\connect -mc shell:[email protected]:3306

另外下面是一個例子,如何使用 mysql shell 中的 py模塊來遍歷一下數據庫的庫名。

MYSQL SHELL 到底是個什麼局? 劍指MongoDB

from mysqlsh import mysqlx

mySession = mysqlx.get_session('shell:[email protected]')

schemaList = mySession.get_schemas()

print('Available schemas in this session:\\n')

for schema in schemaList:

print(schema.name)

mySession.close()


寫到這裡,我個人的感覺沒有對這個shell of mysql有一個整體的瞭解,不瞭解的原因沒有從ORACLE 整體的觀點來看這個mysql shell, 他到底要服務於什麼人群,目的是什麼。

MYSQL SHELL 到底是個什麼局? 劍指MongoDB

從上面的英文介紹來看,MYSQL SHELL 並不是要替換我們現在常用的已知的方式。MYSQL SHELL 面對的人群


1 程序員,尤其不會寫SQL 語句的那些人

2 自動化,或者想他通過程序的方式來自動化管理MYSQL 一部分功能的人

3 將MYSQL 部分管理簡單化的人,尤其與集群方面有關(個人感覺,就是要簡化操作,繼續降低MYSQL 的操作複雜度)


說白了,MYSQL的野心是不小的,他首先的目標要開始轉向 Document store. 說白了MYSQL 8 要開始分割 MONGODB 的市場,尤其是輕量級使用MONGODB 的那部分,然後你習慣,在依賴。為什麼可以從官方給的例子來說的名字,我們只有對MONGODB 的表的稱呼叫 collection,看看MYSQL 對二維表格的文檔的操作叫什麼。

MYSQL SHELL 到底是個什麼局? 劍指MongoDB


然後就是面對自己的高可用的業務,INNODB CLUSTER 和 Group Replication ,將高可用的方式進一步程序化。


下面看幾個CRUD 的例子


MYSQL SHELL 到底是個什麼局? 劍指MongoDB


from mysqlsh import mysqlx

mySession = mysqlx.get_session({'host': '192.168.198.210', 'port': 33060,'user': 'shell', 'password': '1234.Com'})

myDb = mySession.get_schema('employees')

myTable = myDb.get_table('dept_emp')

myResult = myTable.select(['emp_no', 'dept_no']).limit(1).execute()

print(myResult.fetch_all())

上邊是操作普通的表,實際上如果操作 JSON 文檔有怎樣


MYSQL SHELL 到底是個什麼局? 劍指MongoDB

from mysqlsh import mysqlx

mySession = mysqlx.get_session({'host': '192.168.198.210', 'port': 33060,'user': 'shell', 'password': '1234.Com'})

myDb = mySession.get_schema('test')

myColl = myDb.create_collection('Mongo_json')

myColl.add({'_id': '1', 'name': 'Laurie', 'age': 19}).execute()

myColl.add({'_id': '2', 'name': 'Nadya', 'age': 54}).execute()

myColl.add({'_id': '3', 'name': 'Lukas', 'age': 32}).execute()

docs = myColl.find('name like :param1 AND age < :param2').limit(1).bind('param1','L%').bind('param2',20).execute()

doc = docs.fetch_one()

print(doc)

myDb.drop_collection('my_collection')


從上邊的例子來看,PYTHON 操作下的MYSQL 活脫脫的變成讓我有點熟悉的MONGODB


此時腦洞來了忽然理解了,MYSQL 8 真的不簡單,不是5.8 是8是有道理的野心不小,MYSQL 再也不是那個“單純”的孩子。


這是要做一個生態,讓MYSQL 借程序員之手,要開始大舉進攻 JSON 半結構化得市場,要和誰爭地盤不言而喻了。並且這樣的方式操作起來,還真叫人喜歡。如果推廣開來,那........


因為MYSQL SHELL 並不光支持PYTHON ,還有JS 那是 MONGODB 操作的根本語言。

MYSQL SHELL 到底是個什麼局? 劍指MongoDB

在看看 X DevAPI 的help 。


MYSQL SHELL 到底是個什麼局? 劍指MongoDB

以上內容由東方瑞通資深講師 Austin供稿,13年專業DBA經驗,曾任互聯網金融公司Senior DBA、500強制藥企業Senior DBA,精通Mysql、PostgreSQL、Mongo DB、SQLServer。


分享到:


相關文章: