Maison  >  Article  >  base de données  >  Comment utiliser la réplication maître-esclave de MySQL pour implémenter une architecture de séparation lecture-écriture

Comment utiliser la réplication maître-esclave de MySQL pour implémenter une architecture de séparation lecture-écriture

WBOY
WBOYoriginal
2023-08-02 09:21:29868parcourir

Comment utiliser la réplication maître-esclave de MySQL pour implémenter une architecture de séparation lecture-écriture

Dans les applications Web traditionnelles, les opérations de lecture et d'écriture sont généralement connectées au même serveur de base de données. À mesure que les applications se développent et que les volumes d’accès augmentent, cette architecture peut facilement entraîner des goulots d’étranglement dans les performances des bases de données. Afin de résoudre ce problème, la réplication maître-esclave de MySQL peut être utilisée pour implémenter une architecture de séparation lecture-écriture. Cet article explique comment utiliser la réplication maître-esclave de MySQL pour obtenir une séparation lecture-écriture et fournit des exemples de code correspondants.

  1. Préparation de l'environnement
    Tout d'abord, assurez-vous d'avoir installé MySQL sur le serveur et assurez-vous que les bases de données maître et esclave peuvent communiquer normalement. Si MySQL n'est pas encore installé, veuillez suivre la documentation officielle pour l'installer et le configurer.
  2. Configurez la base de données principale
    Configurez les éléments suivants sur la base de données principale :

(1) Ouvrez le fichier de configuration my.cnf de la base de données principale et ajoutez la configuration suivante à la fin :

# 设置为主数据库
server-id=1
log-bin=mysql-bin

(2) Redémarrez la base de données principale base de données esclave :

$ sudo service mysql restart
  1. Configurez la base de données esclave
    Configurez les éléments suivants sur la base de données esclave :

(1) Ouvrez le fichier de configuration my.cnf de la base de données esclave et ajoutez la configuration suivante à la fin :

# 设置为从数据库
server-id=2
relay-log=mysql-relay-bin

(2 ) Redémarrez la base de données esclave :

$ sudo service mysql restart
  1. Créer un utilisateur de réplication
    Créez un utilisateur pour la réplication sur la base de données principale et accordez les autorisations correspondantes. Exécutez la commande suivante :

    mysql> CREATE USER 'replication'@'%' IDENTIFIED BY 'password';
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';
    mysql> FLUSH PRIVILEGES;
  2. Démarrer la réplication maître-esclave
    Exécutez la commande suivante sur la base de données esclave pour démarrer la réplication maître-esclave :

    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;
  3. Vérifier la réplication maître-esclave
    Exécutez la commande suivante sur la base de données esclave pour afficher l'état de la réplication maître-esclave :

    mysql> SHOW SLAVE STATUS G

    Assurez-vous que les deux paramètres suivants ont la valeur "YES" :

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

    Si une erreur se produit, vous devez vérifier que la configuration de la réplication et la connexion à la base de données sont correctement configurées.

  4. Réaliser la séparation lecture-écriture
    Une fois la réplication maître-esclave configurée avec succès, la séparation lecture-écriture peut être réalisée. Dans l'application, la base de données esclave est connectée pour les opérations de lecture et la base de données maître est connectée pour les opérations d'écriture. Cela peut utiliser efficacement les ressources de la base de données et améliorer les performances et la stabilité du système.

Ce qui suit est un exemple de code utilisant le langage Java pour montrer comment connecter la base de données maître-esclave pour terminer l'opération de séparation en lecture-écriture :

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();
        }
    }
}

Ce qui précède sont les étapes et les exemples de code pour utiliser la réplication maître-esclave de MySQL pour implémenter l'architecture de séparation lecture-écriture. Grâce à cette architecture, les opérations de lecture peuvent être allouées à la base de données esclave, améliorant ainsi efficacement les performances et la stabilité du système. J'espère que cela aide!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn