如何使用MySQL的主從複製實作讀寫分離架構
在傳統的網路應用程式中,讀寫作業通常都是連接到同一台資料庫伺服器上進行的。隨著應用程式的發展和存取量的增加,這種架構很容易導致資料庫的效能瓶頸。為了解決這個問題,可以使用MySQL的主從複製來實作讀寫分離架構。本文將介紹如何使用MySQL的主從複製實作讀寫分離,並提供對應的程式碼範例。
(1)開啟主資料庫的設定檔my.cnf,在末尾新增以下設定:
# 设置为主数据库 server-id=1 log-bin=mysql-bin
(2)重啟主資料庫:
$ sudo service mysql restart
(1)開啟從資料庫的設定檔my.cnf,在末尾新增以下配置:
# 设置为从数据库 server-id=2 relay-log=mysql-relay-bin
(2)重啟從資料庫:
$ sudo service mysql restart
在主資料庫上建立用於複製的用戶,並賦予相應的權限。執行下列指令:
mysql> CREATE USER 'replication'@'%' IDENTIFIED BY 'password'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%'; mysql> FLUSH PRIVILEGES;
在從資料庫執行下列指令,開始主從複製:
mysql> CHANGE MASTER TO MASTER_HOST='主数据库IP', MASTER_USER='replication', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0; mysql> START SLAVE;
在從資料庫上執行以下命令,可以查看主從複製的狀態:
mysql> SHOW SLAVE STATUS G
Slave_IO_Running: Yes Slave_SQL_Running: Yes
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class ReadWriteSeparationExample { public static void main(String[] args) { // 读操作连接从数据库 Connection readConn = null; String readUrl = "jdbc:mysql://从数据库IP:端口/数据库名"; String readUser = "用户名"; String readPassword = "密码"; try { readConn = DriverManager.getConnection(readUrl, readUser, readPassword); Statement readStmt = readConn.createStatement(); ResultSet readResult = readStmt.executeQuery("SELECT * FROM 表名"); while (readResult.next()) { // 处理查询结果 } readResult.close(); readStmt.close(); readConn.close(); } catch (SQLException e) { e.printStackTrace(); } // 写操作连接主数据库 Connection writeConn = null; String writeUrl = "jdbc:mysql://主数据库IP:端口/数据库名"; String writeUser = "用户名"; String writePassword = "密码"; try { writeConn = DriverManager.getConnection(writeUrl, writeUser, writePassword); Statement writeStmt = writeConn.createStatement(); writeStmt.execute("INSERT INTO 表名 VALUES(1, '数据')"); writeStmt.close(); writeConn.close(); } catch (SQLException e) { e.printStackTrace(); } } }
以上是如何使用MySQL的主從複製實作讀寫分離架構的詳細內容。更多資訊請關注PHP中文網其他相關文章!