流程介绍:
- [ ] 安装 innobackupex
- [ ] 备份数据
- [ ] 创建并授权备份用户
看了网上很多的 innobackupex 备份的实例,发现很多都是直接使用 “root” 用户进行对数据进行备份;然而,这样的备份方式是非常不安全的,mysql 数据库的 “root" 密码直接暴露在屏幕前;说白了这和 ”裸奔“ 有啥区别;如果数据库的密码落在了别人的手里,那么后果可.....(这个靠自己想吧)。这篇文章就是解决这个问题而生的!
一、安装 innobackup
安装依赖包
# yum -y install rsync perl-DBD-MySQL numactl libaio-devel perl-Digest perl-Digest-MD5
# wget https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libev-4.15-3.el7.x86_64.rpm
# rpm -ivh libev-4.15-3.el7.x86_64.rpm
# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.11/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.11-1.el7.x86_64.rpm
# rpm –ivh percona-xtrabackup-24-2.4.11-1.el7.x86_64.rpm
二、备份数据
# innoxtrabackupex --defaults-file=/etc/my.cnf --socket=/data/mysql/mysql.sock --user=root --password=123456 /mnt/xtra
在最后有这个提示就是备份成功

到备份好的目录查看,数据已经备份好了

温馨提示:
如果在企业里面对数据这样来进行备份得话,那么 root 用户的密码直接就暴露出去了,这样和 “裸奔” 有什么区别,这也太不安全了吧!
所以用进行对用户进行授权登陆,进行权限的控制,用授权的用户进行备份.......
三、创建并授权备份用户
Mysql> grant reload,lock tables,replication client,create tablespace,process,super on *.* to 'xtrabackup'@'localhost' identified by '123456';
Mysql> flush privileges;
不使用( grant all on . to 'root-text1'@'%' indentified by '123456'; ) 创建的原因是为了控制权限的利用,避免权限的滥用
注意: 尝试用 “xtrabackup” 用户登陆 mysql ,可以正常登陆,对库/表/用户只有查看的权限,不能进行删除修改

用 “xtrabackup” 用户进行备份数据库
# innoxtrabackupex --defaults-file=/etc/my.cnf --socket=/data/mysql/mysql.sock --user=xtrabackup --password=123123 /mnt/xtra
备份成功

登陆 mysql ,对用户权限的查看
Mysql> select user,host,Reload_priv from user;
正因为授权给 “xtrabackup” 用户有了 “Reload”重加载的权限才能对数据库进行备份

在数据库上尝试用 “back” 用户进行备份,会发现报错。如下图所示

温馨提示: 如果是没有 “Reload” 权限的用户无法执行备份
总结(两步走):
对备份用户授权
Mysql> grant reload,lock tables,replication client,create tablespace,process,super on *.* to 'xtrabackup'@'localhost' identified by '123456';
备份
# innoxtrabackupex --defaults-file=/etc/my.cnf --socket=/data/mysql/mysql.sock --user=xtrabackup --password=123123 /mnt/xtra
附上 mysql 用户常用权限详解
权限 |
权限级别 |
权限说明 |
CREATE |
数据库、表或索引 |
数据库、表或索引权限 |
DROP |
数据库表 |
删除数据库或表权限 |
GRANT OPTION |
数据库、表或保存的程序 |
赋予权限选项 |
REFERENCES |
数据库或表 |
|
ALTER |
表 |
更改表,比如添加字段、索引等 |
DELETE |
表 |
删除数据权限 |
INDEX |
表 |
索引权限 |
INSERT |
表 |
插入权限 |
SELECT |
表 |
查询权限 |
UPDATE |
表 |
更新权限 |
CREATE VIEW |
视图 |
创建视图 |
SHOW VIEW |
视图 |
查看视图 |
ALTER ROUTINE |
存储过程 |
更改存储过程权限 |
CREATE ROUTINE |
存储过程 |
创建存储过程权限 |
EXECUTE |
存储过程 |
执行存储过程权限 |
FILE |
服务器主机上的文件访问 |
文件访问权限 |
CREATE TEMPORARY TABLES |
服务器管理 |
创建临时表权限 |
LOCK TABLES |
服务器管理 |
锁表权限 |
CREATE USER |
服务器管理 |
创建用户权限 |
PROCESS |
服务器管理 |
查看进程权限 |
RELOAD |
服务器管理 |
执行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的权限 |
REPLICATION CLIENT |
服务器管理 |
复制权限 |
REPLICATION SLAVE |
服务器管理 |
复制权限 |
SHOW DATABASES |
服务器管理 |
查看数据库权限 |
SHUTDOWN |
服务器管理 |
关闭数据库权限 |
SUPER |
服务器管理 |
执行kill线程权限 |
MYSQL的权限如何分布,就是针对表可以设置什么权限,针对列可以设置什么权限等等,这个可以从官方文档中的一个表来说明
权限分布 |
配置的权限 |
表权限 |
'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter' |
列表权限 |
'Select', 'Insert', 'Update', 'References' |
过程权限 |
'Execute', 'Alter Routine', 'Grant' |