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
相关推荐
IT学长编程36 分钟前
计算机毕业设计 二手图书交易系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·课程设计·毕业论文·计算机毕业设计选题·二手图书交易系统
艾伦~耶格尔2 小时前
Spring Boot 三层架构开发模式入门
java·spring boot·后端·架构·三层架构
man20172 小时前
基于spring boot的篮球论坛系统
java·spring boot·后端
Java探秘者2 小时前
Maven下载、安装与环境配置详解:从零开始搭建高效Java开发环境
java·开发语言·数据库·spring boot·spring cloud·maven·idea
攸攸太上2 小时前
Spring Gateway学习
java·后端·学习·spring·微服务·gateway
苹果醋33 小时前
大模型实战--FastChat一行代码实现部署和各个组件详解
java·运维·spring boot·mysql·nginx
罗曼蒂克在消亡3 小时前
graphql--快速了解graphql特点
后端·graphql
潘多编程3 小时前
Spring Boot与GraphQL:现代化API设计
spring boot·后端·graphql
大神薯条老师3 小时前
Python从入门到高手4.3节-掌握跳转控制语句
后端·爬虫·python·深度学习·机器学习·数据分析
2401_857622664 小时前
Spring Boot新闻推荐系统:性能优化策略
java·spring boot·后端