<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答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

        您可能感興趣的文章:

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

        文檔

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

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

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 日韩一区二区免费视频| 亚洲男人天堂2018av| 免费看美女被靠到爽的视频| 一个人免费视频在线观看www| 无码色偷偷亚洲国内自拍| 亚洲一区二区三区久久| 亚洲国产香蕉碰碰人人| 亚洲人成在线播放网站| 亚洲AV无码专区日韩| 蜜桃精品免费久久久久影院| jjizz全部免费看片| 日本在线免费观看| 国内精品免费久久影院| 一级毛片视频免费观看| 国产午夜亚洲精品不卡免下载| 亚洲 欧洲 视频 伦小说| 亚洲成a人片在线观看中文!!!| 亚洲av无码不卡| 久久久青草青青亚洲国产免观| 亚洲高清偷拍一区二区三区| 国产成人免费a在线资源| 好爽…又高潮了免费毛片| 成年人视频免费在线观看| 永久看日本大片免费35分钟| 午夜免费啪视频在线观看 | 99久热只有精品视频免费看| 中文字幕无线码中文字幕免费| 男女污污污超污视频免费在线看| 99亚洲精品卡2卡三卡4卡2卡| 亚洲日本VA中文字幕久久道具| 精品亚洲AV无码一区二区三区| 亚洲一区中文字幕在线观看| 亚洲中文字幕久久精品蜜桃 | 成人激情免费视频| 无码视频免费一区二三区| 成年丰满熟妇午夜免费视频| 成人毛片视频免费网站观看| 四色在线精品免费观看| 国产一级淫片a视频免费观看| 免费人妻无码不卡中文字幕18禁| 亚洲Av无码乱码在线znlu|