MySQL の読み取りと書き込みの分離と負荷分散を学習するためのテクニックは何ですか?
MySQL は、さまざまな Web アプリケーションやエンタープライズ レベルのシステムで広く使用されている、一般的に使用されるリレーショナル データベース管理システムです。アプリケーションの規模が増大するにつれ、データベースの読み取りおよび書き込みの負荷はますます重くなり、データベースのパフォーマンスとスケーラビリティを向上させるためには、読み取りと書き込みの分離と負荷分散が必要な技術的手段となっています。
読み取りと書き込みの分離とは、データベースの読み取り効率と容量を向上させるために、読み取り操作と書き込み操作を異なる MySQL サーバーに分離することを指します。負荷分散とは、データベースの負荷を分散するためにデータベース リクエストを複数の MySQL サーバーに分散することを指します。
以下では、MySQL の読み書き分離と負荷分散技術を学習するいくつかの方法と、それに対応するコード例を紹介します。
マスター/スレーブ レプリケーションは、最も基本的で一般的な読み取り/書き込み分離方法です。 1 つの MySQL サーバーをすべての書き込み操作の処理を担当するマスター サーバー (Master) として設定し、他の MySQL サーバーをすべての読み取り操作の処理を担当するスレーブ サーバー (Slave) として設定します。マスターサーバーは書き込み操作のログをスレーブサーバーに送信し、スレーブサーバーはそのログに基づいてデータの同期を実行します。
マスター/スレーブ レプリケーションを構成するコード例は次のとおりです。
マスター サーバーの構成ファイル (my.cnf) に次の構成を追加します。
[mysqld] server-id=1 log-bin=mysql-bin binlog-do-db=mydatabase
スレーブ サーバーの構成ファイルに次の構成を追加します。
[mysqld] server-id=2
マスター/スレーブ サーバーを再起動した後、次のコマンドでマスター/スレーブのステータスを確認できます:
SHOW MASTER STATUS; SHOW SLAVE STATUS;
# 创建一个与数据库对应的后端连接池 INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0, '192.168.0.1', 3306); INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (1, '192.168.0.2', 3306); # 创建读写分离规则 INSERT INTO mysql_query_rules(match_pattern, destination_hostgroup) VALUES ('^SELECT', 1); INSERT INTO mysql_query_rules(match_pattern, destination_hostgroup) VALUES ('^UPDATE', 0);
import org.apache.commons.dbcp2.BasicDataSource; public class ConnectionPoolDemo { public static void main(String[] args) { BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/mydatabase"); dataSource.setUsername("root"); dataSource.setPassword("password"); // 从连接池中获取连接 try (Connection connection = dataSource.getConnection()) { // 执行数据库操作 } catch (SQLException e) { e.printStackTrace(); } } }
以上がMySQL の読み取りと書き込みの分離と負荷分散を学習するためのテクニックは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。