mysql 主從配置詳解2(主庫有數據 從庫熱備份和冷備份)

1、從庫複製的時候還有其他幾個重要的參數配置

參數 作用 實例
replicate-do-table 指定需要複製的表 replicate-do-table=test.rep_t1
replicate-ignore-table 指定不復制的表 replicate-ignore-table=test.rep_t1
replicate-do-db 指定不復制的數據庫 replicate-do-db=db1
replicate-ignore-db 指定不復制的數據庫 replicate-ignore-db=db2

MySOL安裝配置的時候,已經介紹了幾個啓動時的常用參數,其中包括MASTER HOST、MASTER PORT、MASTER_USER、MASTER PASSWORD、MASTER_LOG_FILE 和MASTER LOG POS。這幾個參數需要在從服務器上配置,下面介紹幾個常用的啓動選項,如log-slave-updates、master-connect-retry、read-only 和slave-skip-errors等。

(1)log-slave-updates log-slave updates 參數主要用來配置從服務器的更新是否寫入二進制日誌,該選項默認是不打開的,如果這個從服務器同時也作爲其他服務器的主服務器,搭建一個鏈式的複製,那麼就需要開啓這個選項,這樣他的從服務器才能獲取它的二進制日誌進行同步操作。

(2)master-connect-retry master-connect-retry參數是用來設置在和主服務器連接丟失的時候,重試的時間間隔,默認是60秒。

(3)read-only read-only是用來限制普通用戶對從數據庫的更新操作,以確保從數據庫的安全性,不過如果是超級用戶依然可以對從數據庫進行更新操作。如果主數據庫創建了一個普通用戶,在默認情況下,該用戶是可以更新從數據庫中的數據的,如果使用read-only選項啓動從數據庫以後,該用戶對從數據庫的更新會提示錯誤。使用read-only選項啓動語法如下。

(4)slave-skip-errors 在複製的過程中,從服務器可能會執行BINLOG中的錯誤的SQL語句,此時如果不忽略錯誤,從服務器將會停止複製進程,等待用戶處理錯誤。這種錯誤如果不能及時發現,將會對應用或者備份產生影響。slave-skip-errors的作用就是用來定義複製過程中從服務器可以自動跳過的錯誤號,設置該參數後,MySQL會自動跳過所配置的一系列錯誤,直接執行後面的SQL語句,該參數可以定義多個錯誤號,如果設置成all,則表示跳過所有的錯誤,具體語法如下。

vi /etc/my. cnf
slave-skip-errors=1007,1051,1062

       如果從數據庫主要是作爲主數據庫的備份,那麼就不應該使用這個啓動參數,設置不當,很可能造成主從數據庫的數據不同步。如果從數據庫僅僅是爲了分擔主數據庫的查詢壓力,並且對數據的完整性要求不是很嚴格,那麼這個選項可以減輕數據庫管理源維護從數據庫的工作量。

2. 實際情況

在實際的工作中,我們一般對於數據庫優化或者進行架構的時候主數據庫往往是會有數據的,而從一開始就進行主從的基本很少。 所以這並非我們實際的情況。

現在我們的情況就是在數據庫中已經事先就存在了laravel-shop的數據表,並且我們可以往裏面添加一些數據作爲測試用的,而根據主從來說同步的是binlog日誌中的信息,但是一般數據庫開始的時候並不會直接開啓binlog,默認就是off需要修改配置調整爲on

有幾種辦法來初始化備庫或者從其他服務器克隆數據大備庫。包括從主庫複製數據、從另一臺備庫克隆數據等等主要的思路就是

  1. 在某個時間點的主庫的數據快照。
  2. 主庫當前的二進制日誌文件,和獲得數據快照是,在該二進制日誌文件中的偏移量,我們把這兩個值成爲日誌文件座標。通過這兩個值可以確定二進制日誌的位置。可以通過SHOW MASTER STATUS命令來獲取這些值。
  3. 從快照時間到現在的二進制日誌。

2.1 冷備份與恢復

2.1.1 邏輯備份

使用mydumper

mydumper是一個針對MySQL和drizzle的高性能多線程的備份和恢復工具。此工具的開發人員分別來自MySQL、facebook、skysql公司、目前已經有一些大型產品業務測試並使用了該工具。我們在恢復數據庫時也可使用myloader工具。 Mydumper的主要特性包括:

· 採用輕量級C語言寫的代碼。 · 相比於mysqldump,其速度快了近10倍。 · 具有事務性和非事務性表一致的快照(適用於0.2.2+)。 · 可快速進行文件壓縮(File compression on-the-fly)。 · 支持導出binlog。 · 可多線程恢復(適用於0.2.1+)。 · 可以用守護進程的工作方式,定時掃描和輸出連續的二進制日誌。

安裝命令如下所示:

[root@localhost wwwroot]# yum install glib2-devel zlib-devel pcre-devel cmake
[root@localhost wwwroot]# git clone https://github.com/maxbube/mydumper.git
[root@localhost wwwroot]# cd mydumper
[root@localhost wwwroot]# cmake .
[root@localhost wwwroot]# make
[root@localhost wwwroot]# make install
[root@localhost wwwroot]# mydumper -V
mydumper 0.9.1, built against MySQL 5.7.27

Mydumper中的主要參數如下:

· -host,-h:連接的MySQL服務器。 · -user,-u:用戶備份的連接用戶。口-password,-p:用戶的密碼。 · -port,-P:連接端口。 · -socket,-S:連接socket文件。口-database,-B:需要備份的數據庫。 · -table-list,-T:需要備份的表,用逗號(,)分隔。 · -outputdir,-o:輸出的目錄。 · -build-empty-files,-e:默認無數據則只有表結構文件。 · -regex,-x:支持正則表達式,如mydumper-regex'(2l(mysqltest)'。 · -ignore-engines,-i:忽略的存儲引擎。 · -no-schemas,-m:不導出表結構。 · -long-query-guard:長查詢,默認60s。 · -kill-long-queries,-k:可以設置kill長查詢。 · -verbose,-v:0=silent,1=errors,2=warmings,3=info,默認是2。 · -binlogs,-b:導出binlog。口-daemon,-D:啓用守護進程模式。 · -snapshot-interval,-I:dump快照間隔時間,默認60s。 · -logfile,-L:mysaqldumper的目志輸出,一般在Daemon模式下使用。

mydumper與mysqldump 備份數據對比

[root@localhost home]# time mydumper -u root -p root -B laravel-shop -o /home/laravel-shop2.sql

real    0m0.039s
user    0m0.004s
sys    0m0.035s
[root@localhost home]# time mysqldump -u root -p laravel-shop > /home/laravel-shop3.sql
Enter password:

real    0m2.093s
user    0m0.016s
sys      0m0.047s

 對比mysql與myloader數據還原

[root@localhost home]# time mysql -f -u root -p laravel-shop < /home/laravel-shop3.sql
Enter password:

real    0m2.511s
user    0m0.017s
sys    0m0.033s
[root@localhost home]# time myloader -u root -p root -B laravel-shop -d /home/laravel-shop3.sql
** (myloader:9506): CRITICAL **: 06:38:43.292: the specified directory is not a mydumper backup

real    0m0.006s
user    0m0.003s
sys    0m0.003s

2.2 熱備份與恢復

xtrabackup手冊:https://www.percona.com/doc/percona-xtrabackup/2.4/installation/yum_repo.html

熱備份的方式也是直接複製數據物理文件,和冷備份一樣,但熱備份可以不停機直接複製,一般用於7×24小時不間斷的重要核心業務。MySQL社區版的熱備份工具ImnoDB Hot Backup是付費的,只能試用30天,只有購買企業版纔可以得到永久使用權。Percona公司發佈了一個xtrabackup熱備份工具,和官方付費版的功能一樣,支持在線熱備份(備份時不影響數據讀寫),是商業備份工具InnoDBHot Backup的一個很好的替代品。下面具體介紹一下這個軟件的使用方法。

xtrabackup是Percona公司的開源項目,用以實現類似ImnoDB官方的熱備份工具ImmoDB Hot Backup的功能,它能非常快速地備份與恢復MySQL數據庫。xtrabackup中包含兩個工具:

· xtrabackup是用於熱備份InnoDB及XtraDB表中數據的工具,不能備份其他類型的表,也不能備份數據表結構。 · innobackupex是將xtrabackup進行封裝的perl腳本,它提供了備份MyISAM表的能力。由於innobackupex的功能更爲全面完善,所以一般選擇innobackupex來進行備份。

下面來看看xtrabackup的安裝方法,安裝命令如下:

[root@localhost file]$ wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm
[root@localhost file]$ yum localinstall percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm
[root@localhost file]# rpm -qa | grep xtrabackup

Xtrabackup中主要包含兩個工具:
xtrabackup:是用於熱備innodb,xtradb表中數據的工具,不能備份其他類型的表,也不能備份數據表結構;
innobackupex:是將xtrabackup進行封裝的perl腳本,提供了備份myisam表的能力。
常用選項:
   --host     指定主機
   --user     指定用戶名
   --password    指定密碼
   --port     指定端口
   --databases     指定數據庫
   --incremental    創建增量備份
   --incremental-basedir   指定包含完全備份的目錄
   --incremental-dir      指定包含增量備份的目錄
   --apply-log        對備份進行預處理操作
     一般情況下,在備份完成後,數據尚且不能用於恢復操作,因爲備份的數據中可能會包含尚未提交的事務或已經提交但尚未同步至數據文件中的事務。因此,此時數據文件仍處理不一致狀態。“準備”的主要作用正是通過回滾未提交的事務及同步已經提交的事務至數據文件也使得數據文件處於一致性狀態。
   --redo-only      不回滾未提交事務
   --copy-back     恢復備份目錄

開始進行備份操作,進入 主庫 中

[root@centos ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=root --backup /home/laravel-shop
[root@localhost home]# ll /home/laravel-shop/2019-09-26_12-43-34/
總用量 75832
-rw-r----- 1 root root      425 9月  26 12:43 backup-my.cnf
drwxr-x--- 2 root root       58 9月  26 12:43 bin
-rw-r----- 1 root root      361 9月  26 12:43 ib_buffer_pool
-rw-r----- 1 root root 77594624 9月  26 12:43 ibdata1
drwxr-x--- 2 root root     4096 9月  26 12:43 laravel@002dshop
drwxr-x--- 2 root root     4096 9月  26 12:43 mysql
drwxr-x--- 2 root root     8192 9月  26 12:43 performance_schema
drwxr-x--- 2 root root     8192 9月  26 12:43 sys
drwxr-x--- 2 root root       46 9月  26 12:43 test
-rw-r----- 1 root root       24 9月  26 12:43 xtrabackup_binlog_info
-rw-r----- 1 root root      113 9月  26 12:43 xtrabackup_checkpoints
-rw-r----- 1 root root      508 9月  26 12:43 xtrabackup_info
-rw-r----- 1 root root     2560 9月  26 12:43 xtrabackup_logfile
[root@localhost home]# scp -r /home/laravel-shop/ [email protected]:/home/laravel-shop

然後呢進入 從庫 中

[root@localhost server]# ll /home/laravel-shop/2019-09-26_12-43-34/
總用量 75832
-rw-r----- 1 root root      425 9月  27 21:54 backup-my.cnf
drwxr-x--- 2 root root       58 9月  27 21:54 bin
-rw-r----- 1 root root      361 9月  27 21:54 ib_buffer_pool
-rw-r----- 1 root root 77594624 9月  27 21:54 ibdata1
drwxr-x--- 2 root root     4096 9月  27 21:54 laravel@002dshop
drwxr-x--- 2 root root     4096 9月  27 21:54 mysql
drwxr-x--- 2 root root     8192 9月  27 21:54 performance_schema
drwxr-x--- 2 root root     8192 9月  27 21:54 sys
drwxr-x--- 2 root root       46 9月  27 21:54 test
-rw-r----- 1 root root       24 9月  27 21:54 xtrabackup_binlog_info
-rw-r----- 1 root root      113 9月  27 21:54 xtrabackup_checkpoints
-rw-r----- 1 root root      508 9月  27 21:54 xtrabackup_info
-rw-r----- 1 root root     2560 9月  27 21:54 xtrabackup_logfile
[root@localhost server]#
[root@localhost server]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!
[root@localhost server]# mv /www/server/data /www/server/data2
[root@localhost server]# mv /www/server/data /www/server/data2
[root@localhost server]# innobackupex --defaults-file=/etc/my.cnf --copy-back /home/laravel-shop/2019-09-26_12-43-34/
[root@localhost server]# chown -R mysql:mysql /www/server/data
[root@localhost server]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/www/server/data/localhost.localdomain.err'.
. SUCCESS!
[root@localhost server]# mysql -u root -p
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bin                |
| laravel-shop       |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
7 rows in set (0.02 sec

到此  當主庫有數據時,從庫熱備份就完成了。

 

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