在高并发的Web应用中,数据库往往成为性能瓶颈。为了提升系统性能和可用性,Ubuntu数据库读写分离是一种常见且高效的解决方案。本文将带你从零开始,在Ubuntu系统上配置MySQL主从复制,从而实现读写分离架构。即使你是Linux或数据库新手,也能轻松跟着操作。
什么是读写分离?
读写分离是指将数据库的“写”操作(如INSERT、UPDATE、DELETE)发送到主库(Master),而将“读”操作(如SELECT)分发到一个或多个从库(Slave)。这样可以有效减轻主库压力,提高整体查询性能,同时增强系统的数据库高可用架构能力。
环境准备
本教程使用两台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;
输出类似如下,请记下
File和
Position的值:
+------------------+----------+--------------+------------------+| 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配置和数据库高可用架构这四大核心技能,将让你在运维和开发中更加游刃有余!
