mysql router8.2之后,读写分离可以根据sql指令进行自动读写分离,不再是使用不同端口进行读写分离
实验环境
主机名/IP | 角色 |
server01/192.168.1.201 | 主 |
server02/192.168.1.202 | 辅 |
server03/192.168.1.203 | 辅 |
server04/192.168.1.204 | mysqlrouter |
InnoDB Cluster 8.4部署步骤请查阅文档:https://www.wakamizu.cn/innodb-cluster-8-4%e9%9b%86%e7%be%a4%e9%83%a8%e7%bd%b2/
server04
添加映射
vim /etc/hosts
192.168.1.201 server01
192.168.1.202 server02
192.168.1.203 server03
192.168.1.204 server04
安装mysql存储库
wget wget https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
dpkg -i mysql-apt-config_0.8.32-1_all.deb
apt update -y
安装mysqlrouter
apt-get install mysql-router-community
server01上面使用mysqlshell创建router账户
mysqlsh mysql://clusteradmin@192.168.1.201:3306
\js
var cluster=dba.getCluster()
cluster.setupRouterAccount('routeruser')
引导路由
mysqlrouter --bootstrap clusteradmin@192.168.1.201:3306 --account=routeruser
Tips:如果前面没有创建路由账户,也可以在引导的时候使用
mysqlrouter --bootstrap clusteradmin@192.168.1.201:3306 --account=routeruser --account-create=always
成功引导后配置文件将会在/etc/mysqlrouter/mysqlrouter.conf,只需要保留
[routing:bootstrap_rw_split]
bind_address=0.0.0.0
bind_port=6450
destinations=metadata-cache://testCluster/?role=PRIMARY_AND_SECONDARY
routing_strategy=round-robin
protocol=classic
connection_sharing=1
client_ssl_mode=PREFERRED
server_ssl_mode=PREFERRED
access_mode=auto
其他的诸如[routing:bootstrap_rw]、[routing:bootstrap_ro]、[routing:bootstrap_x_rw]、[routing:bootstrap_x_ro]都可以注释掉,这些都是使用不同端口进行读写分离的配置块
注意:当access_mode=auto时,不支持任何非只读或读写的语句,这包括ALTER RESOURCE GROUP 语句、复制语句和其他管理语句。
重启服务
systemctl restart mysqlrouter
连接测试
mysql -u testusuer -p -h 192.168.1.204 -P 6450
将本次会话设置成读写模式,会发现返回的@@hostname是主节点的server01
ROUTER SET access_mode='read_write';
select @@hostname;
将本次会话设置成仅读模式,会发现返回的@@hostname是主节点的server02或者server03
ROUTER SET access_mode='read_only';
select @@hostname;