proxySQL+mysql8.0一主双从+springboot配置

准备环境:

Ubuntu 22.04.3 LTS(四台虚拟机)

mysql8.0.35

proxySQL2.5.5

要在 Ubuntu 上为 MySQL 8.0 搭建主从复制,你需要两台 Ubuntu 服务器:一台作为主(Master)服务器,另一台作为从(Slave)服务器。以下是详细步骤来设置 MySQL 主从复制。

第 1 步:在两个服务器上安装 MySQL 8.0

更新包索引:

bash 复制代码
sudo apt update

安装 MySQL 服务器:

bash 复制代码
sudo apt install mysql-server

第 2 步:配置主服务器

以 root 用户登录到 MySQL:

bash 复制代码
sudo mysql -u root -p

编辑 MySQL 的配置文件 my.cnf 或 mysqld.cnf:

bash 复制代码
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

在 [mysqld] 部分中,进行以下设置:

server-id = 1

bind-address = 0.0.0.0

log_bin = /var/log/mysql/mysql-bin.log

binlog_do_db = DBname(数据库名称)

注意:bind-address 的值要设为主服务器的实际 IP 地址或 0.0.0.0 以允许远程连接。

重启 MySQL 服务使改变生效:

bash 复制代码
sudo systemctl restart mysql

创建用于复制的 MySQL 用户:

bash 复制代码
CREATE USER 'replicator'@'%' IDENTIFIED BY 'your_replicator_password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;

查找初始复制位置:

SQL

SHOW MASTER STATUS;

记录下 File 和 Position 的值(如: mysql-bin.000001 和 154),稍后配置从服务器时会用到。

第 3 步:配置从服务器

按照相同的方式安装 MySQL 并访问 MySQL Shell。

编辑 MySQL 的配置文件:

bash 复制代码
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

在 [mysqld] 部分中,进行以下设置:

server-id = 2(设置 server-id 为唯一的值,不同于主服务器的 server-id,例如设置为 2。)

relay_log = /var/log/mysql/mysql-relay-bin.log

log_bin = /var/log/mysql/mysql-bin.log

read_only = 1 (只读)

binlog_do_db = DBname(数据库名称)

重启 MySQL 服务:

bash 复制代码
sudo systemctl restart mysql

为复制配置从服务器:

bash 复制代码
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='replicator',
MASTER_PASSWORD='your_replicator_password',
MASTER_LOG_FILE='recorded_log_file_name',
MASTER_LOG_POS=recorded_log_position;

将 master_ip 换成主服务器的 IP 地址,recorded_log_file_name 和 recorded_log_position 替换为之前记下的值。

启动复制进程:

bash 复制代码
START SLAVE;

检查从服务器的复制状态:

bash 复制代码
SHOW SLAVE STATUS\G

查看 Slave_IO_Running 和 Slave_SQL_Running 是否都是 Yes。

完成以上步骤后,你现在应该有一个运行在 Ubuntu 上并配置了 MySQL 8.0 主从复制的环境。务必在实际的生产部署前进行充分的测试和调整,以满足具体需求和性能标准。

proxySQL准备

配置 APT 存储库(这里我两个都运行了)

bash 复制代码
apt-get update && apt-get install -y --no-install-recommends lsb-release wget apt-transport-https ca-certificates gnupg
wget -O - 'https://repo.proxysql.com/ProxySQL/proxysql-2.5.x/repo_pub_key' | apt-key add -
echo "deb https://repo.proxysql.com/ProxySQL/proxysql-2.5.x/$(lsb_release -sc)/ ./" | tee /etc/apt/sources.list.d/proxysql.list

或对于没有 apt-key 的发行版 注意:在较旧的 EOL 发行版(Ubuntu 14.04、Debian 8)上,由于 CA 证书过期,您可能需要使用 http:// 而不是 https:// 或手动更新 CA 证书

bash 复制代码
apt-get update && apt-get install -y --no-install-recommends lsb-release wget apt-transport-https ca-certificates
wget -nv -O /etc/apt/trusted.gpg.d/proxysql-2.5.x-keyring.gpg 'https://repo.proxysql.com/ProxySQL/proxysql-2.5.x/repo_pub_key.gpg'
echo "deb https://repo.proxysql.com/ProxySQL/proxysql-2.5.x/$(lsb_release -sc)/ ./" | tee /etc/apt/sources.list.d/proxysql.list

安装软件包

bash 复制代码
apt-get -y update
apt-get -y install proxysql

在这台proxySQL的虚拟机上也需要安装个mysql才能到proxysql管理层(这边不详细说mysql安装过程了)

连接到ProxySQL管理界面:

bash 复制代码
mysql -u admin -padmin -h 127.0.0.1 -P 6032

这里使用了默认的用户名(admin)和密码(admin),请按实际情况替换它们。

b. 配置后端MySQL服务器:

SQL

复制代码

bash 复制代码
INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (10,'<主库IP>',3306);
INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (20,'<从库1_IP>',3306);
INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (20,'<从库2_IP>',3306);
bash 复制代码
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;

这里的hostgroup_id是用来区分主库和从库的标识符,通常10用于主库,20用于从库。

c. 配置监控用户:

bash 复制代码
INSERT INTO mysql_users(username, password, default_hostgroup) VALUES ('monitor', '<监控用户密码>', 10);
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;

d. 配置复制主从规则:

bash 复制代码
INSERT INTO mysql_replication_hostgroups(writer_hostgroup, reader_hostgroup) VALUES (10, 20);
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;

e. 配置查询规则(可选):

bash 复制代码
INSERT INTO mysql_query_rules(active, match_digest, destination_hostgroup, apply) VALUES(1, '^SELECT.*FOR UPDATE$', 10, 1);
INSERT INTO mysql_query_rules(active, match_digest, destination_hostgroup, apply) VALUES(1, '^SELECT', 20, 1);
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;
以上配置将所有的SELECT ... FOR UPDATE查询发送到主库,而普通的SELECT查询则会被发送到从库。

注意大坑

proxysql目前安装最新的 内置的mysql版本也才是5.5.30的 所以如果你的数据库是8.0及以上的

一定要记得修改proxysql内置mysql的版本号 登上proxysql的应用端执行以下命令

bash 复制代码
update global_variables set variable_value="8.0.4 (ProxySQL)" where variable_name='mysql-server_version';

#那个版本号8.0.4 你可以随意改 只要是8.0以上的就行

bash 复制代码
load mysql variables to run;
save mysql variables to disk;

配置Spring Boot应用程序

在Spring Boot应用程序中,您的application.properties或application.yml配置文件需要指定连接到ProxySQL的实例而不是直接连接MySQL服务器。

application.yml

bash 复制代码
spring:
  datasource:
    url: jdbc:mysql://<ProxySQL-IP>:6033/dbname
    username: <数据库用户名>
    password: <数据库密码>
    driver-class-name: com.mysql.jdbc.Driver
相关推荐
陈随易3 分钟前
兔小巢收费引发的论坛调研Node和Deno有感
前端·后端·程序员
聪明的墨菲特i8 分钟前
Django前后端分离基本流程
后端·python·django·web3
hlsd#1 小时前
go mod 依赖管理
开发语言·后端·golang
陈大爷(有低保)1 小时前
三层架构和MVC以及它们的融合
后端·mvc
亦世凡华、1 小时前
【启程Golang之旅】从零开始构建可扩展的微服务架构
开发语言·经验分享·后端·golang
河西石头1 小时前
一步一步从asp.net core mvc中访问asp.net core WebApi
后端·asp.net·mvc·.net core访问api·httpclient的使用
2401_857439691 小时前
SpringBoot框架在资产管理中的应用
java·spring boot·后端
怀旧6661 小时前
spring boot 项目配置https服务
java·spring boot·后端·学习·个人开发·1024程序员节
weixin_449310841 小时前
高效集成:聚水潭采购数据同步到MySQL
android·数据库·mysql
CodingBrother1 小时前
MySQL 和 PostgreSQL 的使用案例
mysql·adb·postgresql