如果要使用一个最小权限的用户进行备份,则可基于如下命令创建此类用户:如果要使用一个最小权限的用户进行备份,则可基于如下命令创建此类用户:
mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY '123456'; #创建用户
mysql> REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'bkpuser'; #回收此用户所有权限
mysql> GRANT RELOAD,LOCK TABLES,RELICATION CLIENT ON *.* TO 'bkpuser'@'localhost'; #授权刷新、锁定表、用户查看服务器状态
mysql> FLUSH PRIVILEGES; #刷新授权表
wget ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/libev-4.15-1.el6.rf.x86_64.rpm
注:安装前提必须要有mysql,若无法使用wget命令,也可以下载文件后,手动上传至服务器
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.7/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.7-2.el6.x86_64.rpm
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.7/binary/redhat/6/x86_64/percona-xtrabackup-24-debuginfo-2.4.7-2.el6.x86_64.rpm
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.7/binary/redhat/6/x86_64/percona-xtrabackup-test-24-2.4.7-2.el6.x86_64.rpm
命令如下:
yum install perl-DBD-MySQL
命令如下:
rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
命令如下:
rpm -ivh percona-xtrabackup-24-debuginfo-2.4.7-2.el6.x86_64.rpm
命令如下:
rpm -ivh percona-xtrabackup-24-2.4.7-2.el6.x86_64.rpm
命令如下:
rpm -ivh percona-xtrabackup-test-24-2.4.7-2.el6.x86_64.rpm
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL
yum -y install rsync perl l perl-Digest-MD5
b.出现如图错误:
解决方法:
xtrabackup-test为测试使用,若出现无法安装等情况,略过即可,不影响正常使用。
安装完成后,输入命令,如下图所示:
rpm -qa|grep xtrabackup
find / -name mysql.sock
find / -name my.cnf
mkdir /data/back_up
cd /data/back_up
innobackupex --defaults-file=/etc/my.cnf --socket=/tmp/mysql.sock --user=xxx--password=xxx /data/back_up
参数简介:
–defaults-file:配置文件
–socket:sock文件地址
–user:数据用户名
–password:数据库密码
最后的/data/backupall是备份目录
–databases 指定数据库
–incremental 创建增量备份
–incremental-basedir 指定包含完全备份的目录
–incremental-dir 指定包含增量备份的目录
–tmpdir=DIRECTORY
当有指定–remote-host or --stream时, 事务日志临时存储的目录, 默认采用MySQL配置文件中所指定的临时目录tmpdir
–apply-log 对备份进行预处理操作
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。
–redo-only 不回滚未提交事务
–copy-back 恢复备份目录
命令执行结束后,最后几行会显示类似于:”120407 09:01:04 innobackupex: completed OK!”,则表示备份成功。
nohup innobackupex --defaults-file=/etc/my.cnf --socket=/tmp/mysql.sock --user=xxx--password=xxx /data/backupall &
使用innobackupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件,这些文件会被保存到一个以时间命名的目录当中。在备份的同时,innobackupex还会在备份目录中创建如下文件:
1.xtrabackup_checkpoints – 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息:
每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN,LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。
2.xtrabackup_binlog_info – mysql服务器当前正在使用的二进制日志文件及备份这一刻位置二进制日志时间的位置。
3.xtrabackup_binlog_pos_innodb – 二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。
4.xtrabackup_binary – 备份中用到的xtrabackup的可执行文件;
5.backup-my.cnf – 备份命令用到的配置选项信息:
在使用innobackupex进行备份时,还可以使用–no-timestamp选项来阻止命令自动创建一个以时间命名的目录:如此一来,innobackupex命令将会创建一个BACKUP-DIR目录来存储备份数据。
至此,备份操作结束!
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或者已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处于不一致状态。"准备"的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使用得数据文件处于一致性状态。
innobackupex命令的–apply-log选项可用于实现上述功能,如下面的命令:
innobackupex --apply-log /data/back_up
如果执行正确,其最后输出的几行信息通常如下:
120407 09:01:04 innobackupex: completed OK!
在实现"准备"的过程中,innobackupex通常还可以使用–user-memory选项来指定其可以使用的内存的大小,默认为100M.如果有足够的内存空间可用,可以多划分一些内存给prepare的过程,以提高其完成备份的速度。
注:恢复不用启动MySQL
innobackupex --defaults-file=/etc/my.cnf --copy-back /data/back_up
当数据恢复至DATADIR目录以后,还需要确保所有的数据文件的属主和属组均为正确的用户,如mysql,否则,在启动mysqld之前还需要事先修改数据文件的属主和属组。如:
chown -R mysql.mysql /data/mysql_data/
至此,备份恢复结束!
总结全库备份与恢复三步:
具体操作命令如下:
[root@master backups]# innobackupex --user=root --password=123456 --host=127.0.0.1 /backups/ #在master上进行全库备份#语法解释说明:
#--user=root 指定备份用户
#--password=123456 指定备份用户密码
#--host 指定主机
#/backups 指定备份目录
[root@master backups]# ll
total 0
drwxr-x--- 7 root root 232 Jul 30 11:01 2018-07-30_11-01-37
[root@master backups]# ll 2018-07-30_11-01-37/ #查看备份数据
total 77856
-rw-r----- 1 root root 418 Jul 30 11:01 backup-my.cnf #备份用到的配置选项信息文件
-rw-r----- 1 root root 79691776 Jul 30 11:01 ibdata1 #数据文件
drwxr-x--- 2 root root 20 Jul 30 11:01 kim
drwxr-x--- 2 root root 4096 Jul 30 11:01 mysql
drwxr-x--- 2 root root 4096 Jul 30 11:01 performance_schema
drwxr-x--- 2 root root 20 Jul 30 11:01 repppp
drwxr-x--- 2 root root 4096 Jul 30 11:01 wordpress
-rw-r----- 1 root root 21 Jul 30 11:01 xtrabackup_binlog_info #mysql服务器当前正在使用的二进制日志文件和此时二进制日志时间的位置信息文件
-rw-r----- 1 root root 113 Jul 30 11:01 xtrabackup_checkpoints #备份的类型、状态和LSN状态信息文件
-rw-r----- 1 root root 482 Jul 30 11:01 xtrabackup_info
-rw-r----- 1 root root 2560 Jul 30 11:01 xtrabackup_logfile #备份的日志文件
[root@slave ~]# /etc/init.d/mysqld stop #停止slave上的mysql
Shutting down MySQL.. SUCCESS!
[root@slave tools]# yum install -y percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm #安装xtrabackup
[root@master backups]# scp -r 2018-07-30_11-01-37/ [email protected]:/backups/ #从master上拷贝备份数据
[root@slave tools]# innobackupex --apply-log /backups/2018-07-30_11-01-37/ #合并数据,使数据文件处于一致性的状态
180729 23:18:23 innobackupex: Starting the apply-log operation
IMPORTANT: Please check that the apply-log run completes successfully.
At the end of a successful apply-log run innobackupex
prints "completed OK!".
innobackupex version 2.4.9 based on MySQL server 5.7.13 Linux (x86_64) (revision id: a467167cdd4)
xtrabackup: cd to /backups/2018-07-30_11-01-37/
xtrabackup: This target seems to be not prepared yet.
InnoDB: Number of pools: 1
xtrabackup: xtrabackup_logfile detected: size=8388608, start_lsn=(3127097)
......
InnoDB: FTS optimize thread exiting.
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 3129915
180729 23:18:30 completed OK!
[root@slave ~]# rm -rf /usr/local/mysql/data/ #在slave上删除原有的数据
[root@slave ~]# vim /etc/my.cnf #配置my.cnf的数据目录路径,否则会报错,要和master一致
datadir=/usr/local/mysql/data
[root@slave ~]# innobackupex --copy-back /backups/2018-07-30_11-01-37/ #在slave上数据恢复
180729 23:32:03 innobackupex: Starting the copy-back operation
IMPORTANT: Please check that the copy-back run completes successfully.
At the end of a successful copy-back run innobackupex
prints "completed OK!".
......
180729 23:32:08 completed OK! #看到completed OK就是恢复正常了
[root@slave ~]# ll /usr/local/mysql/data/ #slave上查看数据目录,可以看到数据已经恢复,但是属主会有问题,需要进行修改,所以一般使用mysql的运行用户进行恢复,否则需要进行修改属主和属组信息
total 188432
-rw-r----- 1 root root 79691776 Jul 29 23:32 ibdata1
-rw-r----- 1 root root 50331648 Jul 29 23:32 ib_logfile0
-rw-r----- 1 root root 50331648 Jul 29 23:32 ib_logfile1
-rw-r----- 1 root root 12582912 Jul 29 23:32 ibtmp1
drwxr-x--- 2 root root 20 Jul 29 23:32 kim
drwxr-x--- 2 root root 4096 Jul 29 23:32 mysql
drwxr-x--- 2 root root 4096 Jul 29 23:32 performance_schema
drwxr-x--- 2 root root 20 Jul 29 23:32 repppp
drwxr-x--- 2 root root 4096 Jul 29 23:32 wordpress
-rw-r----- 1 root root 482 Jul 29 23:32 xtrabackup_info
[root@slave ~]# chown -R mysql.mysql /usr/local/mysql/data/ #修改属主属组
[root@slave ~]# /etc/init.d/mysqld start #启动mysql
Starting MySQL. SUCCESS!
[root@slave ~]# mysql -uroot -p -e "show databases;" #查看数据,是否恢复
Enter password:
+--------------------+
| Database |
+--------------------+
| information_schema |
| kim |
| mysql |
| performance_schema |
| repppp |
| wordpress |
+--------------------+
执行命令:
[root@elcndc2xabx07t back_up]# vim mysql_bak.sh
脚本内容:
# !/bin/sh
DATE=`date +%Y%m%d_%H%M%S`
# TODO
cd /data/back_up
innobackupex --defaults-file=/etc/my.cnf --socket=/tmp/mysql.sock --user=root --password=password --stream=tar ----tmpdir=/data/tmp /data/back_up | gzip > /data/back_up/back_up_$DATE.tar.gz
find /data/back_up -name "*.tar.gz" -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1
[root@elcndc2xabx07t back_up]# chmod -R 777 mysql_bak.sh
[root@elcndc2xabx07t back_up]# ./mysql_bak.sh
增加定时任务:3点执行脚本。
[root@elcndc2xabx07t back_up]# crontab -e
查看定时任务:
[root@elcndc2xabx07t back_up]# crontab -l