• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    Mysql主從復制(master-slave)實際操作案例

    來源:懂視網 責編:小采 時間:2020-11-09 21:02:20
    文檔

    Mysql主從復制(master-slave)實際操作案例

    Mysql主從復制(master-slave)實際操作案例:在這一章節里, 我們來了解下如何在 Mysql 中進行用戶授權及主從復制 這里先來了解下 Mysql 主從復制的優點: 1、 如果主服務器出現問題, 可以快速切換到從服務器提供的服務 2、 可以在從服務器上執行查詢操作, 降低主服務器的訪問壓力 3、 可以在從服
    推薦度:
    導讀Mysql主從復制(master-slave)實際操作案例:在這一章節里, 我們來了解下如何在 Mysql 中進行用戶授權及主從復制 這里先來了解下 Mysql 主從復制的優點: 1、 如果主服務器出現問題, 可以快速切換到從服務器提供的服務 2、 可以在從服務器上執行查詢操作, 降低主服務器的訪問壓力 3、 可以在從服

    在這一章節里, 我們來了解下如何在 Mysql 中進行用戶授權及主從復制
     
    這里先來了解下 Mysql 主從復制的優點:
     
    1、 如果主服務器出現問題, 可以快速切換到從服務器提供的服務
    2、 可以在從服務器上執行查詢操作, 降低主服務器的訪問壓力
    3、 可以在從服務器上執行備份, 以避免備份期間影響主服務器的服務
    注意一般只有更新不頻繁的數據或者對實時性要求不高的數據可以通過從服務器查詢, 實時性要求高的數據仍然需要從主數據庫獲得
     
    在這里我們首先得完成用戶授權, 目的是為了給從服務器有足夠的權限來遠程登入到主服務器的 Mysql
     
    在這里我假設
    主服務器的 IP 為: 192.168.10.1
    從服務器的 IP 為: 192.168.10.2
     
    Mysql grant 用戶授權
     
    查看 Mysql 的用戶表
    代碼如下:
    msyql> mysql -uroot -p123123;
    msyql> select user, host, password from mysql.user;

    結果如下:
    代碼如下:+------------------+-----------+-------------------------------------------+
    | user             | host      | password                                  |
    +------------------+-----------+-------------------------------------------+
    | root             | localhost | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 |
    | root             | 127.0.0.1 | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 |
    +------------------+-----------+-------------------------------------------+
    從如上表中看以看出 root 用戶只能從本機登入 Mysql, 也就是來自 localhost 或者 127.0.0.1
     
    現在來通過 grant 命令來添加授權用戶
    代碼如下:
    msyql> ? grant   //查看 grant 的詳細用法
     
    msyql> grant all on *.* to user1@192.168.10.2 identified by "123456"; // *.* = 所有的數據庫.所有的表
    //或者
    msyql> grant replication slave on *.* to 'user2'@'192.168.10.%' identified by "123456"; // %代表通配符
    通過了 grant 命令給予了來自 192.168.10.2 的用戶 user1 權限, 允許其遠程登錄, 如下:
    代碼如下:
    +------------------+--------------+-------------------------------------------+
    | user             | host         | password                                  |
    +------------------+--------------+-------------------------------------------+
    | root             | localhost    | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 |
    | root             | 127.0.0.1    | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 |
    | user1            | 192.168.10.2 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
    | user2            | 192.168.10.% | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
    +------------------+--------------+-------------------------------------------+
    此時就可以在 192.168.10.2 的機器上訪問 10.1 的 Mysql 了, 如下:
    代碼如下:
    msyql> mysql -uuser1 -p123456 -h192.168.10.1;


    Mysql bin-log 日志
     
    開啟 bin-log 二進制日志, 它保存了所有增刪改的操作, 以便于數據恢復或同步

    修改主服務器 mysql 配置文件:
    代碼如下:shawn@Shawn:~$ sudo vi /etc/mysql/my.cnf;
     
    /********** my.cnf **********/
    [mysqld]
     
    #開啟慢查詢日志, 記錄查詢過長的 sql 語句,以便于優化
    log_slow_queries   = /var/log/mysql/mysql-slow.log
     
    #開啟 bin-log 日志
    log-bin            = /var/log/msyql/mysql-bin.log
    添加完成后重啟 Mysql 服務
    代碼如下:
    shawn@Shawn:~$ sudo /etc/init.d/mysql restart
    現在你可以通過如下命令來查看 bin-log 日志是否成功開啟
    代碼如下:
    mysql> show variables like "%log_%";
     
    | log_bin                 | ON        |
    | log_slow_queries        | ON        |
    如果顯示為 ON, 那么就可以在 /var/log/mysql/ 文件夾看到 mysql-bin.000001 二進制文件
     
    關于 bin-log 日志的相關操作:
    代碼如下:
    mysql> flush logs;
    此時就會多一個最新的 bin-log 日志
    代碼如下:
    mysql> show master status;
    查看最后一個 bin-log 日志, 如下:
    代碼如下:
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000002 |      107 |              |                  |
    +------------------+----------+--------------+------------------+
     
    mysql> show master logs;
    查看所有 bin-log 日志, 如下:
    代碼如下:
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000001 |      4340 |
    | mysql-bin.000002 |       107 |
    +------------------+-----------+
     
    mysql> reset master;
    清空所有 bin-log 日志
    代碼如下:
    shawn@Shawn:~$ mysqlbinlog /var/log/mysql/mysql-bin.000001 | more
    查看 bin-log 日志內容
    代碼如下:
    #如果有字符集問題的話可以執行:
    shawn@Shawn:~$ mysqlbinlog --no-defaults /var/log/mysql/mysql-bin.000001

    shawn@Shawn:~$ mysqlbinlog /var/log/mysql/mysql-bin.000002 | mysql -uroot -p123123 test;
    恢復 mysql-bin.000002 中所有的操作到 test 數據庫中

    shawn@Shawn:~$ mysqlbinlog /var/log/mysql/mysql-bin.000002 --start-position="193" --stop-position="398" | mysql -uroot -p123123 test;
    恢復 mysql-bin.000002 中指定的操作(position)到 test 數據庫中
     
    Mysql 主從復制 - 數據同步
     
    到這一步的時候首先確保 Mysql 用戶授權已經完成以及 Mysql bin-log 日志已經成功開啟
    并確保每臺服務器的 server-id 是唯一的
     
    再次修改主服務器(192.168.10.1)的 mysql 配置文件:
    代碼如下:
    shawn@Shawn:~$ sudo vi /etc/mysql/my.cnf;
     
    /********** my.cnf **********/
    #取消 server-id 注釋符號
    server-id   = 1
    /****************************/
     
    #重啟 Mysql 服務
    shawn@Shawn:~$ sudo /etc/init.d/mysql restart
    到這里, 主服務器的配置已經完成, 很簡單
     
    這次我們主要做的是讓從服務器同步主服務器的數據, 同步的是將來所有對主服務做的增刪改操作, 但是現有主服務器中的大量數據得先手動同步到從服務器, 操作如下:
    代碼如下:
    #清空一下主服務器的 bin-log 日志, (可選: 保險操作, 防止主從 bin-log 日志混亂)
    mysql> reset master;
     
    #然后備份導出主服務器中現有的 test 數據庫
    shawn@Shawn:~$ mysqldump -uroot -p123123 test -l -F > /tmp/test.sql;
     
    -F = flush logs, 生成新的日志文件, 包括 bin-log 日志
    -l = lock 數據庫, 防止在導出的時候被寫入數據, 完成后自動解鎖
     
    #完成后把文件傳輸給從服務器
    shawn@Shawn:~$ scp /tmp/test.sql 192.168.10.2:/tmp/
     
    #然后再查詢確保一下從服務器已經成功授過權
    mysql> show grants for user1@192.168.10.2\G
     
    *************************** 1. row ***************************
    Grants for user1@192.168.10.2:
    GRANT ALL PRIVILEGES ON *.* TO 'user1'@'192.168.10.2'
    IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9'
    完成后, 現在我們到從服務器 (192.168.10.2) 導入現有的數據:
    代碼如下:
    #清空一下從服務器的 bin-log 日志, (可選: 保險操作)
    mysql> reset master;
     
    #然后導入主服務器中現有的數據
    shawn@Shawn:~$ mysqldump -uroot -p123123 test -v -f < /tmp/test.sql;
     
    -v = 查看導入的詳細信息
    -f = 是當中間遇到錯誤時, 可以 skip 過去, 繼續執行下面的語句
    當然你也可以用 source 命令導入
    好了, 目前為止主服務器(192.168.10.1)和從服務器(192.168.10.2)現有的數據已經成功手動同步
     
    接下來修改從服務器(192.168.10.2)的 mysql 配置文件:
    代碼如下:
    shawn@Shawn:~$ sudo vi /etc/mysql/my.cnf;
     
    /********** my.cnf **********/
    #取消 server-id 注釋符號, 并修改值
    server-id       = 2
     
    #取消 master-host 注釋符號, 并修改值
    master-host     = 192.168.10.1
     
    #取消 master-user 注釋符號, 并修改值
    master-user     = user1
     
    #取消 master-password 注釋符號, 并修改值
    master-password = 123456
     
    #取消 master-port 注釋符號, 并修改值, 主服務器默認端口號為: 3306
    master-port     = 3306
    /****************************/
     
    #重啟 Mysql 服務
    shawn@Shawn:~$ sudo /etc/init.d/mysql restart
    配置文件修改完成, 此時在從服務器中登入自己的 Mysql, 而不是遠程登入主服務器(192.168.10.1)
    代碼如下:
    #在從服務器中登入自身的 Mysql
    msyql> mysql -uroot -p123123;
     
    #查看是否已經取得同步
    msyql> show slave status\G
     
    *************************** 1. row ***************************
          Connect_Retry: 60
        Master_Log_FIle: mysql-bin.000002
    Read_Master_Log_Pos: 106
       Slave_IO_Running: Yes 
      Slave_SQL_Running: Yes
    Slave_IO_Running 如果是 Yes 的話代表成功從主服務器中同步到 bin-log 日志
    Slave_SQL_Running 如果是 Yes 的話代表成功執行 bin-log 日志中的 SQL 語句
    此時的 Master_Log_FIle 和 Read_Master_Log_Pos 的值應該對應主服務器中的 show master status 命令的值
    Connect_Retry 中的 60 代表每 60 秒就去主服務器同步 bin-log 日志
     
    OK, 如果你看到的是那兩個關鍵的 Yes, 那你就可以去測試了, 在主服務器插入新的數據, 再去從服務器查看, 不出意外的話, 你會興奮一下, 數據已經同步了
     
    這里再說一下其他經常用到的命令:
    代碼如下:
    #啟動復制線程
    msyql> start slave
     
    #停止復制線程
    msyql> stop slave
     
    #動態改變到主服務器的配置
    msyql> change master to
     
    #查看從數據庫運行進程
    msyql> show processlist
    這里也同時說一下操作中的常見錯誤:
     
    問題: 從數據庫無法同步
    Slave_SQL_Running 值為 NO, 或 Seconds_Bebind_Master 值為 Null

    原因:
    一、 程序有可能在 slave 上進行了寫操作
    二、 也有可能是 slave 機器重啟后, 事務回滾造成的

    解決方法一:
    代碼如下:
    msyql> stop slave;
     
    msyql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
     
    msyql> start slave;
    解決方法二:
    代碼如下:
    msyql> stop slave;
     
    #查看主服務器上當前的 bin-log 日志名和偏移量
    msyql> show master status;
     
    #獲取到如下內容:
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000005 |      286 |              |                  |
    +------------------+----------+--------------+------------------+
     
    #然后到從服務器上執行手動同步
    msyql> change master to
        -> master_host="192.168.10.1"
        -> master_user="user1"
        -> master_password="123456"
        -> master_post=3306
        -> master_log_file="mysql-bin.000005"
        -> master_log_pos=286;
        
    msyql> start slave;
    再次通過 show slave status 查看:
    如果 Slave_SQL_Running 的值變為 Yes, Seconds_Bebind_Master 的值為 0 時, 即正常
     
    好了, 如上是我自己在操作中所總結的一些內容, 如有更好的建議, 歡迎留言一起探討
    順便說一下, 我使用的是 Ubuntu 12.04

    您可能感興趣的文章:

  • 深入理解MySQL主從復制線程狀態轉變
  • 詳解Docker方式實現MySql 主從復制(實踐篇)
  • MySQL5.7.18主從復制搭建(一主一從)教程詳解
  • 詳解MySQL實現主從復制過程
  • MySQL的主從復制步驟詳解及常見錯誤解決方法
  • MySQL主從復制的原理及配置方法(比較詳細)
  • Mysql主從復制作用和工作原理詳解
  • 聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Mysql主從復制(master-slave)實際操作案例

    Mysql主從復制(master-slave)實際操作案例:在這一章節里, 我們來了解下如何在 Mysql 中進行用戶授權及主從復制 這里先來了解下 Mysql 主從復制的優點: 1、 如果主服務器出現問題, 可以快速切換到從服務器提供的服務 2、 可以在從服務器上執行查詢操作, 降低主服務器的訪問壓力 3、 可以在從服
    推薦度:
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 亚洲精品色午夜无码专区日韩| 无码人妻精品一区二区三区久久久 | 国产精品免费看久久久 | 夜色www国产精品资源站| 日韩精品国产另类专区| 久久99精品国产麻豆蜜芽| 欧美精品黑人巨大在线播放| 国产精品无码日韩欧| 伊人精品视频在线| 欧美亚洲精品中文字幕乱码免费高清| 夜色www国产精品资源站| 久久91精品国产91久久户| 日韩精品专区AV无码| 日韩精品无码久久一区二区三| 国产精品美女WWW爽爽爽视频| 久久久久四虎国产精品| 国99精品无码一区二区三区| 麻豆aⅴ精品无码一区二区 | 国产乱人伦精品一区二区在线观看| 国产精品欧美久久久天天影视| 精品欧洲AV无码一区二区男男 | 秋霞久久国产精品电影院| laowang在线精品视频| 国产三级久久久精品麻豆三级| 欧美精品中文字幕亚洲专区| 亚洲av永久无码精品网站| 正在播放酒店精品少妇约| 亚洲国产精品成人| 欧美日韩国产精品| 四虎成人精品国产永久免费无码| 国产精品丝袜久久久久久不卡| 91精品国产高清久久久久久91 | 久久精品?ⅴ无码中文字幕| 国产一在线精品一区在线观看| 国产精品无码素人福利不卡| 国产69精品久久久久9999| 99久久国产综合精品网成人影院 | 亚洲av永久无码精品秋霞电影影院| 亚洲欧洲精品成人久久奇米网| 亚洲精品成人区在线观看| 亚洲国产精品成人久久蜜臀|