linux

mysql命令在linux上如何进行读写分离

小樊
81
2024-12-11 14:30:28
栏目: 云计算

在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;

记下FilePosition的值。

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_RunningSlave_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的读写分离。

0
看了该问题的人还看了