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 日誌在主從數據庫數據同步和數據備份恢復中都可以進行使用。