【MySQL】——主從模式及複製

mysql的主從模式

        1、  從服務器同步主服務器的數據,可以執行查詢操作,分擔主服務器的壓力

        2、  主服務器出現問題,可以快速切換到從服務器提供服務

        3、  備份可以在從服務器上執行,避免對主服務器造成影響

 

主從複製的原理

 

流程:

        master將變化記錄到二進制日誌binarylog簡稱爲bin log中,slave啓動一個IO線程將主庫的binary log 拷貝到自己的的Relay log中,slave 重做relay log中的時間,完成和主庫數據的同步。

 

 

Binary log:

        1、  二進制日誌,保存數據庫 增刪改 的所有操作記錄

        2、  日誌文件都是以mysql-bin開頭的

        3、  除了用作主從數據同步外,binarylog還可以用來恢復數據,其中有一個position的概念可以指定恢復數據的範圍

 

主從服務的配置:

        

主庫配置:

    

從庫配置:

        

  

使用 mysqldump +bin log完成數據恢復

 

        mysqldump 命令可以完整備份數據庫,如果在完整備份數據庫之後進行了操作還沒有備份,此時數據庫宕機了,在備份後的操作可以使用bin log日誌進行恢復。

 

1、使用show master status 命令查看二進制文件的狀態,注意其中的position如下:

        [root@node1 ~]# mysql -e 'SHOW MASTER STATUS'

+------------------+----------+--------------+------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |     106 |              |                 |
+------------------+----------+--------------+------------------+


2、使用mysqldump命令完整備份數據庫

        [root@node1 ~]# mysqldump--all-databases --lock-all-tables  > backup.sql   #備份數據庫到backup.sql文件中


3、執行創建數據庫操作

        mysql> CREATE DATABASETEST1;   #創建一個數據庫

 

4、再次查看bin logs,position位置發生變化

        mysql> SHOW MASTERSTATUS;   #記下現在的position

+------------------+----------+--------------+------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |     191 |              |                 |
+------------------+----------+--------------+------------------+


5、#備份二進制文件

        [root@node1 ~]# cp/var/lib/mysql/mysql-bin.000003 /root  #備份二進制文件


6、模擬數據丟失

        [root@node1 ~]# servicemysqld stop   #停止MySQL

        [root@node1 ~]# rm -rf/var/lib/mysql/*   #刪除所有的數據文件

        [root@node1 ~]# servicemysqld start    #啓動MySQL,如果是編譯安裝的應該不能啓動(需重新初始化), 如果rpm安裝則會重新初始化數據庫

        mysql> SHOW DATABASES;  #查看數據庫,數據丟失!

+--------------------+
| Database          |
+--------------------+
| information_schema |
| mysql             |
| test              |
+--------------------+

7、恢復完整備份的數據

        mysql> SETsql_log_bin=OFF;   #暫時先將二進制日誌關閉,最新進行的回覆就不會被記錄了

        mysql> sourcebackup.sql      #恢復數據,所需時間根據數據庫時間大小而定

        mysql> SETsql_log_bin=ON;     #開啓二進制日誌

 

8、查看

        mysql> SHOW DATABASES;   #數據庫恢復,但是缺少TEST1

+--------------------+
| Database          |
+--------------------+
| information_schema |
| employees         |
| mysql             |
| test              |
+--------------------+
   

數據庫恢復的一部分,在完整備份後的新建數據庫操作沒有被恢復

 

9、從bin log 日誌中恢復建表操作,可以執行position的開始和結束爲止

        [root@node1 ~]#mysqlbinlog --start-position=106 --stop-position=191 mysql-bin.000003 | mysqlemployees #通過二進制日誌增量恢復數據


10、再次查看數據庫

        mysql> SHOW DATABASES;   #現在TEST1出現了!

+--------------------+
| Database          |
+--------------------+
| information_schema |
| TEST1             |
| employees         |
| mysql             |
| test              |
+--------------------+

完整備份後進行的操作被被恢復了。

 

小結:

         binlog 日誌在主從數據庫數據同步和數據備份恢復中都可以進行使用。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章