xtrabackup備份的原理:
xtrabackup直接復制datadir目錄中的文件到備份目錄下。這樣問題就來了,在備份的時候mysql可以還在執行寫入操作;所以xtrabackup會不停的去掃描MySQL的
redo_log,也就是說備份集中一來會保存數據文件,二來還會保存日志文件;注意這個時候備份並不是一致的,原因是有的事務提交了,但是也只是寫把變更寫到了redo_log
中,並還沒有把變更寫到數據文件當中去。由於這個原因我們要前滾redo_log以應用那些已經提交了的事務。
xtrabackup備份需要的權限:
1、MySQL層面:由於要備份MYISAM引擎的表(xtrabackup不能備份MYISAM表,但是它的包裝器innobackup可以備份這種表)所以要用到RELOAD,LOCK TABLE。
這個權限用於執行FLUSH TABLES WITH READ LOCK、FLUSH ENGINE LOGS。
2、MYSQL層面:REPLICATION CLIENT 這個權限為的是查看二進制日志當前寫到了那個位置。
3、MySQL層面:PROCESS 查看MySQL相關連接的進程。
4、MySQL層面:SUPPER 用於在復制環境中執行stop slave | start slave。
5、MySQL層面:create、insert、select;這是因為xtrabackup會創建一個它自己用的表對象。
6、綜上所述創建用於xtrabackup備份用戶的SQL語句為
grant RELOAD,LOCK TABLES,REPLICATION CLIENT,PROCESS,SUPER,CREATE,INSERT,SELECT on *.*
to xtraback@'localhost' identified by 'xtraback';
7、Linux文件系統層面:由於要寫入,讀取;所以用戶要有對應備份目錄的wrx權限。對datadir目錄要rx權限。
8、在linux系統中創建一個用於執行備份的用戶
root> useradd xtrabackupuser
root>echo 'xtrabackupuser' | passwd --stdin xtrabackupuser
root>mkdir /mysql_backup && chown xtrabackupuser.xtrabackupuser /mysql_backup
xtrabackup備份例子:用xtrabckupuser創建一個全備
root> su - xtrabackupuser
xtrabackupuser> innobackup --user=xtraback --password=xtraback /mysql_backup
#看清楚了沒有,明白了吧,只要給了它MySQL、Linux這兩個層面的權限就可以執行備份了。
由於xtrabackup還要記錄一些操作日志到mysql數據中,總的來說它要用到的所有權限如下:
create user xtrabackup@'localhost' identified by 'xtrabackup'; grant reload,lock tables,replication client,create tablespace,process,super on *.* to xtrabackup@'localhost' ; grant create,insert,select on percona_schema.* to xtrabackup@'localhost' ;