在Linux上使用MySQL进行读写分离,通常涉及设置主从复制(Master-Slave Replication)环境。以下是实现MySQL读写分离的基本步骤:
1. 安装MySQL
确保在主服务器和从服务器上都安装了MySQL。
sudo apt update sudo apt install mysql-server
2. 配置主服务器(Master)
编辑主服务器的MySQL配置文件(通常是/etc/mysql/my.cnf
或/etc/my.cnf
)。
sudo nano /etc/mysql/my.cnf
在[mysqld]
部分添加以下内容:
server-id=1 log_bin=/var/log/mysql/mysql-bin.log binlog_format=ROW
重启MySQL服务:
sudo systemctl restart mysql
3. 配置从服务器(Slave)
编辑从服务器的MySQL配置文件(通常是/etc/mysql/my.cnf
或/etc/my.cnf
)。
sudo nano /etc/mysql/my.cnf
在[mysqld]
部分添加以下内容:
server-id=2 relay_log=/var/log/mysql/mysql-relay-bin.log relay_log_index=/var/log/mysql/mysql-relay-bin.index read_only=ON
重启MySQL服务:
sudo systemctl restart mysql
4. 在主服务器上创建用户并授权
登录到主服务器并创建一个用于复制的用户:
mysql -u root -p
创建用户并授权:
CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;
5. 获取主服务器的二进制日志坐标
在主服务器上获取当前的二进制日志文件和位置:
SHOW MASTER STATUS;
记下File
和Position
的值。
6. 配置从服务器连接到主服务器
在从服务器上配置连接到主服务器:
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='recorded_file_name', MASTER_LOG_POS=recorded_position;
7. 启动从服务器复制进程
在从服务器上启动复制进程:
START SLAVE;
8. 验证复制状态
在从服务器上验证复制状态:
SHOW SLAVE STATUS\G;
确保Slave_IO_Running
和Slave_SQL_Running
都是YES
。
9. 使用负载均衡器或应用程序进行读写分离
你可以使用Nginx、HAProxy等负载均衡器,或者在应用程序中使用数据库连接池来分配读操作到从服务器,写操作到主服务器。
例如,在应用程序中使用Python的mysql-connector-python
库:
import mysql.connector def get_connection(is_write): if is_write: return mysql.connector.connect(user='root', password='password', host='master_ip', database='database_name') else: return mysql.connector.connect(user='repl', password='password', host='slave_ip', database='database_name') # 读操作 conn = get_connection(False) cursor = conn.cursor() cursor.execute("SELECT * FROM table_name") result = cursor.fetchall() # 写操作 conn = get_connection(True) cursor = conn.cursor() cursor.execute("INSERT INTO table_name (column1, column2) VALUES (%s, %s)", ('value1', 'value2')) conn.commit()
通过以上步骤,你可以在Linux上实现MySQL的读写分离。