溫馨提示×

mysql命令在linux上如何進行讀寫分離

小樊
118
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
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女