日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

MySQL Shell的介紹以及安裝

瀏覽:45日期:2023-10-03 16:24:07
01 ReplicaSet的架構

前面的文章中,我們說了ReplicaSet的基本概念和限制以及部署前的基本知識。今天我們來看InnoDB ReplicaSet部署過程中的兩個重要組件之一的MySQL Shell,為了更好的理解MySQL Shell,畫了一張圖,如下:

MySQL Shell的介紹以及安裝

通過上面的圖,不難看出,MySQL Shell是運維人員管理底層MySQL節點的入口,也就是DBA執行管理命令的地方,而MySQL Router是應用程序連接的入口,它的存在,讓底層的架構對應用程序透明,應用程序只需要連接MySQL Router就可以和底層的數據庫打交道,而數據庫的主從架構,都是記錄在MySQL Router的原信息里面的。

今天,我們主要來看MySQL Shell的搭建過程。

02 MySQL Shell的介紹以及安裝

MySQL Shel是一個客戶端工具,用于管理Innodb Cluster或者Innodb ReplicaSet,可以簡單理解成ReplicaSet的一個入口。

它的安裝過程比較簡單:在MySQL官網下載對應版本的MySQL Shell即可。地址如下:

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

這里使用8.0.20版本

MySQL Shell的介紹以及安裝

下載完畢之后,在Linux服務器進行解壓,然后就可以通過這個MySQL Shell來連接線上的MySQL服務了。

我的線上MySQL地址分別是:

192.168.1.10 5607

192.168.1.20 5607

可以直接通過下面的命令來連接MySQL服務:

/usr/local/mysql-shell-8.0.20/bin/mysqlsh ’$user’@’$host’:$port --password=$pass

成功連接之后的日志如下:

MySQL Shell 8.0.20Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its affiliates.Other names may be trademarks of their respective owners.Type ’help’ or ’?’ for help; ’quit’ to exit.WARNING: Using a password on the command line interface can be insecure.Creating a session to ’superdba@10.185.13.195:5607’Fetching schema names for autocompletion... Press ^C to stop.Your MySQL connection id is 831Server version: 8.0.19 MySQL Community Server - GPLNo default schema selected; type use <schema> to set one. MySQL 192.168.1.10:5607 ssl JS > MySQL 192.168.1.10:5607 ssl JS > MySQL 192.168.1.10:5607 ssl JS > MySQL 192.168.1.10:5607 ssl JS > 03 MySQL Shell連接數據庫并創建ReplicaSet

上面已經介紹了使用MySQL Shell連接數據庫的方法了,現在我們來看利用MySQL Shell來創建ReplicaSet的方法:

1、首先使用dba.configureReplicaSetInstance命令來配置副本集,并創建副本集的管理員。

MySQL 192.168.1.10:5607 ssl JS > dba.configureReplicaSetInstance(’root@192.168.1.10:5607’,{clusterAdmin:'’rsadmin’@’%’'})Configuring MySQL instance at 192.168.1.10:5607 for use in an InnoDB ReplicaSet...This instance reports its own address as 192.168.1.10:5607WARNING: User ’rsadmin’@’%’ already exists and will not be created. However, it is missing privileges.The account ’rsadmin’@’%’ is missing privileges required to manage an InnoDB cluster:GRANT REPLICATION_APPLIER ON *.* TO ’rsadmin’@’%’ WITH GRANT OPTION;Dba.configureReplicaSetInstance: The account ’root’@’192.168.1.10’ is missing privileges required to manage an InnoDB cluster. (RuntimeError)

可以看到,上面的命令中,我們配置了副本集的一個實例:192.168.1.10:5607,并創建了一個管理員賬號rsadmin,同時這個管理員擁有clusterAdmin的權限。

返回的結果中,有一個報錯信息,它提示我們登陸的root賬號少了replication_applier的權限,因此無法使用root賬號對rsadmin賬號授權。我們給root賬號補充replication_applier權限之后,重新執行上面的命令,結果如下:

MySQL 192.168.1.10:5607 ssl JS > dba.configureReplicaSetInstance(’root@192.168.1.10:5607’,{clusterAdmin:'’rsadmin’@’%’'})Configuring MySQL instance at 192.168.1.10:5607 for use in an InnoDB ReplicaSet...This instance reports its own address as 192.168.1.10:5607User ’rsadmin’@’%’ already exists and will not be created.The instance ’192.168.1.10:5607’ is valid to be used in an InnoDB ReplicaSet.The instance ’192.168.1.10:5607’ is already ready to be used in an InnoDB ReplicaSet.

這次執行成功了。

我們登陸到底層的192.168.1.10上,查看rsadmin賬號,可以發現,賬號已經生成了,信息如下:

select user,host,concat(user,'@’',host,'’'),authentication_string from mysql.user where user like '%%rsadmin';+---------+------+----------------------------+-------------------------------------------+| user | host | concat(user,'@’',host,'’') | authentication_string |+---------+------+----------------------------+-------------------------------------------+| rsadmin | % | rsadmin@’%’| *2090992BE9B9B27D89906C6CB13A8512DF49E439 |+---------+------+----------------------------+-------------------------------------------+1 row in set (0.00 sec)show grants for rsadmin@’%’;+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Grants for rsadmin@%|+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| GRANT SELECT, RELOAD, SHUTDOWN, PROCESS, FILE, SUPER, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE USER ON *.* TO `rsadmin`@`%` WITH GRANT OPTION || GRANT BACKUP_ADMIN,CLONE_ADMIN,PERSIST_RO_VARIABLES_ADMIN,SYSTEM_VARIABLES_ADMIN ON *.* TO `rsadmin`@`%` WITH GRANT OPTION || GRANT INSERT, UPDATE, DELETE ON `mysql`.* TO `rsadmin`@`%` WITH GRANT OPTION || GRANT INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `mysql_innodb_cluster_metadata`.* TO `rsadmin`@`%` WITH GRANT OPTION || GRANT INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `mysql_innodb_cluster_metadata_bkp`.* TO `rsadmin`@`%` WITH GRANT OPTION || GRANT INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `mysql_innodb_cluster_metadata_previous`.* TO `rsadmin`@`%` WITH GRANT OPTION |+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+6 rows in set (0.00 sec)

注意,如果我們加入的副本集實例是當前連接的實例,那么也可以使用簡單的寫法:

dba.configureReplicaSetInstance(’’,{clusterAdmin:'’rsadmin’@’%’'})

2、使用dba.createReplicaSet命令創建副本集,并將結果保存在一個變量里面,如下:

MySQL 192.168.1.10:5607 ssl JS > var rs = dba.createReplicaSet('yeyz_test')A new replicaset with instance ’192.168.1.10:5607’ will be created.* Checking MySQL instance at 192.168.1.10:5607This instance reports its own address as 192.168.1.10:5607192.168.1.10:5607: Instance configuration is suitable.* Updating metadata...ReplicaSet object successfully created for 192.168.1.10:5607.Use rs.addInstance() to add more asynchronously replicated instances to this replicaset and rs.status() to check its status.

可以看到,我們創建了一個yeyz_test的副本集,并將結果保存在變量rs當中。

3、使用rs.status()查看當前的副本集成員

MySQL 192.168.1.10:5607 ssl JS > rs.status(){ 'replicaSet': {'name': 'yeyz_test','primary': '192.168.1.10:5607','status': 'AVAILABLE','statusText': 'All instances available.','topology': { '192.168.1.10:5607': {'address': '192.168.1.10:5607','instanceRole': 'PRIMARY','mode': 'R/W','status': 'ONLINE' }},'type': 'ASYNC' }}

這里面,可以看到,當前ReplicaSet里面已經有192.168.1.10:5607這個實例的,他的狀態是available,他的角色是Primary。

4、此時我們使用rs.addInstance命令加入第2個節點,并使用rs.status查看狀態。

這里需要注意,加入第二個節點的時候,有一個數據同步的過程,這個數據同步有2中策略:

策略一:全量恢復

使用MySQL Clone組件,然后使用克隆快照來覆蓋新實例上面的所有數據。這種方法非常適合空白實例加入到Innodb 副本集中。

策略二:增量恢復

它依賴MySQL的復制功能,將所有的丟失的事務復制到新實例上,如果新實例上的事務很少,則這個過程會很快。這個方法需要保證集群中至少存在一個實例,它保存了這些缺失事務的binlog,如果缺失的事務的binlog已經清理,則這個方法不能使用。

當一個實例加入一個集群的時候,MySQL Shell會自動嘗試挑選一個合適的策略來同步數據,不需要人為干預,如果它無法安全的選擇同步方法,則會提供給DBA一個選項,讓你選擇是通過Clone或者增量同步的方法來實現數據同步。

下面的例子中,就是通過自動選擇增量同步的方法來同步數據的:

MySQL 192.168.1.10:5607 ssl JS > rs.addInstance('192.168.1.20:5607')WARNING: Concurrent execution of ReplicaSet operations is not supported because the required MySQL lock service UDFs could not be installed on instance ’10.41.28.127:5607’.Make sure the MySQL lock service plugin is available on all instances if you want to be able to execute some operations at the same time. The operation will continue without concurrent execution support.Adding instance to the replicaset...* Performing validation checksThis instance reports its own address as 192.168.1.20:5607192.168.1.20:5607: Instance configuration is suitable.* Checking async replication topology...* Checking transaction state of the instance...The safest and most convenient way to provision a new instance is through automatic clone provisioning, which will completely overwrite the state of ’192.168.1.20:5607’ with a physical snapshot from an existing replicaset member. To use this method by default, set the ’recoveryMethod’ option to ’clone’.WARNING: It should be safe to rely on replication to incrementally recover the state of the new instance if you are sure all updates ever executed in the replicaset were done with GTIDs enabled, there are no purged transactions and the new instance contains the same GTID set as the replicaset or a subset of it. To use this method by default, set the ’recoveryMethod’ option to ’incremental’.Incremental state recovery was selected because it seems to be safely usable.* Updating topology** Configuring 192.168.1.20:5607 to replicate from 192.168.1.10:5607** Waiting for new instance to synchronize with PRIMARY...The instance ’192.168.1.20:5607’ was added to the replicaset and is replicating from 192.168.1.20:5607.MySQL 192.168.1.10:5607 ssl JS >MySQL 192.168.1.10:5607 ssl JS > rs.status(){ 'replicaSet': {'name': 'yeyz_test','primary': '192.168.1.10:5607','status': 'AVAILABLE','statusText': 'All instances available.','topology': { '192.168.1.10:5607': {'address': '192.168.1.10:5607','instanceRole': 'PRIMARY','mode': 'R/W','status': 'ONLINE' }, '192.168.1.20:5607': {'address': '192.168.1.20:5607','instanceRole': 'SECONDARY','mode': 'R/O','replication': { 'applierStatus': 'APPLIED_ALL', 'applierThreadState': 'Slave has read all relay log; waiting for more updates', 'receiverStatus': 'ON', 'receiverThreadState': 'Waiting for master to send event', 'replicationLag': null},'status': 'ONLINE' }},'type': 'ASYNC' }}

加入第二個節點之后,可以看到,再次使用rs.status來查看副本集的結構,可以看到Secondary節點已經出現了,就是我們新加入的192.168.1.20:5607

當然我們可以分別使用下面的命令查看更詳細的輸出:

rs.status({extended:0})

rs.status({extended:1})

rs.status({extended:2})

不同的級別,顯示的信息有所不同,等級越高,信息約詳細。

這里不得不說一個小的bug,官方文檔建議寫法是:

ReplicaSet.status(extended=1)

原文如下:

The output of ReplicaSet.status(extended=1) is very similar to Cluster.status(extended=1), but the main difference is that the replication field is always available because InnoDB ReplicaSet relies on MySQL Replication all of the time, unlike InnoDB Cluster which uses it during incremental recovery. For more information on the fields, see Checking a cluster’s Status with Cluster.status().

但是實際操作過程中,這種寫法會報錯,如下:

MySQL 192.168.1.10:5607 ssl JS > sh.status(extended=1)You are connected to a member of replicaset ’yeyz_test’.ReplicaSet.status: Argument #1 is expected to be a map (ArgumentError)

不知道算不算一個bug。

5.搭建好副本集之后,查看primary節點的元信息庫表,并在primary寫入數據,查看數據是否可以同步。

[(none)] 17:41:10>show databases;+-------------------------------+| Database |+-------------------------------+| information_schema || mysql || mysql_innodb_cluster_metadata || performance_schema || sys || zjmdmm|+-------------------------------+6 rows in set (0.01 sec)[(none)] 17:41:29>use mysql_innodb_cluster_metadataDatabase changed[mysql_innodb_cluster_metadata] 17:45:12>show tables;+-----------------------------------------+| Tables_in_mysql_innodb_cluster_metadata |+-----------------------------------------+| async_cluster_members || async_cluster_views || clusters|| instances || router_rest_accounts || routers || schema_version || v2_ar_clusters || v2_ar_members || v2_clusters || v2_gr_clusters || v2_instances || v2_router_rest_accounts || v2_routers || v2_this_instance|+-----------------------------------------+15 rows in set (0.00 sec)[mysql_innodb_cluster_metadata] 17:45:45>select * from routers;Empty set (0.00 sec)[(none)] 17:45:52>create database yeyazhou;Query OK, 1 row affected (0.00 sec)

可以看到,Primary節點上有一個元信息數據庫mysql_innodb_cluster_metadata,里面保存了一些原信息,我們查看了router表,發現里面沒有數據,原因是我們沒有配置MySQL Router。后面的文章中會寫到MySQL Router的配置過程。

在Primary上創建一個數據庫yeyazhou,可以發現,在從庫上也已經出現了對應的DB,

192.168.1.20 [(none)] 17:41:41>show databases;+-------------------------------+| Database |+-------------------------------+| information_schema || mysql || mysql_innodb_cluster_metadata || performance_schema || sys || yeyazhou || zjmdmm|+-------------------------------+7 rows in set (0.00 sec)

說明副本集的復制關系無誤。

至此,整個MySQL Shell連接MySQL實例并創建ReplicatSet的過程搭建完畢。

下一篇文章講述MySQL Router的搭建過程,以及如何使用MySQL Router來訪問底層的數據庫。

以上就是MySQL Shell的介紹以及安裝的詳細內容,更多關于MySQL Shell的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
黄毛片在线观看| 日韩毛片一区| 欧美欧美黄在线二区| 国产一级久久| 国产欧美另类| 91欧美国产| 中文字幕在线视频久| 亚洲综合激情在线| 一区二区三区四区在线观看国产日韩 | caoporn视频在线| 日韩精品三区四区| 免费在线观看成人| 超碰超碰人人人人精品| 免费精品国产| 欧美在线影院| 国产成年精品| 丝袜美腿诱惑一区二区三区| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 美女视频黄免费的久久| 国产aⅴ精品一区二区四区| 久久精品欧洲| 久久国产人妖系列| 日韩精品免费一区二区三区| 久久精品观看| 中文视频一区| 97精品国产福利一区二区三区| 久久精品123| 国产日韩免费| 蜜臀久久99精品久久久久宅男 | 欧美激情日韩| 国产综合婷婷| 色一区二区三区| 首页亚洲欧美制服丝腿| 国产欧美一区二区三区精品酒店| 青青草91视频| 97精品一区二区| 久久久久.com| 日韩高清一区在线| 成人一区而且| 国产亚洲在线| 成人看片网站| 国产欧美一区二区色老头| 在线国产一区二区| 国产一区二区三区免费在线| 免费一区二区三区在线视频| 欧美日韩在线观看首页| 日韩av网站在线观看| 成人免费网站www网站高清| 日本h片久久| 99久久精品网站| 欧美激情91| 午夜久久av| 蜜桃tv一区二区三区| 欧美经典一区| 国产精品毛片视频| 日韩不卡在线观看日韩不卡视频 | 亚洲一区不卡| 女同性一区二区三区人了人一| 精品丝袜在线| 欧美羞羞视频| 日本久久综合| 精品国产三区在线| 欧美aaaaaa午夜精品| 97精品在线| 婷婷亚洲综合| 在线成人直播| 99免费精品| 亚洲精品观看| 天堂成人免费av电影一区| 奇米狠狠一区二区三区| 亚洲免费中文| 综合激情一区| 国产精品亚洲四区在线观看| 成人自拍av| 精品国产aⅴ| 美女视频黄免费的久久| 欧美亚洲国产日韩| 国产精品免费99久久久| 国产精品毛片在线看| 中文一区一区三区免费在线观 | 亚洲欧美不卡| 日韩手机在线| 亚洲乱码一区| 久久最新视频| 91久久黄色| 在线观看一区| 欧美黑人巨大videos精品| 日本亚洲欧美天堂免费| 日韩中文欧美在线| 日韩一区二区久久| 日韩精品91亚洲二区在线观看| 性色一区二区| 久久三级毛片| 久久国产99| 精品久久影院| 日韩中文字幕无砖| 国产aⅴ精品一区二区三区久久| 欧洲激情综合| 麻豆视频久久| 蜜臀91精品国产高清在线观看| 亚洲精品麻豆| 欧美日韩精品免费观看视完整| 天堂成人国产精品一区| 日韩高清一区二区| 日韩中文欧美| 日韩福利视频导航| 国产一区二区三区探花| 综合五月婷婷| 91精品精品| 国产精品va视频| 亚洲精品自拍| 91亚洲国产成人久久精品| 日韩在线卡一卡二| 激情六月综合| 成人高清一区| 高清av一区| 国产精品多人| 日本v片在线高清不卡在线观看| 亚洲风情在线资源| 麻豆精品久久久| 国产欧美日韩影院| 日韩福利视频网| 日韩一区二区三区在线看| 亚洲免费中文| 欧美.日韩.国产.一区.二区| 久久精品一区二区国产| 国产精品亚洲人成在99www| 日韩一区二区三区四区五区| 蜜桃av一区二区三区电影| 亚洲激情社区| 红桃视频国产精品| 亚洲欧美视频| 亚洲香蕉视频| 男女男精品视频网| 国产亚洲网站| 91伊人久久| 亚洲伦乱视频| 久久久久国产精品一区二区| 久久国产欧美| 国产亚洲在线观看| 中文字幕av一区二区三区四区| 亚洲日本欧美| 国产精品日韩精品中文字幕| 久久精品三级| 国产伊人精品| 日本一不卡视频| 成人台湾亚洲精品一区二区| 久久久久久美女精品| 欧美日韩高清| 久久精品凹凸全集| 成人欧美一区二区三区的电影| 亚洲欧美日韩高清在线| 天堂精品久久久久| 正在播放日韩精品| 亚洲精品影视| 亚洲午夜天堂| 91成人在线| 久久久久国产精品一区三寸| 综合日韩在线| 电影天堂国产精品| 日本麻豆一区二区三区视频| 色网在线免费观看| 日韩精品免费视频一区二区三区 | 日本在线视频一区二区| 亚洲天堂资源| 国产情侣一区| 在线视频日韩| 亚洲人成在线网站| 国产日产高清欧美一区二区三区 | 久久午夜影视| 欧美日韩水蜜桃| 日韩国产欧美在线播放| 在线一区免费| 日韩网站中文字幕| 久久精品国产99国产精品| 亚洲精品乱码日韩| 日韩一级精品| 极品日韩av| 久久蜜桃精品| 日韩一区自拍| 日韩欧美三级| 成人一区不卡| 红杏一区二区三区| 麻豆91在线播放| 久久99影视| 国产精品任我爽爆在线播放 | 丝袜亚洲另类欧美| 婷婷综合六月| 色偷偷色偷偷色偷偷在线视频| 国产精品www.| 久久99久久久精品欧美| 国产麻豆一区| 麻豆成人在线观看| 国产a久久精品一区二区三区| 精品三级av在线导航| 精品视频亚洲| 日韩精品诱惑一区?区三区| 精品理论电影在线| 精品国产一区二| 久久视频国产|