mysql資料庫的備份與恢復
一、環境
備份工具:innobackupex
[root@master ~]# innobackupex -v
xtrabackup: recognized server arguments: --datadir=/usr/local/mysql-5.7.25/data
innobackupex version 2.4.18 Linux (x86_64) (revision id: 29b4ca5)
作業系統:CentOS 7.5
資料庫:mysql-5.7.25
二、innobackupex 常用引數介紹
備份工具innobackupex要用到的一些主要引數介紹
--user:該選項表示備份賬號。
--password:該選項表示備份的密碼。
--port:該選項表示備份資料庫的埠。(如果是預設3306埠可忽略)
--host:該選項表示備份資料庫的地址。
--databases:備份指定的資料庫,如果要指定多個數據庫,彼此間需要以空格隔開;
--socket:該選項表示mysql.sock所在位置;
一般如果是yum安裝的資料庫,mysql.sock檔案預設在/var/lib/mysql/mysql.sock目錄下,如果是該情況可以不用指定,如果是二進位制安裝,則有可能在其他目錄下,就需要該引數做指定;否則innobackupex無法連線資料庫報錯;
Failed to connect to MySQL server: DBI connect(';mysql_read_default_group=xtrabackup','root',...) failed: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) at - line 1314.
Failed to connect to MySQL server: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2).
--incremental:表示建立一個增量備份,根--incremental-basedir引數一塊使用;
--incremental-basedir:指定是基於哪個全量備份目錄做的增量備份;
--incremental-dir:指定增量備份的目錄;
--defaults-file:指定my.cnf的路徑,如果是預設的/etc/my.cnf路徑,則該引數可以忽略;
--copy-back:做恢復操作,將備份目錄中的檔案copy到資料庫data目錄中;
--apply-log:作用是通過回滾未提交的事務及同步已經提交的事務至資料檔案使資料檔案處於一致性狀態。(個人不太理解,知道的大神可以解釋下)
--redo-only:
三、全量備份 or 全量恢復
1、全量備份
innobackupex --host=localhost --user=root --password=123.com --socket=/tmp/mysql.sock /root/mysql/mysql-backup
備份成功的特徵:最後會出現201104 16:43:09 completed OK!的字樣
在備份目錄中xtrabackup_checkpoints檔案可以檢視備份檔案型別;
full-backuped:表示全量備份
2、恢復
(1)資料庫需要先停掉;
(2)資料庫的data目錄需要清空,否則報錯;
innobackupex version 2.4.18 based on MySQL server 5.7.26 Linux (x86_64) (revision id: 29b4ca5)
Original data directory /usr/local/mysql-5.7.25/data is not empty!
(3) innobackupex --copy-back /root/mysql/mysql-backup/2020-11-04_16-43-05
(4)恢復命令執行成功後,會在data目錄下生成相應的目錄檔案,這時候目錄檔案屬主屬組是root,需要修改data目錄下的檔案屬主屬組為mysql使用者,否則無法啟動;
chown -R mysql:mysql data
否則報錯:Starting MySQL. ERROR! The server quit without updating PID file (/usr/local/mysql-5.7.25/data/master.pid). #許可權問題導致的;
四、增量備份
(1)備份:innobackupex --host=localhost --user=root --password=ngaa.com.cn --socket=/tmp/mysql.sock --incremental /root/mysql/mysql-backup/new_add --incremental-basedir=/root/mysql/mysql-backup/2020-11-04_16-43-05
incremental:表示增量備份;
(2)還原
1)prepare全備
innobackupex --incremental --apply-log --redo-only /root/mysql/mysql-backup/2020-11-04_16-43-05
注意:執行過程中會有一些類似錯誤的東西,可以忽略,不必糾結;
2)prepare增量備份
innobackupex --incremental --apply-log --redo-only /root/mysql/mysql-backup/2020-11-04_16-43-05 --incremental-dir=/root/mysql/mysql-backup/new_add/2020-11-04_17-15-05
注意:我這邊只增量備份了1次,可以多次增量備份,需要注意的是基於全備做的增備或者是基於某次增備做的增量備份,要理清楚;多次增備,需要多次prepare;
3)此時,增量備份都已經合併到了全備上,需要再prepare一次全備份
innobackupex --apply-log /root/mysql/mysql-backup/2020-11-04_16-43-05
4)資料恢復準備,mysql停用,清空資料庫data目錄;
innobackupex --copy-back /root/mysql/mysql-backup/2020-11-04_16-43-05
5)修改資料庫data目錄屬主屬組為mysql;登陸驗證