在Linux上使用MySQL进行读写分离,通常涉及设置主从复制(Master-Slave Replication)环境。以下是实现MySQL读写分离的基本步骤:
确保在主服务器和从服务器上都安装了MySQL。
sudo apt update
sudo apt install mysql-server
编辑主服务器的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
编辑从服务器的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
登录到主服务器并创建一个用于复制的用户:
mysql -u root -p
创建用户并授权:
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
在主服务器上获取当前的二进制日志文件和位置:
SHOW MASTER STATUS;
记下File
和Position
的值。
在从服务器上配置连接到主服务器:
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='recorded_file_name',
MASTER_LOG_POS=recorded_position;
在从服务器上启动复制进程:
START SLAVE;
在从服务器上验证复制状态:
SHOW SLAVE STATUS\G;
确保Slave_IO_Running
和Slave_SQL_Running
都是YES
。
你可以使用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的读写分离。