MySQL中间件之ProxySQL(2):Admin管理接口

本文介绍了MySQL中间件ProxySQL的Admin管理接口,包括默认端口、连接方式以及如何通过管理界面进行配置。内容涉及admin-admin_credentials、admin-stats_credentials和admin-mysql_ifaces等关键变量的设置,强调了在线配置ProxySQL的便捷性和安全性。
一、ProxySQL的Admin管理接口

当Proxysql启动后,将监听两个端口:

  • admin管理接口,默认端口为6032。该端口用于查看、配置ProxySQL。
  • 接收SQL语句的接口,默认端口为6033,这个接口类似于MySQL的3306端口。

image

ProxySQL的admin管理接口是一个使用MySQL协议的接口,所以,可以直接使用mysql客户端、navicat等工具去连接这个管理接口。

通过管理界面配置ProxySQL

例如:使用mysql客户端,并使用以下admin凭据在本地端口(6032)上进行连接。默认账号密码admin:admin

[root@mysql8 ~]# mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt='Admin> '
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.30 (ProxySQL Admin Module)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

Admin> 

Admin> show databases;
+-----+---------------+-------------------------------------+
| seq | name          | file                                |
+-----+---------------+-------------------------------------+
| 0   | main          |                                     |
| 2   | disk          | /var/lib/proxysql/proxysql.db       |
| 3   | stats         |                                     |
| 4   | monitor       |                                     |
| 5   | stats_history | /var/lib/proxysql/proxysql_stats.
<think> 我们正在构建一个包含多个组件的Web应用架构,包括: - 前端代理Nginx服务器 (192.168.20.40) - Nginx服务器 (192.168.20.50) - PHP应用服务器兼MySQL主服务器 (192.168.20.60) - 两个MySQL从服务器 (192.168.20.70, 192.168.20.80) - ProxySQL服务器 (192.168.20.90) 步骤概述: 1. 前端代理Nginx配置(负载均衡) 2. Nginx服务器配置(处理静态文件,并将PHP请求转发给PHP应用服务器) 3. PHP应用服务器配置(安装PHP并配置,同时作为MySQL主服务器) 4. MySQL主从复制配置(主服务器在192.168.20.60,从服务器在192.168.20.70和192.168.20.80) 5. ProxySQL配置(作为数据库中间件,实现读写分离和负载均衡) 6. 测试整个架构 注意:本文档假设所有服务器操作系统均为Linux(如CentOS或Ubuntu),并已安装基本环境。具体命令可能因系统不同而略有差异。 详细步骤: ## 1. 前端代理Nginx服务器 (192.168.20.40) 的配置 安装Nginx并配置为负载均衡器,将请求分发到后端的Nginx服务器(192.168.20.50)和可能存在的其他Nginx服务器(这里只有一个后端Nginx服务器,但配置可扩展)。 编辑Nginx配置文件(如`/etc/nginx/nginx.conf`或`/etc/nginx/conf.d/default.conf`): ```nginx http { upstream backend_nginx { server 192.168.20.50:80; # 后端Nginx服务器 # 如果有多个,继续添加 } server { listen 80; server_name your_domain.com; location / { proxy_pass http://backend_nginx; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } } ``` 重启Nginx服务: ```bash systemctl restart nginx ``` ## 2. Nginx服务器 (192.168.20.50) 的配置 在这个架构中,192.168.20.50作为应用层的Nginx服务器,负责处理静态文件,并将PHP请求转发给后端的PHP应用服务器(192.168.20.60)。 安装Nginx和必要的模块(如支持PHP的代理模块)。 配置Nginx: ```nginx server { listen 80; server_name your_domain.com; root /path/to/your/webroot; # 静态文件的根目录 index index.php index.html index.htm; location / { try_files $uri $uri/ =404; } # 将PHP请求转发给PHP应用服务器 location ~ \.php$ { proxy_pass http://192.168.20.60:80; # 这里假设PHP应用服务器监听80端口,实际可能不同 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` 重启Nginx: ```bash systemctl restart nginx ``` 注意:这里我们直接将PHP请求代理到PHP应用服务器,但也可以使用FastCGI(如果PHP应用服务器上运行的是PHP-FPM)进行转发。但根据架构,PHP应用服务器是单独的一台,且运行着PHP应用(可能是一个Web服务器,如Nginx+PHP-FPM或Apache+PHP),所以我们使用代理方式。 ## 3. PHP应用服务器兼MySQL主服务器 (192.168.20.60) 的配置 这台服务器需要同时运行PHP应用和MySQL主服务器。 ### 3.1 配置PHP应用服务器 安装Web服务器(这里以Nginx+PHP-FPM为例): 安装Nginx和PHP-FPM以及必要的PHP扩展。 配置Nginx(监听80端口)处理PHP请求: ```nginx server { listen 80; server_name your_domain.com; root /path/to/php/application; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 根据实际版本调整 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } ``` 重启Nginx和PHP-FPM。 ### 3.2 配置MySQL主服务器 安装MySQL,并配置为主服务器。 编辑MySQL配置文件(`/etc/mysql/my.cnf`或`/etc/my.cnf`): ```ini [mysqld] server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = your_database_name # 需要复制的数据库,如果有多个,重复配置 # 其他配置... ``` 重启MySQL服务: ```bash systemctl restart mysql ``` 创建用于复制的用户: ```sql CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%'; FLUSH PRIVILEGES; ``` 记录主服务器的二进制日志位置: ```sql SHOW MASTER STATUS; ``` 记录File和Position,供从服务器使用。 ## 4. MySQL从服务器 (192.168.20.70, 192.168.20.80) 的配置 分别在两台从服务器上安装MySQL,并配置为从服务器。 编辑MySQL配置文件(每台server-id唯一): 对于192.168.20.70: ```ini [mysqld] server-id = 2 ``` 对于192.168.20.80: ```ini [mysqld] server-id = 3 ``` 重启MySQL服务。 在每台从服务器上配置复制: ```sql CHANGE MASTER TO MASTER_HOST='192.168.20.60', MASTER_USER='repl_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='记录的文件名', MASTER_LOG_POS=记录的Position; START SLAVE; ``` 检查复制状态: ```sql SHOW SLAVE STATUS\G; ``` 确保Slave_IO_Running和Slave_SQL_Running都为Yes。 ## 5. ProxySQL服务器 (192.168.20.90) 的配置 ProxySQL作为数据库中间件,将应用层的数据库请求路由到MySQL主从服务器。 安装ProxySQL(请参照官方文档安装最新版本)。 启动ProxySQL服务: ```bash systemctl start proxysql ``` 登录到ProxySQL管理界面(默认端口6032): ```bash mysql -u admin -padmin -h 127.0.0.1 -P 6032 ``` 配置后端MySQL服务器: ```sql INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0, '192.168.20.60', 3306), -- 主服务器,hostgroup_id为0(写组) (1, '192.168.20.70', 3306), -- 从服务器1,hostgroup_id为1(读组) (1, '192.168.20.80', 3306); -- 从服务器2,hostgroup_id为1(读组) LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK; ``` 配置监控用户(在MySQL主服务器上创建,并授予权限): ```sql CREATE USER 'monitor'@'%' IDENTIFIED BY 'monitor_password'; GRANT SELECT, REPLICATION CLIENT ON *.* TO 'monitor'@'%'; ``` 在ProxySQL中设置监控用户: ```sql SET mysql-monitor_username='monitor'; SET mysql-monitor_password='monitor_password'; LOAD MYSQL VARIABLES TO RUNTIME; SAVE MYSQL VARIABLES TO DISK; ``` 配置应用访问数据库的用户(在MySQL主服务器上创建,并授予权限): ```sql CREATE USER 'app_user'@'%' IDENTIFIED BY 'app_password'; GRANT ALL PRIVILEGES ON your_database_name.* TO 'app_user'@'%'; ``` 在ProxySQL中配置该用户: ```sql INSERT INTO mysql_users(username, password, default_hostgroup) VALUES ('app_user', 'app_password', 0); -- 默认路由到写组(主服务器) LOAD MYSQL USERS TO RUNTIME; SAVE MYSQL USERS TO DISK; ``` 配置读写分离规则: ```sql -- 将写操作路由到写组(hostgroup 0) INSERT INTO mysql_query_rules (rule_id, active, match_digest, destination_hostgroup, apply) VALUES (1, 1, '^SELECT.*FOR UPDATE', 0, 1); -- 写操作 -- 将读操作路由到读组(hostgroup 1) INSERT INTO mysql_query_rules (rule_id, active, match_digest, destination_hostgroup, apply) VALUES (2, 1, '^SELECT', 1, 1); -- 读操作 LOAD MYSQL QUERY RULES TO RUNTIME; SAVE MYSQL QUERY RULES TO DISK; ``` 应用服务器(192.168.20.60)中的PHP应用应该配置使用ProxySQL的地址(192.168.20.90)和端口(6033)来访问数据库,而不是直接连接MySQL主服务器。 ## 6. 测试整个架构 1. 通过前端代理Nginx访问Web应用,确保静态文件由Nginx服务器(192.168.20.50)提供,PHP请求由PHP应用服务器(192.168.20.60)处理。 2. 在PHP应用中执行写操作,检查是否写入主库(192.168.20.60),并通过复制同步到从库(192.168.20.70和192.168.20.80)。 3. 执行读操作,检查是否由ProxySQL路由到从库。 注意:以上配置是基础示例,实际生产环境需要根据具体需求调整安全设置、优化参数和高可用方案。 参考文献: [1] Nginx负载均衡配置 [2] ProxySQL官方文档 §§相关问题§§ 1. 如何监控MySQL主从复制的延迟? 2. ProxySQL如何实现读写分离的故障转移? 3. 如何优化PHP应用服务器的性能? 4. 在这个架构中,如何实现高可用? 5. 如何备份和恢复这个架构中的数据库? </think> ### 完整Web应用架构搭建配置指南 以下是包含Nginx、PHP、MySQL主从复制和ProxySQL的完整Web应用架构配置方法,按照服务器角色分步说明: --- #### **1. 前端代理Nginx服务器 (192.168.20.40)** **作用**:负载均衡和反向代理 **配置步骤**: ```nginx # /usr/local/nginx/conf/nginx.conf http { upstream app_servers { server 192.168.20.50:80 weight=10; # 后端Nginx服务器 # 可扩展添加其他应用服务器 } server { listen 80; server_name www.yourdomain.com; location / { proxy_pass http://app_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } } ``` **操作命令**: ```bash /usr/local/nginx/sbin/nginx -s reload # 重启生效[^2] ``` --- #### **2. Nginx服务器 (192.168.20.50)** **作用**:静态资源处理和PHP请求转发 **配置步骤**: ```nginx # /usr/local/nginx/conf/nginx.conf server { listen 80; root /data/www; index index.php index.html; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_pass 192.168.20.60:9000; # PHP应用服务器 fastcgi_index index.php; include fastcgi_params; } } ``` --- #### **3. PHP应用服务器兼MySQL主服务器 (192.168.20.60)** **作用**:运行动态应用和MySQL主库 **PHP配置**: ```bash # 安装PHP-FPM yum install php-fpm php-mysqlnd systemctl start php-fpm # 配置PHP-FPM监听端口 # /etc/php-fpm.d/www.conf listen = 0.0.0.0:9000 ``` **MySQL主库配置**: ```ini # /etc/my.cnf [mysqld] server-id=1 log-bin=mysql-bin binlog-do-db=your_db # 需复制的数据库 ``` ```sql # MySQL操作 CREATE USER 'repl_user'@'%' IDENTIFIED BY 'Slave@123'; GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%'; FLUSH PRIVILEGES; SHOW MASTER STATUS; # 记录File和Position[^1] ``` --- #### **4. MySQL从服务器 (192.168.20.70/80)** **作用**:数据复制和读操作分担 **配置步骤**: ```ini # 192.168.20.70配置 (/etc/my.cnf) [mysqld] server-id=2 # 192.168.20.80配置 [mysqld] server-id=3 ``` ```sql # 两台从服务器执行 CHANGE MASTER TO MASTER_HOST='192.168.20.60', MASTER_USER='repl_user', MASTER_PASSWORD='Slave@123', MASTER_LOG_FILE='mysql-bin.000001', # 主库show master状态值 MASTER_LOG_POS=154; START SLAVE; SHOW SLAVE STATUS\G; # 验证Slave_IO_Running: Yes ``` --- #### **5. ProxySQL服务器 (192.168.20.90)** **作用**:数据库中间件,读写分离 **配置流程**: ```sql # 登录ProxySQL管理接口 mysql -u admin -padmin -h 127.0.0.1 -P 6032 -- 添加后端服务器 INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (10, '192.168.20.60', 3306), -- 写组 (master) (20, '192.168.20.70', 3306), -- 读组 (slaves) (20, '192.168.20.80', 3306); -- 配置读写分离规则 INSERT INTO mysql_query_rules(rule_id, active, match_digest, destination_hostgroup) VALUES (1, 1, '^SELECT.*FOR UPDATE', 10), -- 写操作路由 (2, 1, '^SELECT', 20); -- 读操作路由 -- 设置监控用户 UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username'; LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK; ``` **应用层连接配置**: PHP应用需使用192.168.20.90:6033作为数据库地址 --- ### **架构验证要点** 1. **负载均衡**:访问前端Nginx(40)应轮询后端服务 2. **主从复制**:在主库(60)插入数据,从库(70/80)自动同步 3. **读写分离**:SELECT请求由ProxySQL路由到从库,INSERT路由到主库 4. **故障转移**:停止主库后,ProxySQL应自动将写操作标记为离线 [^1]: IP规划参考 [^2]: Nginx配置基础 [^3]: 端口转发配置逻辑 [^4]: Nginx编译参数 [^5]: 文件共享配置示例
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值