LNMP+HAProxy+Keepalived負載均衡(四)- MySQL雙機互備及自動備份

前三篇已實現了最基本的負載均衡,可是還存在問題,如兩個數據庫不一樣步,上傳的附件不一樣步,數據庫沒有制定備份計劃,負載均衡參數還有待優化等問題。這裏先把雙機互備和自動備份的內容補齊。mysql

  • 配置MySQL數據庫的帳戶密碼(如下命令僅用參考,這裏的目的是要有一個可供內網其餘服務器訪問本機數據庫的帳戶);sql

    # 中止數據庫服務
    service mysql stop
    # 免驗證啓動數據庫服務
    mysqld --user=mysql --skip-grant-tables --skip-networking
    # 登陸mysql
    mysql -u root mysql
    # 修改用戶密碼的幾種方式
    mysql> UPDATE user SET authentication_string=PASSWORD('dbpwd') where USER='dbadmin';
    mysql> UPDATE user SET authentication_string=PASSWORD('dbpwd') where USER='dbbaker';
    mysql> UPDATE user SET Password=PASSWORD('dbpwd') where USER='dbadmin';
    mysql> alter user user() identified by "dbpwd";
    # 使配置生效
    mysql> FLUSH PRIVILEGES;
    mysql> quit;
    
    # 重啓mysql服務,注意,這裏的mysql若是找不到服務,能夠嘗試mysqld,再不行就經過ps -ef | grep mysql找到進程ID(pid),而後經過kill -9 pid中止服務;
    service mysql restart
    mysql -udbadmin -p
    # Enter password: <輸入新密碼newpassword>
    # 建立用戶並配置權限:
    mysql> GRANT ALL ON *.* TO 'dbadmin'@'%' IDENTIFIED BY 'dbpwd' WITH GRANT OPTION;
    # 移除權限
    # REVOKE ALL ON *.* TO 'dbadmin'@'%';
    FLUSH PRIVILEGES;
    # 全局層級:*.*
    # 數據庫層級:db_name.*
    # 表層級:db_name.tbl_name
    # ALL是指分配全部權限,具體權限能夠經過下面的查詢語句查看
    
    # 查詢用戶權限
    select * from mysql.user \G;
    # 刪除用戶
    # delete from mysql.user where Host <> '%';
    # 至此,數據庫能夠經過以上帳戶進行遠程鏈接了。
  • 配置MySQL的雙機互備 - 主數據庫服務器(192.168.6.200 /etc/my.cnf的配置請參考LNMP+HAProxy+Keepalived負載均衡(三)- 配置文件彙總);數據庫

    # 在主數據庫服務器上執行配置:
    vim /etc/my.cnf
    
    # 修改配置內容:
    server-id=6                           # 數據庫集羣中惟一
    lower_case_table_names=1              # 新增行,數據表不區分大小寫
    replicate_wild_do_table=sync_db_name.%   # 只同步「sync_db_name」庫下的表
    log-slave-updates=YES                # 從服務器同步後記錄日誌
    
    # 保存配置後重啓MySQL服務:
    service mysql restart
    # 進入MySQL命令行,查看主數據庫狀態信息,其中的「File」和「Position」值後面會用到:
    mysql> use sync_db_name;
    mysql> show master status;

    show master status;

  • 配置MySQL的雙機互備 - 備數據庫服務器(192.168.6.210);vim

    # 中止slave:
    mysql> stop slave;
    
    # 進入MySQL命令行,配置要同步的主庫來源:
    mysql> CHANGE MASTER TO MASTER_HOST='192.168.6.200',MASTER_PORT=10002,MASTER_USER='dbadmin',MASTER_PASSWORD='dbpwd',MASTER_LOG_FILE='mysql-bin.000016',MASTER_LOG_POS=1285;
    # MASTER_HOST:主數據庫的IP;
    # MASTER_PORT:主數據庫的端口(int),默認3306;
    # MASTER_USER,MASTER_PASSWORD:主數據庫帳戶、密碼;
    # MASTER_LOG_FILE:主數據庫中查詢到的「File」值;
    # MASTER_LOG_POS:主數據庫中查詢到的「Position」值;
    
    # 啓動slave:
    mysql> start slave;
    
    # 檢查slave:
    mysql> show slave status \G;
    
    # 命令行彙總:
    show master status;
    stop slave;

    Slave_IO_Running、Slave_SQL_Running 均顯示爲 Yes 說明主備同步服務正常運行,以下圖:
    show slave status G;segmentfault

  • 同步數據庫的初始狀態;
    在啓動同步服務前,還須要手動同步下數據庫的初始狀態,以後能夠經過修改其中主數據庫中的表來查看從數據庫是否同步變動;服務器

    # 鎖定要同步的數據庫(192.168.6.200):
    msyql> use sync_db_name;
    msyql> flush tables with read lock;
    # 將要同步的數據庫導出腳本:
    mysqldump -udbadmin -pdbpwd sync_db_name >/home/backup/sync_db_name.sql
    # 解鎖前面鎖定的數據庫:
    msyql> unlock tables;
    
    # 將上方備份的sql拷貝到從數據庫服務器(192.168.6.210),而後建立同名數據庫,恢復數據:
    msyql> create database sync_db_name;
    msyql> use sync_db_name;
    msyql> source /home/backup/sync_db_name.sql;
  • 作雙機互備或多機循環互備;
    而後將主從數據庫服務器反轉(即將192.168.6.200和192.168.6.210的主備身份調換),而後再配置一次同步便可。即192.168.6.200變動會同步到192.168.6.210,反之亦然。簡單講就是:
    雙機互備:A主B從 + A從B主;
    多機循環互備:A主B從 + B主C從 + C主N從 + N主A從(建議不要過多,尤爲是數據庫數據量大,且變動頻繁的狀況下,同步畢竟也是有延遲的);
  • 數據庫的自動備份(前三步前面的文章都有提到);負載均衡

    • 安裝計劃工具;ide

      yum -y install crontabs
    • 編輯MySQL的配置文件;工具

      vim /etc/my.cnf
      
      # 添加配置文件內容:
      [mysqldump]
      # 用於備份數據庫
      user=dbbaker
      password=dbpwd
    • 重啓數據庫服務;優化

      service mysql restart & service mysql status
    • 準備備份腳本;

      mkdir -p /home/bakup/lgd_system
      
      # 編輯bakdb.sh的內容:
      echo 'mysqldump sync_db_name | gzip > /home/backup/lgd_system/sync_db_name_$(date +%Y%m%d_%H%M%S).sql.gz' > /home/bakup/bakdb.sh
      chmod +x /home/bakcup/bakdb.sh
      
      # 解壓縮指定的備份文件:
      gunzip sync_db_name_*.gz
    • 添加備份計劃;

      # 方式一:
      crontab -e
      # 方式二:
      vim /etc/crontab
        
      # 編輯計劃:
      # Example of job definition:
      # .---------------- minute (0 - 59) *表示每分鐘
      # |  .------------- hour (0 - 23) *表示每小時
      # |  |  .---------- day of month (1 - 31) *表示天天
      # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ... *表示每個月
      # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat *表示天天
      # |  |  |  |  |
      # *  *  *  *  * user-name(用戶名)  command to be executed(腳本路徑)
      # 30 10 * * * /home/backup/bakdb.sh # 表示天天10:30執行一次備份腳本(前方的註釋去掉便可)
    • 計劃任務經常使用操做命令;

      service crond start     # 啓動服務
      service crond stop      # 關閉服務
      service crond restart   # 重啓服務
      service crond reload    # 從新載入配置
      service crond status    # 查看服務狀態
      tail -f /var/log/cron   # 查看執行日誌
    • 備份文件解壓縮

      gzip命令:
      選項參數:
      -c:將壓縮後的數據顯示到屏幕上,能夠用於重定向;
      -d:解壓縮的參數;
      -t:檢驗壓縮的一致性,看是否有錯誤;
      -v:顯示 源文件大小/壓縮文件大小 的壓縮比;
      -#:# 爲數字的意思,表明壓縮等級,-1 最快,可是壓縮比最差、-9 最慢,可是壓縮比最好!默認是 -6
      gzip -v  => 壓縮文件,-v查看壓縮比
      gzip -d 
      gunzip file.gz
相關文章
相關標籤/搜索