在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的讀寫分離。