MySQL数据库如何实现读写分离
·
目录
一、概述
MaxScale 数据库代理工具简介
MaxScale 是 MariaDB 公司开发的智能数据库代理和负载均衡工具,专门为 MySQL/MariaDB 数据库设计。
MaxScale是maridb开发的一个mysql数据中间件,其配置简单,能够实现读写分离,并且可以根据主从状态实现写库的自动切换。
核心功能
-
负载均衡
-
在多个数据库服务器间分配查询负载
-
支持读写分离(主从架构)
-
-
高可用性
-
自动故障检测和故障转移
-
支持主从切换和自动重连
-
-
查询路由
-
基于SQL语句内容的路由决策
-
可将特定查询定向到特定服务器
-
-
安全功能
-
数据库防火墙
-
查询过滤和重写
-
连接加密
-
主要特点
-
完全兼容 MySQL 协议
-
支持多种路由模块(读/写分离、分片等)
-
可插拔架构,支持自定义模块开发
-
提供REST API进行监控和管理
-
支持二进制日志服务器功能
典型使用场景
-
作为MySQL/MariaDB集群的入口点
-
实现透明的读写分离
-
数据库连接池管理
-
在不修改应用代码的情况下扩展数据库架构
-
提供数据库访问的审计和监控层
二、读写分离
网络拓扑图

1、环境说明
| 数据库角色 | IP | 应用与系统版本 |
|---|---|---|
| master | 192.168.150.13 | rocky linux9.4 mariadb- 10.5.27 |
| slave | 192.168.150.14 | rocky linux9.4 mariadb- 10.5.27 |
| slave2 | 192.168.150.15 | rocky linux9.4 mariadb- 10.5.27 |
| maxscale | 192.168.150.16 | rocky linux9.4 maxscale24.02.3-GA |
2、mysql主从复制配置
分别在主从三台服务器上安装mariadb,并配置主从复制。
安装
[root@mysql-master ~]# yum install -y mariadb-server
[root@mysql-slave1 ~]# yum install -y mariadb-server
root@mysql-slave2 ~]# yum install -y mariadb-server
配置
MariaDB [mysql]> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 667 | | |
+-------------------+----------+--------------+------------------+
MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.150.13
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 667
Relay_Log_File: mariadb-relay-bin.000002
Relay_Log_Pos: 556
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
验证
主
MariaDB [mysql]> create database jx;
Query OK, 1 row affected (0.001 sec)
MariaDB [mysql]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| jx |
| mysql |
| performance_schema |
+--------------------+
从
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| jx |
| mysql |
| performance_schema |
+--------------------+
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| jx |
| mysql |
| performance_schema |
+--------------------+
3、maxscale安装
[root@maxscale ~]# ls
公共 模板 视频 图片 文档 下载 音乐 桌面 anaconda-ks.cfg maxscale-24.02.3-1.rhel.9.x86_64.rpm
[root@maxscale ~]# yum install -y maxscale-24.02.3-1.rhel.9.x86_64.rpm
4、配置maxscale
在maxscale上安装mariadb
[root@maxscale ~]# yum install -y mariadb-server
登录到主库
创建maxscale用户
MariaDB [mysql]> create user 'maxscale'@'%' identified by 'maxscale';
Query OK, 0 rows affected (0.002 sec)
赋权
MariaDB [mysql]> grant select on mysql.* to 'maxscale'@'%';
Query OK, 0 rows affected (0.001 sec)
MariaDB [mysql]> grant show databases on *.* to 'maxscale'@'%';
Query OK, 0 rows affected (0.001 sec)
创建admin用户可以在maxscale上登录
MariaDB [mysql]> create user 'admin'@'192.168.150.%' identified by 'admin';
Query OK, 0 rows affected (0.001 sec)
赋权
MariaDB [mysql]> grant create,select,insert,update,delete on *.* to 'admin'@'192.168.150.%';
Query OK, 0 rows affected (0.002 sec)
在maxscale上修改配置文件
切换到主库创建monitor用户
MariaDB [(none)]> create user 'monitor'@'%' identified by 'monitor';
Query OK, 0 rows affected (0.002 sec)
赋权
MariaDB [(none)]> GRANT REPLICATION CLIENT on *.* to 'monitor'@'%';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> GRANT REPLICATION SLAVE on *.* to 'monitor'@'%';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> GRANT SUPER,RELOAD on *.* to 'monitor'@'%';
Query OK, 0 rows affected (0.001 sec)
启动服务
[root@maxscale maxscale]# systemctl start maxscale
查看有哪些服务
[root@maxscale maxscale]# maxctrl list services
┌────────────────────┬────────────────┬─────────────┬───────────────────┬───────────────────────────┐
│ Service │ Router │ Connections │ Total Connections │ Targets │
├────────────────────┼────────────────┼─────────────┼───────────────────┼───────────────────────────┤
│ Read-Write-Service │ readwritesplit │ 0 │ 0 │ server1, server2, server3 │
└────────────────────┴────────────────┴─────────────┴───────────────────┴───────────────────────────┘
查看后台服务器有哪些
[root@maxscale maxscale]# maxctrl list servers
┌─────────┬────────────────┬──────┬─────────────┬─────────────────┬─────────┬───────────────┐
│ Server │ Address │ Port │ Connections │ State │ GTID │ Monitor │
├─────────┼────────────────┼──────┼─────────────┼─────────────────┼─────────┼───────────────┤
│ server1 │ 192.168.150.13 │ 3306 │ 0 │ Master, Running │ 0-11-12 │ MySQL-Monitor │
├─────────┼────────────────┼──────┼─────────────┼─────────────────┼─────────┼───────────────┤
│ server2 │ 192.168.150.14 │ 3306 │ 0 │ Slave, Running │ 0-11-12 │ MySQL-Monitor │
├─────────┼────────────────┼──────┼─────────────┼─────────────────┼─────────┼───────────────┤
│ server3 │ 192.168.150.15 │ 3306 │ 0 │ Slave, Running │ 0-11-12 │ MySQL-Monitor │
└─────────┴────────────────┴──────┴─────────────┴─────────────────┴─────────┴───────────────┘
测试
客户机使用admin用户连接maxscale
[root@localhost ~]# mysql -uadmin -p -h192.168.150.16
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.5.5-10.5.27-MariaDB MariaDB Server
Copyright (c) 2000, 2025, Oracle and/or its affiliates.
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.
mysql>
创建数据库和表并在主库和从库上检验
mysql> create database jx;
Query OK, 1 row affected (0.01 sec)
mysql> use jx;
Database changed
mysql> create table info(id int);
Query OK, 0 rows affected (0.01 sec)
mysql> select * from info;
Empty set (0.03 sec)
主
MariaDB [mysql]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| jx |
| mysql |
| performance_schema |
+--------------------+
从
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| jx |
| mysql |
| performance_schema |
+--------------------+
maxscale
[root@maxscale ~]# maxctrl list servers
┌─────────┬────────────────┬──────┬─────────────┬─────────────────┬─────────┬───────────────┐
│ Server │ Address │ Port │ Connections │ State │ GTID │ Monitor │
├─────────┼────────────────┼──────┼─────────────┼─────────────────┼─────────┼───────────────┤
│ server1 │ 192.168.150.13 │ 3306 │ 1 │ Master, Running │ 0-11-19 │ MySQL-Monitor │
├─────────┼────────────────┼──────┼─────────────┼─────────────────┼─────────┼───────────────┤
│ server2 │ 192.168.150.14 │ 3306 │ 1 │ Slave, Running │ 0-11-19 │ MySQL-Monitor │
├─────────┼────────────────┼──────┼─────────────┼─────────────────┼─────────┼───────────────┤
│ server3 │ 192.168.150.15 │ 3306 │ 0 │ Running │ 0-11-13 │ MySQL-Monitor │
└─────────┴────────────────┴──────┴─────────────┴─────────────────┴─────────┴───────────────┘
会发现进行读操作时,是在slave的从数据库上执行;在进行写操作时,是在master主数据库上执行。
更多推荐



所有评论(0)