mysql安装详解(MySQL Router的安装部署)
mysql安装详解
MySQL Router的安装部署01 MySQL Router介绍
前面的文章中,我们说了ReplicaSet的基本概念MySQL Shell工具以及如何使用MySQL Shell搭建Innodb Replicaset。今天我们来看InnoDB ReplicaSet部署过程中的另一个重要组件MySQL Router。
MySQL Router是什么?
为了更好的理解Innodb Replicaset,我们把之前的那张图搬迁过来,如下:
通过上面的图,不难看出,MySQL Router是应用程序连接的入口,它的存在,让底层的架构对应用程序透明,应用程序只需要连接MySQL Router就可以和底层的数据库打交道,而数据库的主从架构,都是记录在MySQL Router的原信息里面的。
版本
MySQL Router是MySQL官方的一款轻量级的高性能中间件,它介于应用程序和MySQL Server之间,应用程序通过连接MySQL Router和底层的MySQL Server之间通信,它对应用程序是透明的。官方文档建议搭配MySQL8.0或者MySQL5.7的Server使用。目前最新的版本是MySQL Router 8,如果您使用过MySQL Router的2.0或者2.1版本,强烈建议升级到MySQL Router 8。
MySQL Router特点?
1、对应用透明。MySQL Router要做到对应用透明,它必须连接底层的MySQL,并知道当前哪个节点是Primary,这样,才能够在发生故障的时候进行故障转移。
2、使用场景。基于这个特性,它可以用在Innodb Cluster、Innodb Replicaset或者MGR的环境中。
3、MySQL Router会保留在线的MySQL实例的缓存列表,或者已经配置好的Innodb Cluster集群的拓扑关系,除此启动的时候,这些信息将从MySQL Router的配置表中获取。
4、为保证缓存中的元信息能够得到即时更新,MySQL Router需要保证至少能够和集群中的一个正常节点保持通信,它会从当前实例的Performance_schema表中获取数据库的原信息和实时状态。
5、当集群中和MySQL Router通信的节点关闭时,MySQL Router会尝试访问集群中的其他节点。并重新获取相关元数据信息。
02 MySQL Router的安装部署
为了获取更好的性能,通常情况下,MySQL Router会和应用程序部署在一起,这通常是基于下面的考虑:
1、可以通过socket套接字连接到MySQL Router,而不是tcp/ip方法
2、减少了网络上的延时
3、可以配置指定的账户来访问数据库,例如myapp@'host'而不是类似myapp@'%'这种全网段的账号,有利于提升安全性
4、通常,相比数据库服务器,应用服务器更容易扩展。
官方给的部署架构图如下:
下载安装过程:
1、直接登录官网下载MySQL Router的对应版本。
https://downloads.mysql.com/archives/router/
2、下载完成之后,解压,以8.0.20为例,由于是tar.xz格式的文件,解压命令如下:
xz -d xxx.tar.xz (解压成tar格式)
tar xvf xxx.tar (即可)
接下来就是初始化过程了,初始化的时候,需要我们的MySQL Server部署完毕,在之前的文章中,我们已经部署好了一个Innodb Replicaset架构,它有一主一从,IP地址分别是:
192.168.1.10 5607 Primary
192.168.1.20 5607 Secondary
初始化过程:
1、利用初始化命令初始化MySQL Router:
|
mysqlrouter --bootstrap superdba@'10.13.3.129':5607 --directory /data1/yazhou5/mysql/mysql-router --conf-use-sockets --account routerfriend --account-create always |
这里,需要解释一下其中的几个参数:
|
--bootstrap 代表引导的实例,后面接一个连接信息的URL; --directory 代表生成的配置目录 --conf-use-sockets 代表是否启用套接字连接(是否生成套接字文件) --account 代表初始化后MySQL Router使用什么账号连接MySQL Server --account-create 代表账号创建策略,always代表只有在account不存在的时候才进行bootstrap操作 |
这个命令敲下去之后,返回报错信息如下:
|
Error: You are bootstraping as a superuser. This will make all the result files (config etc.) privately owned by the superuser. Please use --user=username option to specify the user that will be running the router. Use --user=root if this really should be the superuser. |
系统检测到我们使用root账号来进行的MySQL Router初始化,提示我们如果使用root操作,需要在最后面补充--user=root
2、补充--user=root之后,重新执行命令,结果如下:
|
[root mysql-router] # /usr/local/mysql-router-8.0.20/bin/mysqlrouter --bootstrap superdba@10.185.13.195:5607 --directory /data1/yazhou5/mysql/mysql-router --conf-use-sockets --account routerfriend --account-create always --user=root --force Please enter MySQL password for superdba: # 这里输入我们已知的superdba账号密码 # Bootstrapping MySQL Router instance at '/data1/yazhou5/mysql/mysql-router'... Please enter MySQL password for routerfriend: # 这里创建新的account账号的密码 - Creating account(s) - Verifying account (using it to run SQL queries that would be run by Router) - Storing account in keyring - Adjusting permissions of generated files - Creating configuration /data1/yazhou5/mysql/mysql-router/mysqlrouter .conf # MySQL Router configured for the InnoDB ReplicaSet 'yeyz_test' After this MySQL Router has been started with the generated configuration $ /usr/local/mysql-router-8 .0.20 /bin/mysqlrouter -c /data1/yazhou5/mysql/mysql-router/mysqlrouter .conf the cluster 'yeyz_test' can be reached by connecting to: ## MySQL Classic protocol - Read /Write Connections: localhost:6446, /data1/yazhou5/mysql/mysql-router/mysql .sock - Read /Only Connections: localhost:6447, /data1/yazhou5/mysql/mysql-router/mysqlro .sock ## MySQL X protocol - Read /Write Connections: localhost:64460, /data1/yazhou5/mysql/mysql-router/mysqlx .sock - Read /Only Connections: localhost:64470, /data1/yazhou5/mysql/mysql-router/mysqlxro .sock |
可以看到,提示我们输入两次密码之后,bootstrap的操作就算成功了。
3、此时我们进入参数中指定的--directory目录中,查看生成的初始化文件,可以看到:
|
drwx ------ 2 root root 4096 Apr 12 23:15 data drwx ------ 2 root root 4096 Apr 12 23:15 log -rw ------- 1 root root 1532 Apr 12 23:15 mysqlrouter.conf -rw ------- 1 root root 104 Apr 12 23:15 mysqlrouter.key drwx ------ 2 root root 4096 Apr 12 23:15 run -rwx ------ 1 root root 353 Apr 12 23:15 start.sh -rwx ------ 1 root root 209 Apr 12 23:15 stop.sh |
生成了一些配置文件和启停脚本,我们打开这个配置文件mysqlrouter.conf看看内容:
|
# File automatically generated during MySQL Router bootstrap [DEFAULT] user=root logging_folder= /data1/yazhou5/mysql/mysql-router/log runtime_folder= /data1/yazhou5/mysql/mysql-router/run data_folder= /data1/yazhou5/mysql/mysql-router/data keyring_path= /data1/yazhou5/mysql/mysql-router/data/keyring master_key_path= /data1/yazhou5/mysql/mysql-router/mysqlrouter .key connect_timeout=15 read_timeout=30 dynamic_state= /data1/yazhou5/mysql/mysql-router/data/state .json [logger] level = INFO [metadata_cache:yeyz_test] cluster_type=rs router_id=1 user=routerfriend metadata_cluster=yeyz_test ttl=0.5 auth_cache_ttl=-1 auth_cache_refresh_interval=2 [routing:yeyz_test_rw] bind_address=0.0.0.0 bind_port=6446 socket= /data1/yazhou5/mysql/mysql-router/mysql .sock destinations=metadata-cache: //yeyz_test/ ?role=PRIMARY routing_strategy=first-available protocol=classic [routing:yeyz_test_ro] bind_address=0.0.0.0 bind_port=6447 socket= /data1/yazhou5/mysql/mysql-router/mysqlro .sock destinations=metadata-cache: //yeyz_test/ ?role=SECONDARY routing_strategy=round-robin-with-fallback protocol=classic [routing:yeyz_test_x_rw] bind_address=0.0.0.0 bind_port=64460 socket= /data1/yazhou5/mysql/mysql-router/mysqlx .sock destinations=metadata-cache: //yeyz_test/ ?role=PRIMARY routing_strategy=first-available protocol=x [routing:yeyz_test_x_ro] bind_address=0.0.0.0 bind_port=64470 socket= /data1/yazhou5/mysql/mysql-router/mysqlxro .sock destinations=metadata-cache: //yeyz_test/ ?role=SECONDARY routing_strategy=round-robin-with-fallback protocol=x |
4、分析生成的配置文件,不难发现,MySQL Router配置了4个端口,分别是6446、6447、64460、64470和对应的套接字文件。
当然,我们可以通过一些参数的配置改变默认的端口和套接字,例如:
|
--conf-use-sockets:(可选)为所有四种连接类型启用UNIX域套接字,。 --conf-skip-tcp: (可选)禁用TCP端口,如果只希望使用套接字,则可以通过--conf-use-sockets传递该选项。 --conf-base-port: (可选)更改端口范围,而不使用默认端口。 默认为6446。 --conf-bind-address:(可选)更改每个路由的bind_address值。 |
5、使用命令在本地启动MySQL Router,指定本地生成的配置文件,命令如下:
|
[root@ mysql-router]# /usr/ local /mysql-router-8.0.20/bin/mysqlrouter -c /data1/yazhou5/mysql/mysql-router/mysqlrouter.conf & |
启动之后,我们使用刚才创建的routerfriend账号以及6446这个读写端口来连接MySQL Router:
|
[root@ mysql-router] # mysql -u routerfriend -h 127.0.0.1 -P 6446 -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 95696 Server version: 8.0.19 MySQL Community Server - GPL Copyright (c) 2000, 2013, 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 '\h' for help. Type '\c' to clear the current input statement. routerfriend@127.0.0.1 [(none)] 23:42:00> routerfriend@127.0.0.1 [(none)] 23:42:01> select @@port; +--------+ | @@port | +--------+ | 5607 | +--------+ 1 row in set (0.00 sec) |
我们通过6446端口连接MySQL Router之后,然后在MySQL Router中执行select @@port命令查看当前的端口号信息,可以看到,返回值是5607,说明MySQL Router已经帮我们路由到了底层的MySQL Server上面。
这个routerfriend账号的权限可能不够,我们也可以换成superdba的高权限账号去连接mysqlrouter,这样就可以对MySQL Server中的库表进行读写操作。
03 查看MySQL Router的元信息
MySQL Router搭建完毕后,可以通过查看元信息库mysql_innodb_cluster_metadata里面的表信息,包含cluster表、router表、以及instances表,对应的如下:
|
superdba@127.0.0.1 [mysql_innodb_cluster_metadata] 23:51:20> select * from instances; + -------------+--------------------------------------+--------------------+--------------------------------------+--------------------+----------------------------------------+------------+-------------+ | instance_id | cluster_id | address | mysql_server_uuid | instance_name | addresses | attributes | description | + -------------+--------------------------------------+--------------------+--------------------------------------+--------------------+----------------------------------------+------------+-------------+ | 1 | 94d5f935-990e-11eb-8832-fa163ebd2444 | 192.168.1.10:5607 | 0609f966-690f-11eb-bd89-fa163ebd2444 | 192.168.1.10:5607 | { "mysqlClassic" : "192.168.1.10:5607" } | {} | NULL | | 2 | 94d5f935-990e-11eb-8832-fa163ebd2444 | 192.168.1.20:5607 | c6ba0bf0-6d4d-11eb-aa4b-b00875209c1c | 192.168.1.20:5607 | { "mysqlClassic" : "192.168.1.20:5607" } | {} | NULL | + -------------+--------------------------------------+--------------------+--------------------------------------+--------------------+----------------------------------------+------------+-------------+ 2 rows in set (0.00 sec) superdba@127.0.0.1 [mysql_innodb_cluster_metadata] 23:51:30> superdba@127.0.0.1 [mysql_innodb_cluster_metadata] 23:51:30> select * from clusters; + --------------------------------------+--------------+--------------------+---------+------------------------------------------------+--------------+--------------+----------------+ | cluster_id | cluster_name | description | options | attributes | cluster_type | primary_mode | router_options | + --------------------------------------+--------------+--------------------+---------+------------------------------------------------+--------------+--------------+----------------+ | 94d5f935-990e-11eb-8832-fa163ebd2444 | yeyz_test | Default ReplicaSet | NULL | { "adopted" : 0, "opt_gtidSetIsComplete" : false } | ar | pm | NULL | + --------------------------------------+--------------+--------------------+---------+------------------------------------------------+--------------+--------------+----------------+ 1 row in set (0.00 sec) superdba@127.0.0.1 [mysql_innodb_cluster_metadata] 23:51:57> superdba@127.0.0.1 [mysql_innodb_cluster_metadata] 23:51:58> select * from routers; + -----------+-------------+--------------+-------------+---------+---------------------+------------------------------------------------------------------------------------------------------------------------------+--------------------------------------+---------+ | router_id | router_name | product_name | address | version | last_check_in | attributes | cluster_id | options | + -----------+-------------+--------------+-------------+---------+---------------------+------------------------------------------------------------------------------------------------------------------------------+--------------------------------------+---------+ | 1 | | MySQL Router | 10.13.3.129 | 8.0.20 | 2021-04-12 23:52:29 | { "ROEndpoint" : "6447" , "RWEndpoint" : "6446" , "ROXEndpoint" : "64470" , "RWXEndpoint" : "64460" , "MetadataUser" : "routerfriend" } | 94d5f935-990e-11eb-8832-fa163ebd2444 | NULL | + -----------+-------------+--------------+-------------+---------+---------------------+------------------------------------------------------------------------------------------------------------------------------+--------------------------------------+---------+ 1 row in set (0.00 sec) |
还可以从表中查看当前的primary节点信息,primary_master字段为1的,即为primary节点。
|
superdba@127.0.0.1 [mysql_innodb_cluster_metadata] 23:52:29> select * from async_cluster_members; + --------------------------------------+---------+-------------+--------------------+----------------+------------------------------------------------------------------------------------------------------------------+ | cluster_id | view_id | instance_id | master_instance_id | primary_master | attributes | + --------------------------------------+---------+-------------+--------------------+----------------+------------------------------------------------------------------------------------------------------------------+ | 94d5f935-990e-11eb-8832-fa163ebd2444 | 2 | 1 | NULL | 1 | { "instance.address" : "192.168.1.10:5607" , "instance.mysql_server_uuid" : "0609f966-690f-11eb-bd89-fa163ebd2444" } | | 94d5f935-990e-11eb-8832-fa163ebd2444 | 3 | 1 | NULL | 1 | { "instance.address" : "192.168.1.10:5607" , "instance.mysql_server_uuid" : "0609f966-690f-11eb-bd89-fa163ebd2444" } | | 94d5f935-990e-11eb-8832-fa163ebd2444 | 3 | 2 | 1 | 0 | { "instance.address" : "192.168.1.20:5607" , "instance.mysql_server_uuid" : "c6ba0bf0-6d4d-11eb-aa4b-b00875209c1c" } | + --------------------------------------+---------+-------------+--------------------+----------------+------------------------------------------------------------------------------------------------------------------+ 3 rows in set (0.01 sec) |
以上就是MySQL Router的安装部署的详细内容,更多关于MySQL Router的资料请关注开心学习网其它相关文章!
原文链接:https://mp.weixin.qq.com/s/Ssg4woJsR5nKDiaXmb9CFg
- mysql必知必会索引(MySQL索引知识的一些小妙招总结)
- mysql索引优化技巧(MySQL如何优化索引)
- idea配置mysql最大连接数(IDEA连接不上MySQL端口号占用的解决)
- mysql怎么迁移数据(如何把本地mysql迁移到服务器数据库)
- mysql创建用户并给用户授权(MySQL 主从复制中创建复制用户的时机探讨)
- mysql8.0.23.0官方安装手册(MySQL8.0.23安装超详细教程)
- mysql8.0.26安装教程(mysql 8.0.22压缩包完整安装与配置教程图解亲测安装有效)
- mysql实验总结分析(MySQL查询截取的深入分析)
- 阿里云mysql升级注意事项(阿里云mysql空间清理的方法)
- mysql类型转换函数推荐(mysql 数据类型转换的实现)
- mysql锁机制及原理(MySQL锁阻塞的深入分析)
- mysql多核cpu利用(mysql CPU高负载问题排查)
- mysqlinnodb锁使用教程(MySQL Innodb关键特性之插入缓冲insert buffer)
- mysql是否支持透明数据加密(MySQL的加密解密的几种方式小结)
- mysql查询killed状态的进程(MySQL kill指令使用指南)
- mysql主从同步工作原理(MySQL是如何实现主备同步)
- 沪上这16所高校 萌新 礼包开箱 哪一款让你心动(沪上这16所高校萌新)
- 她救了被绑架的他,而这一切竟是一场阴谋...(她救了被绑架的他)
- 冬季养殖这6种阴生植物,方便又好养,你家有么(冬季养殖这6种阴生植物)
- 阴生植物为什么不怕照不到阳光(阴生植物为什么不怕照不到阳光)
- 阴生环境 耐阴地被植物,你知道哪些(阴生环境耐阴地被植物)
- 常见的喜阴植物有哪些 养室内盆栽就在这里选(常见的喜阴植物有哪些)
热门推荐
- sqlserver中有几种锁定模式(SQL Server 开窗函数 Over代替游标的使用详解)
- laravel 前后端开发(在Laravel中实现使用AJAX动态刷新部分页面)
- vue项目部署到服务器的nginx(Nginx部署vue项目和配置代理的问题解析)
- phpcurl请求能在日志里记录吗(php使用curl模拟多线程实现批处理功能示例)
- uni-app搜索框源代码(如何用uni-app实现顶部导航栏显示按钮和搜索框)
- dedecms兼容模式(DedeCMS 验证码不正确的解决方法php配置问题)
- IEnumerable的用法
- sqlserver2012知识点(SQL Server 2012 安全概述)
- yii2支持php7.2吗(Yii框架通过请求组件处理get,post请求的方法分析)
- laravel队列过期时间(laravel 修改记住我功能的cookie保存时间的方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9