MySQL數據庫備份之複製

MySQL數據庫備份之複製
目錄:
1.MySQL複製簡介
2.MySQL複製的優點與思路
3.數據複製環境之主服務器設置
4.數據複製環境之從服務器設置
5.建立複製賬號
6.獲取主服務器二進制日誌信息
7.對現有數據庫進行快照備份
8.配置從服務器鏈接主服務器進行數據複製
9.數據同步驗證

1. MySQL
複製mysql

使用MySQL複製功能能夠將主服務器上的數據複製到多臺從服務器上。默認狀況下複製是異步傳輸方式,從服務器不須要老是鏈接主服務器去更新數據。也就是說數據更新能夠在遠距離鏈接的狀況下進行,甚至是在使用撥號網絡的臨時鏈接環境下也能夠進行。根據自定義設置,咱們能夠對全部數據庫或部分數據庫甚至是部分數據表進行復制。經過主從複製,在企業級應用環境中就沒必要再擔憂數據庫的單點故障,當一臺服務器宕機時其餘服務器同樣能夠提供很是穩定可靠的數據服務。sql

2. MySQL複製的優點:數據庫

  • 高性能:經過將請求分配給多臺不一樣的從服務器提升性能與速度。在這種環境中,全部對數據庫的寫操做必須提供給主服務器,但讀操做能夠被平均地分配給多臺從服務器。vim

  • 數據安全:數據是從主服務器複製到從服務器的,並且從服務器能夠隨時暫停複製,這樣咱們就實現數據備份與還原。安全

  • 遠程數據分享:若是企業擁有多處位於其餘地理位置的分公司,而這些分公司但願共享總部的數據庫資源,就可使用複製實現數據的共享,並且分公司沒必要時時鏈接主服務器,能夠僅在須要時進行復制。服務器

MySQL複製有兩種核心的格式,一種是基於SQL語句的複製(SBRStatement Based Replication),另外一種是基於行的複製(RBRRow BasedReplication),另外有時也可使用混合模式複製。MySQL 5.6默認採用的是基於語句的複製。網絡

MySQL服務器之間的複製是基於二進制日誌機制。在主服務器上當MySQL實例進行寫操做時會同時生成一條操做事件日誌並寫入二進制日誌文件中,而從服務器則負責讀取主服務器上的二進制日誌,並在從服務器本機從新執行該事件,從而實現複製數據至本地服務器。當主服務器開啓了二進制日誌功能後,全部的SQL語句都將被記錄至日誌。而從服務器複製這些二進制日誌的條目,而且根據本身的須要決定哪些語句須要從新在從服務器執行,而哪些語句不須要再執行。咱們沒法控制主服務器僅記錄特定語句到日誌文件。若是沒有進行其餘設置,全部主服務器中的日誌事件都將在從服務器上從新執行,固然你能夠配置從服務器僅執行主服務器中的一部分日誌事件。由於從服務器會記錄二進制日誌的進度與位置(好比執行到了第幾條語句),因此從服務器能夠斷開與主服務器之間的鏈接,並在從新創建鏈接後繼續進行復制工做。異步

在具體操做過程當中,主服務器與從服務器都須要配置一個惟一的ID編號。另外,全部的從服務器還必須設置主服務器的主機名、日誌文件名、文件位置等參數。ide

一步一步操做MySQL複製工具

本節咱們將演示如何一步一步實現MySQL服務器之間的數據複製(演示環步驟中命令提示符爲master則表明指令在MySQL主服務器上運行,提示符爲slave1則表明指令在MySQL從服務器上運行)。整個過程通常分爲如下幾個步驟:

  • 在主服務器上開啓二進制日誌功能,設置惟一的服務器ID編號。這些設置須要重啓MySQL服務。

  • 在全部從服務器上設置惟一的服務器ID編號,這些設置須要重啓MySQL服務。

  • 在主服務器上爲不用的從服務器建立能夠讀取主服務器日誌文件的帳戶,或使用相同的統一帳戶。

  • 在進行數據複製以前,你還須要記錄主服務器上二進制日誌的位置標記。

3.數據複製環境之主服務器設置

在實際的生產環境中,可能在咱們尚未部署數據複製前,數據庫中就已經存在大量數據,因此,這裏咱們事先建立一個測試用數據庫及數據表,用來演示如何對已經存在的數據進行數據同步備份。

[root@master ~]# mysql -u root -p
mysql> create database hr;
mysql> use hr;
mysql> create table employees(
-> employee_id INT NOT NULL AUTO_INCREMENT,
-> name char(20) NOT NULL,
-> e_mail varchar(50),
-> PRIMARY KEY(employee_id));
mysql> INSERT INTO employees values
->(1,'TOM','tom@example.com'),
->(2,'Jerry','jerry@example.com');
mysql> exit

咱們須要在主服務器上開啓二進制日誌並設置服務器編號,服務器惟一編號必須是1232-1之間的整數,根據本身的實際狀況進行設置。進行這些設置須要關閉MySQL數據庫並編輯my.cnfmy.ini文件,並在[mysqld]設置段添加相應的配置選項。關於MySQL軟件的安裝這裏再也不贅述,請參考4.11.2章節內容。

[root@master ~]# vim /etc/my.cnf

[mysqld]

log-bin=Jacob-bin#啓用二進制日誌,並設置二進制日誌文件前綴

server-id=254#設置服務器編號

[root@master ~]# service mysqld restart

[root@master ~]# service iptables stop

l注意:在配置文件中不可使用skip-networking參數選項,不然從服務器將沒法與主服務器進行鏈接並複製數據。

4.數據複製環境之從服務器設置

若是從服務器ID編號沒有設置,或服務器ID編號與主服務器有衝突,就必須關閉MySQL服務並從新編輯配置文件,設置惟一的服務器編號,最後重啓MySQL服務。若是有多臺從服務器,則全部的服務器ID編號都必須是惟一的。能夠考慮將服務器ID編號與服務器IP地址關聯,這樣ID編號同時能夠惟一標識一臺服務器計算機,如採用IP地址的最後一位做爲MySQL服務器ID編號。

[root@slave1 ~]# vim /etc/my.cnf

[mysqld]

server-id=2

[root@slave1 ~]# service mysqld restart

[root@slave1 ~]# service iptables stop

對於複製而言,MySQL從服務器上二進制日誌功能是不須要開啓的。可是,你也能夠經過啓用從服務器的二進制日誌功能,實現數據備份與恢復,此外在一些更復雜的拓撲環境中,MySQL從服務器也能夠扮演其餘從服務器的主服務器。

5.建立複製賬號

執行數據複製時,全部的從服務器都須要使用帳戶與密碼鏈接MySQL主服務器,因此在主服務器上必須存在至少一個用戶帳戶及相應密碼供從服務器鏈接。這個帳戶必須擁有REPLICATION SLAVE權限,你能夠爲不一樣的從服務器建立不一樣的帳戶與密碼,也可使用統一的帳戶與密碼。MySQL可使用CREATE USER語句建立用戶,使用GRANT語句爲帳戶賦權。若是該用戶僅爲數據庫複製所使用,則該帳戶僅須要REPLICATION SLAVE權限便可。下面的例子將在MySQL主服務器上建立一個擁有複製權限的slave_cp帳戶,該帳戶能夠從example.com域內的任何主機鏈接主服務器,密碼爲SlaveAdmin

[root@master ~]# mysql -u root -p
mysql> CREATE USER 'slave_cp'@'%.example.com' IDENTIFIED BY 'SlaveAdmin';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_cp'@'%.example.com';
mysql> exit

6.獲取主服務器二進制日誌信息

在進行主從數據複製以前咱們瞭解一些主服務器的二進制日誌文件的基本信息,這些信息在對從服務器的設置中須要用到,這些信息包括主服務器二進制文件名稱及當前日誌記錄位置,這樣從服務器就能夠知道從哪裏開始進行復制操做。咱們可使用以下操做查看主服務器二進制日誌數據信息:

[root@master ~]# mysql -u root -p
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+--------------------------------+------------+---------------------+-------------------------+--------------------------+
| File|Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+--------------------------------+------------+---------------------+-------------------------+--------------------------+
| jacob-log.000001|1276||||
+--------------------------------+------------+---------------------+--------------------------+-------------------------+
mysql> UNLOCK TABLES;

其中,File列顯示的是二進制日誌文件名,Position爲當前日誌記錄位置。

FLUSH TABLES WITH READ LOCK命令的做用是對全部數據庫的全部表執行只讀鎖定,只讀鎖定後全部數據庫的寫操做將被拒絕,但讀操做能夠繼續。執行鎖定能夠防止在查看二進制日誌信息的同時有人對數據進行修改操做,最後使用UNLOCK TABLES語句對全局鎖執行結束操做。

7.對現有數據庫進行快照備份

若是在使用二進制日誌進行數據複製之前,MySQL數據庫系統中已經存在大量數據資源,對這些資料進行數據備份的一種方法使用使用mysqldump工具,在主服務器上使用該工具對數據備份後便可在從服務器上進行數據還原操做。當但願的數據達到主從一致後,就可使用數據複製功能進行自動今後同步操做。具體操做以下(做者的環境中主服務器IP地址爲172.16.0.254,從服務器IP地址爲172.16.0.1),實際生產環境中須要根據本身的須要有選擇的對數據庫進行備份與還原:

[root@master ~]# mysqldump --all-databases --lock-all-tables > /tmp/dbdump.sql
[root@master ~]# scp /tmp/dbdump.sql 172.16.0.1:/tmp/
[root@slave1 ~]# mysql -u root -p <dbdump.sql

8.配置從服務器鏈接主服務器進行數據複製

數據複製的關鍵操做是配置從服務器去鏈接主服務器進行數據複製,咱們須要告知從服務器創建網絡鏈接全部必要的信息。使用CHANGE MASTER TO語句便可完成該項工做,MASTER_HOST指定主服務器主機名或IP地址,MASTER_USER爲主服務器上建立的擁有複製權限的帳戶名稱,MASTER_PASSWORD爲該帳戶的密碼,MASTER_LOG_FILE指定主服務器二進制日誌文件名稱,MASTER_LOG_POS爲主服務器二進制日誌當前記錄的位置。START SLAVE開啓從服務器功能進行主從鏈接,SHOW SLAVE STATUS查看從服務器狀態。

[root@slave1 ~]# mysql -u root -p
mysql> CHANGE MASTER TO
-> MASTER_HOST='172.16.0.155',
-> MASTER_USER='data_cp',
-> MASTER_PASSWORD='SlaveAdmin',
-> MASTER_LOG_FILE='jacob-log.000001',
-> MASTER_LOG_POS=1351;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G;

9.數據同步驗證

全部主從均設置完畢後,咱們能夠經過在主服務上建立新的數據資料,而後在從服務器上查看,全部數據將自動同步。

[root@master ~]# mysql -u root -p
mysql> create database test2;
mysql> use test2;
mysql> create table t_table(
->name char(20),
-> age int,
-> note varchar(50));
mysql> INSERT INTO t_table values
-> ('linda',23, 'Beijing'),
-> ('jerry',33, 'shanghai'),;
mysql> exit
[root@slave1 ~]# mysql -u root -p
mysql> select * from test2.t_table;
mysql> exit
相關文章
相關標籤/搜索