当前位置:首页 > Ubuntu > 正文

Ubuntu数据库读写分离实战指南(手把手教你搭建MySQL主从复制实现读写分离)

在高并发的Web应用中,数据库往往成为性能瓶颈。为了提升系统性能和可用性,Ubuntu数据库读写分离是一种常见且高效的解决方案。本文将带你从零开始,在Ubuntu系统上配置MySQL主从复制,从而实现读写分离架构。即使你是Linux或数据库新手,也能轻松跟着操作。

什么是读写分离?

读写分离是指将数据库的“写”操作(如INSERT、UPDATE、DELETE)发送到主库(Master),而将“读”操作(如SELECT)分发到一个或多个从库(Slave)。这样可以有效减轻主库压力,提高整体查询性能,同时增强系统的数据库高可用架构能力。

Ubuntu数据库读写分离实战指南(手把手教你搭建MySQL主从复制实现读写分离) Ubuntu数据库读写分离 MySQL主从复制 Ubuntu MySQL配置 数据库高可用架构 第1张

环境准备

本教程使用两台Ubuntu 22.04服务器:

  • 主库(Master):IP地址为 192.168.1.10
  • 从库(Slave):IP地址为 192.168.1.11

确保两台服务器都已安装MySQL 8.0,并能互相通信(关闭防火墙或开放3306端口)。

第一步:配置主库(Master)

登录主库服务器,编辑MySQL配置文件:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

在[mysqld]部分添加或修改以下内容:

[mysqld]server-id        = 1log_bin          = /var/log/mysql/mysql-bin.logbinlog_do_db     = your_database_namebind-address     = 0.0.0.0

其中:
- server-id 必须唯一,主库设为1
- log_bin 启用二进制日志(主从复制必需)
- binlog_do_db 指定需要同步的数据库(可选,若留空则同步所有库)
- bind-address 改为0.0.0.0以允许远程连接

保存后重启MySQL服务:

sudo systemctl restart mysql

接下来,创建用于从库连接的复制用户:

mysql -u root -p-- 在MySQL命令行中执行CREATE USER 'repl_user'@'%' IDENTIFIED BY 'StrongPassword123!';GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';FLUSH PRIVILEGES;

记录主库当前的二进制日志位置:

SHOW MASTER STATUS;

输出类似如下,请记下 FilePosition 的值:

+------------------+----------+--------------+------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000001 |      156 | your_db      |                  |+------------------+----------+--------------+------------------+

第二步:配置从库(Slave)

编辑从库的MySQL配置文件:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

修改以下参数:

[mysqld]server-id        = 2relay-log        = /var/log/mysql/mysql-relay-bin.logread_only        = 1

注意:server-id 必须与主库不同,这里设为2。
重启从库MySQL:

sudo systemctl restart mysql

在从库MySQL中配置主从连接:

mysql -u root -p-- 替换为你自己的主库IP、用户名、密码以及之前记录的File和PositionCHANGE MASTER TO  MASTER_HOST='192.168.1.10',  MASTER_USER='repl_user',  MASTER_PASSWORD='StrongPassword123!',  MASTER_LOG_FILE='mysql-bin.000001',  MASTER_LOG_POS=156;START SLAVE;

检查从库状态:

SHOW SLAVE STATUS\G

关键看这两项是否为“Yes”:

  • Slave_IO_Running: Yes
  • Slave_SQL_Running: Yes

第三步:验证读写分离

在主库创建测试数据库和表:

-- 主库执行CREATE DATABASE test_db;USE test_db;CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50));INSERT INTO users (name) VALUES ('Alice');

稍等几秒后,在从库查询:

-- 从库执行USE test_db;SELECT * FROM users;

如果看到“Alice”,说明复制成功!此时,你的Ubuntu MySQL配置已完成基础读写分离。

后续建议

- 应用层需使用中间件(如ShardingSphere、MyCat)或代码逻辑将读请求路由到从库
- 定期监控主从延迟(Seconds_Behind_Master)
- 考虑多从库部署以进一步提升读性能

通过以上步骤,你已经成功在Ubuntu上搭建了基于MySQL主从复制的读写分离架构。这不仅提升了数据库性能,也为构建高可用系统打下坚实基础。掌握Ubuntu数据库读写分离MySQL主从复制Ubuntu MySQL配置数据库高可用架构这四大核心技能,将让你在运维和开发中更加游刃有余!