xtrabackup执行备份要拥有的权限
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' ;