溫馨提示×

LNMP環境下如何實現數據同步

小樊
33
2025-08-11 02:46:03
欄目: 編程語言

在LNMP(Linux, Nginx, MySQL, PHP)環境下實現數據同步,通常涉及以下幾個方面:

  1. 數據庫同步

    • 主從復制:配置MySQL的主從復制,將主服務器的數據實時復制到從服務器。主服務器處理寫操作,從服務器處理讀操作,從而提高性能和可用性。
    • 讀寫分離:通過配置Nginx或PHP代碼,將讀請求分發到從服務器,寫請求發送到主服務器。
  2. 文件同步

    • rsync:使用rsync工具定期同步文件目錄,確保Web服務器上的文件與數據庫服務器或其他服務器上的文件保持一致。
    • inotify:利用Linux的inotify機制監控文件變化,實時同步文件。
  3. 緩存同步

    • Redis/Memcached:如果使用Redis或Memcached作為緩存,可以配置它們在不同服務器之間同步數據。

數據庫同步

主從復制配置

  1. 配置主服務器: 編輯MySQL配置文件(通常是/etc/my.cnf/etc/mysql/my.cnf),添加以下內容:

    [mysqld]
    server-id = 1
    log_bin = /var/log/mysql/mysql-bin.log
    binlog_do_db = your_database_name
    
  2. 重啟MySQL服務

    sudo systemctl restart mysql
    
  3. 創建復制用戶: 在主服務器上創建一個用于復制的用戶,并授予相應的權限:

    CREATE USER 'replicator'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
    FLUSH PRIVILEGES;
    
  4. 獲取二進制日志位置: 在主服務器上執行以下命令,獲取當前的二進制日志位置:

    SHOW MASTER STATUS;
    
  5. 配置從服務器: 編輯MySQL配置文件,添加以下內容:

    [mysqld]
    server-id = 2
    relay_log = /var/log/mysql/mysql-relay-bin.log
    log_bin = /var/log/mysql/mysql-bin.log
    replicate_do_db = your_database_name
    
  6. 重啟MySQL服務

    sudo systemctl restart mysql
    
  7. 設置主服務器信息: 在從服務器上執行以下命令,設置主服務器的信息:

    CHANGE MASTER TO
    MASTER_HOST='master_ip',
    MASTER_USER='replicator',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=123;
    START SLAVE;
    
  8. 檢查復制狀態: 在從服務器上執行以下命令,檢查復制狀態:

    SHOW SLAVE STATUS\G
    

讀寫分離

  1. 配置Nginx: 使用Nginx的upstream模塊配置讀寫分離:

    upstream backend {
        server master_ip write;
        server slave_ip read;
    }
    
    server {
        listen 80;
        server_name example.com;
    
        location / {
            proxy_pass http://backend;
        }
    }
    
  2. 配置PHP代碼: 在PHP代碼中根據操作類型(讀或寫)選擇不同的數據庫連接:

    $write_db = new PDO('mysql:host=master_ip;dbname=your_database_name', 'username', 'password');
    $read_db = new PDO('mysql:host=slave_ip;dbname=your_database_name', 'username', 'password');
    
    // 寫操作
    $write_db->exec("INSERT INTO table_name (column) VALUES ('value')");
    
    // 讀操作
    $stmt = $read_db->query("SELECT * FROM table_name");
    

文件同步

使用rsync

  1. 安裝rsync

    sudo apt-get install rsync
    
  2. 配置rsync: 創建一個rsync配置文件(例如/etc/rsyncd.conf),配置同步目錄和權限:

    [sync_dir]
    path = /path/to/sync_dir
    comment = Sync Directory
    read only = no
    list = yes
    auth users = user
    secrets file = /etc/rsyncd.secrets
    
  3. 創建secrets文件: 創建并編輯/etc/rsyncd.secrets文件,添加用戶名和密碼:

    user:password
    
  4. 設置權限

    sudo chmod 600 /etc/rsyncd.secrets
    
  5. 啟動rsync服務

    sudo rsync --daemon
    
  6. 同步文件: 在目標服務器上執行以下命令進行同步:

    rsync -avz -e ssh user@source_ip::sync_dir /path/to/local/sync_dir
    

使用inotify

  1. 安裝inotify-tools

    sudo apt-get install inotify-tools
    
  2. 編寫腳本: 編寫一個腳本監控文件變化并同步:

    #!/bin/bash
    inotifywait -m -r -e modify,attrib,close_write,move,create,delete /path/to/source_dir |
    while read path action file; do
        rsync -avz /path/to/source_dir/ user@target_ip:/path/to/target_dir/
    done
    
  3. 運行腳本

    nohup ./sync_script.sh &
    

緩存同步

Redis/Memcached

  1. 安裝Redis/Memcached

    sudo apt-get install redis-server
    # 或者
    sudo apt-get install memcached
    
  2. 配置Redis/Memcached: 根據需要配置Redis或Memcached,確保它們在不同服務器之間可以通信。

  3. 同步數據: 使用Redis的發布/訂閱功能或Memcached的分布式鎖機制來同步數據。

通過以上步驟,你可以在LNMP環境下實現數據同步,提高系統的性能和可用性。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女