mysql主從複製

mysql 主從複製

基本命令:

  • 啓動mysql,這裏使用的是yum下載,因此使用systemctl管理html

    systemctl start mariadb
  • 遠程鏈接mysql服務端mysql

    mysql -uroot -p -h 192.168.11.11
    參數解釋: -u  用戶
          -p  密碼,可先不輸入,回車後輸入, 
          -h  服務端地址
  • 修改mysql密碼sql

    set password = PASSWORD('新密碼');
  • 建立mysql用戶數據庫

    create user yuncong@'%' identified by 'yuncong123';
    # 新建用戶 yuncong@任意地址可連,密碼yuncong123
  • 查詢mysql庫中的用戶信息vim

    # 進入mysql庫
    use mysql;
    
    # 查詢語句
    select host,user, password from user;
  • 受權語句服務器

    # 語法
    grant 權限 on 數據庫.表名 to 帳戶@主機名       對特定數據庫中的特定表受權
    grant 權限 on 數據庫.* to 帳戶@主機名         對特定數據庫中的全部表給與受權
    grant 權限1,權限2,權限3 on *.* to 帳戶@主機名      對全部庫中的全部表給與多個受權
    
    # 權限分類:
    查詢,插入,更新,新增
    select ,insert,update, create
    
    #yuncong用戶對全部數據庫中文件有任何操做
    grant all privileges  on *.*  to "yuncong"@'%';
  • 移除權限併發

    revoke all privileges on *.* from yuncong@"%";
  • 詳情請建立用戶和受權請看:https://www.cnblogs.com/yuncong/articles/10122719.html異步

數據庫備份與恢復

  • 使用mysqldump進行數據備份ide

    mysqldump -u root -p --all-databases > /tmp/db.dump

    使用scp將數據發送到須要用的設備中高併發

  • 數據導入

    # 登陸須要導入的數據庫以後
    source /tmp/db.dump

    或者

    mysql -uroot - < /tmp/db.dump

    基於mysqldump實現邏輯備份查看該博客https://www.cnblogs.com/yuncong/articles/10122695.html#autoid-1-0-0

mysql主從複製

  • 前言

    MySQL數據庫的主從複製方案,是其自帶的功能,而且主從複製並非複製磁盤上的數據,而是經過binlog日誌複製到須要同步的的從服務器上

  • mysql數據庫特色

    MySQL數據庫支持單向,雙向,鏈式級聯,等不一樣業務場景的複製,在複製的過程當中,一臺服務器充當主服務器(master),接收來自用戶的內容跟新,而一個或者多個其餘的服務器充當從服務器(slave),接收來自master上binlog文件的日誌內容,解析出SQL,從新更新到salve,使得主從服務器數據達到一致.

  • 主從複製的邏輯有如下幾種

    • 一主一從,單向主從同步模式,只能在master端寫入數據
    • 一主多從

    img

  • mysql主從複製優勢:

    在生產環境中,MySQL主從複製都是異步的複製方式,即不是嚴格的實時複製,可是給用戶的體驗都是實時的。
    MySQL主從複製集羣功能使得MySQL數據庫支持大規模高併發讀寫成爲可能,且有效的保護了服務器宕機的數據備份
  • 應用場景

    利用複製功能當master服務器出現問題時,咱們能夠從人工的切換到從服務器繼續提供服務,此時服務器的數據和宕機時數據幾乎是徹底一致的.

    複製功能也能夠用作數據本分,可是若是人爲IDE執行drop,delete等語句刪除,那麼從庫的備份功能也就失效了

  • 主從機制實現原理

    img

    (1) master將改變記錄到二進制日誌(binary log)中(這些記錄叫作二進制日誌事件,binary log events); 
    (2) slave將master的binary log events拷貝到它的中繼日誌(relay log); 
    (3) slave重作中繼日誌中的事件,將改變反映它本身的數據。

主從複製步驟

主庫操做
  1. 在master主庫上操做,開啓主庫功能

    # 先將mariadb服務端關閉
    systemctl stop mariadb 
    
    # 編輯/etc/my.cnf寫入如下信息
    [mysqld]
    server-id=10
    log-bin=qishi-logbin
    
    # 保存退出
    啓動mariadb服務端
    systemctl start mariadb
  2. 在主庫建立用戶,用戶同步數據

    create user yuanqing@'%' identified by 'yq666';

    授予普通用戶, slave的身份

    grant replication slave on *.* to 'yuanqing'@'%';
  3. 登陸mysql,鎖定數據庫的庫表,禁止寫入

    # 鎖定數據庫
    flush table with read lock;
    
    查看主庫的狀態,記錄下,日誌文件的名字和位置
    show master status;
  4. 退出mysql,導出主庫的數據

    mysqldump -u root -p --all-databases > /opt/db.dump   
    # 這裏的路徑要本身知道在哪
  5. 遠程傳輸主庫的數據,給從庫,進行導入

    scp /opt/db.dump   root@192.168.11.167:/opt/
  6. 解鎖主庫的鎖,寫入數據,查看從庫是否同步

    unlock tables;
從庫操做
  1. 關閉該從庫的數據庫

    systemctl stop mariadb
    
    # 查看進程確認
    ps -ef |grep mysql
  2. 在從庫的 /etc/my.cnf中添加參數,添加只讀參數

    vim /etc/my.cnf
    # 添加文本
    
    [mysqld]
    server-id=3
    read-only=true
  3. 重啓數據庫

    systemctl restart mariadb
  4. 導入主庫傳過來的數據

    mysql -uroot -p  <  /opt/db.dump 
    
    # 或者登陸mysql,使用source 
    source /opt/db.dump
  5. 登陸mysql,,輸入命令開啓主從之間的複製關係

    change master to master_host='192.168.11.96',
    master_user='yuanqing',
    master_password='yq666',
    master_log_file='qishi-logbin.000001',
    master_log_pos=871;
    
    
    # host 是主的地址,   master是主的用戶, password爲密碼,   log_file是主庫查詢的日誌,和pos
  6. 開啓slave同步功能

    start slave;
  7. 檢查slave機器的主從是否正確

    show slave status\G  #查看主從同步是否正確
  8. 確認查詢結果中的下列參數是不是yes,即主從複製正確

    Relay_Master_Log_File: qishi-logbin.000001
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
主庫操做

注意:

​ 此時mariadb數據庫,請退出root用戶,使用普通用戶配置,由於root身份權限太大,沒法達到read-only效果

​ 此時mariadb數據庫,請退出root用戶,使用普通用戶配置,由於root身份權限太大,沒法達到read-only效果

  1. 登陸普通用戶

    mysql -uyuanqing -p
  2. 此時在主庫寫入數據,查看從庫是否正確同步

  3. 從庫沒法寫入數據,即爲正常

相關文章
相關標籤/搜索