3.Mysql之xtrabackup命令实战03

时间:2021-07-10
本文章向大家介绍3.Mysql之xtrabackup命令实战03,主要包括3.Mysql之xtrabackup命令实战03使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.前言

  在前面的两小节,分别介绍xtrabackup工具的一些特点以及优缺点,且在第二小节中介绍了它的备份工作原理。

2.实战(全量和增量)

  其实这里我就不想把我的实战例子拿出来给大家分享,这里只是分享几个命令以及操作细节。

    全量备份命令: 

innobackupex    --defaults-file=/data/3307/my.cnf   --user=root  --password='123'  --no-timestamp /data/xbackup_3307/

   其中参数:

    --defaults-file:这个写你Mysql实例的配置文件(懂的都懂),

    后面的--user 和 --password可以是你新创建的专门用于备份的用户,但是该用户必须具有create/insert/select/reload/lock table/replication client/create tablespace/process/super权限,这里我偷懒了,直接用root权限(最高权限)进行备份。

    --no-timestamp:带上该参数后就不会在你指定的路径下再生成一个带有日期的目录,然后目录下面才是是你用innobackupex执行后的文件(我觉得备份时不要带上该参数,这样可以显示出全备时具体的时间,好方便管理)。

    以上命令的参数可以扩展。。。。

  全量恢复命令:

innobackupex   --defaults-file=/data/3308/my.cnf   -uroot -p123 -P3308 --apply-log /data/xbackup_3307/

innobackupex   --defaults-file=/data/3308/my.cnf   -uroot -p123 -P3308 --copy-back  /data/xbackup_3307/

  说明:这里的恢复命令主要有两条:

       第一条是apply-log:目的是将redo进行重做,将已经提交的事务写到数据文件中,未提交的事务使用undo回滚掉,该过程是模拟CSR过程。

     第二条是copy-back: 目的是将innobackupex出的文件全都拷贝到该配置文件所对应的目录中

  最后:恢复完成!

-----------------------------------------------------------------------------------------------------------------------------------------

  增量备份

    说明:

1)增量备份的方式,是基于上一次备份进行增量。
(2)增量备份无法单独恢复。必须基于全备进行恢复。
(3)所有增量必须要按顺序合并到全备中。

  步骤:

  先进行全备,然后第一次增量备份基于第一次的全备

innobackupex    --defaults-file=/data/3307/my.cnf   --user=root  --password='123'  --no-timestamp /data/xbackup_3307/                /*全备*/

  第一次增备(基于第一次全备)

innobackupex  --defaults-file=/data/3307/my.cnf  --no-timestamp   --incremental-basedir=/data/xbackup_3307  --incremental  /data/incremental_one

  --incremental-basedir=:后面跟全备目录的绝对路径

  --incremental:后面跟第一次增量备份目录的绝对路径

  注意:第一参数后面要跟上等于号,第二个参数后面没有等于号

  第二次增备(主要是基于第二增量备份的)

innobackupex  --defaults-file=/data/3307/my.cnf  --no-timestamp   --incremental-basedir=/data/incremental_one  --incremental  /data/incremental_two 

  第三次、第四次等等........

  增量备份恢复(过程) 

##先apply全量备份
innobackupex   --defaults-file=/data/3307/my.cnf   -uroot -p123 -P3308 --apply-log /data/xbackup_3307/

##然后再apply第一增量备份到全量备份中
innobackupex  --defaults-file=/data/3307/my.cnf  --apply-log --incremental-dir=/data/incremental_one  /data/xbackup_3307

##然后再apply第二次增量备份到全量备份中
innobackupex  --defaults-file=/data/3307/my.cnf  --apply-log --incremental-dir=/data/incremental_two  /data/xbackup_3307

##最后再对全备进行apply-log一次
innobackupex --defaults-file=/data/3307/my.cnf --apply-log /data/xbackup_3307
##最后将恢复的全量备份copy-back(类似于全量备份恢复) 
innobackupex
--defaults-file=/data/3307/my.cnf --copy-back /data/xbackup_3307

   以上可以进行参数扩展等等。

------------------------------------------------------------------------------------------------------------------------------

3.基于时间点恢复

  innobackupex命令本身不支持基于时间点的备份和恢复,所以可以先使用innobackupex进行全备,然后使用binlog来实现基于时间的恢复

  • 完全备份用innobackup就可以了
  • binlog备份可以使用binlog server(早期的binlog server在使用--raw选项时,可能会导致最后一个事务的commit标记丢失,从而导致最后一个事务在执行恢复是被回滚),或者使用rsync命令来备份binlog日志  

  3.1执行完全备份、binlog备份

    在需要执行备份的数据库服务器上,查看当前binlog文件有哪些,一般在生产环境中备份数据需要被单独放在备份NFS服务器上,或者通过SCP、SSH传输到备份专用服务器上,不会放到本地

  远程备份命令:

mysqlbinlog  -R --raw --host='192.168.31.201' --user=rpl  --password='123'   --port=3307  --stop-never   -r /data/binlogserver/   binlog.00001

##--host:主库的IP地址 --user:主库上备份用户 --password:主库上的备份用户的密码 这样我用的是主从复制是创建的复制用户来进行binlog备份的。 binlog.000001表示从
第一个binlog日志开始备份。

  参数介绍:

  • –defaults-file=file_name:仅读取该选项指定的配置文件
  • –host=host_name, -h host_name:在使用binlog server时,指定从哪台mysql server主机上获取二进制日志
  • –password[=password], -p[password]:连接到服务器时使用的密码
  • –port=port_num, -P port_num:用于连接到远程server的TCP / IP端口号
  • –raw:默认情况下,不使用–raw选项,mysqlbinlog读取二进制日志文件,并解析为文本格式输出事件(直接打印在标准输出中,可以使用输出重定向到文件中,也可以使用–result-file选项指定输出文件), –raw选项告诉mysqlbinlog仍然以读取binlog时的原始二进制格式输出。该选项需要结合–read-from-remote-server选项使用
  • –read-from-remote-server, -R 1、使用该选项时,mysqlbinlog会伪装成一个slave,连接读取,请求指定的binlog file,主库获取接收到这个请求之后就创建一个binlog dump线程推送binlog给mysqlbinlog server。 2、从MySQL server读取二进制日志,而不是读取本地日志文件。对于这些选项–host,–password,–port,–protocol,–socket和–user,除非给出了–read-from-remote-server选项结合使用,否则单独指定这些TCP/IP连接选项将被忽略不生效
  • –result-file=name, -r name:不与–raw选项一并使用时,此选项指定一个mysqlbinlog解析的文本存放的文件,当单独使用–raw选项时,mysqlbinlog会使用从远程server传输的原始binlog格式写入本地文件中,默认情况下输出文件与原始日志文件使用相同的文件名称。如果与–raw选项一并使用时,–result-file选项值会修改输出文件名的前缀,如:原本是mysql-bin.000001,使用–result-file=binlog,则输出文件名为binlogmysql-bin.000001

  说明:这里binlog备份一般使用脚本进行备份的,参考脚本如下: 

 1 #!/bin/sh
 2 BACKUP_BIN=/usr/local/mysql/bin/mysqlbinlog
 3 LOCAL_BACKUP_DIR=/data/backup/binlog_bk
 4 BACKUP_LOG=/data/backup/bakbinlog.log
 5 REMOTE_HOST=192.168.56.100
 6 #REMOTE_PORT=3306
 7 SERVER_ID=20003306
 8 REMOTE_USER=wanbin
 9 REMOTE_PASS=mysql
10 #time to wait before reconnecting after failure
11 SLEEP_SECONDS=10
12 ##create local_backup_dir if necessary
13 ##mkdir -p ${LOCAL_BACKUP_DIR}
14 cd ${LOCAL_BACKUP_DIR}
15 ## 运行while循环,连接断开后等待指定时间,重新连接
16 while :
17 FIRST_BINLOG=$(mysql --host=${REMOTE_HOST} --user=${REMOTE_USER} --password=${REMOTE_PASS} -e 'show binary logs'|grep -v "Log_name"|awk '{print $1}'|head -n 1)
18 do
19   if [ `ls -A "${LOCAL_BACKUP_DIR}" |wc -l` -eq 0 ];then
20      LAST_FILE=${FIRST_BINLOG} ##如果备份目录中没有备份文件则 LAST_FILE=FIRST_FILE
21   else
22      LAST_FILE=`ls -l ${LOCAL_BACKUP_DIR} |tail -n 1 |awk '{print $9}'` ##last_file取序列最大的binlog文件
23   fi
24   ${BACKUP_BIN} -R --raw --host=${REMOTE_HOST} --user=${REMOTE_USER} --password=${REMOTE_PASS} ${LAST_FILE} --stop-never --stop-never-slave-server-id=${SERVER_ID} 
25   echo "`date +"%Y/%m/%d %H:%M:%S"` mysqlbinlog停止,返回代码:$?" | tee -a ${BACKUP_LOG}
26   echo "${SLEEP_SECONDS}秒后再次连接并继续备份" | tee -a ${BACKUP_LOG}  
27   sleep ${SLEEP_SECONDS}
28 done
binlog备份脚本

 4.总结:

  基于时间的恢复:先恢复全备(这里就是用innobackupex进行备份恢复,比如说一天一全备),然后备份binlog日志(这里通过mysqlbinlog命令进行远程备份),可以通过修改上述binlog备份脚本,可以每10s中进行备份,如果你不能允许10s的话,可以设置1s设置实时备份。

  如果我们的机器在某天的时刻突然宕机了,那么我们可以用前一天的全备+(全备完成之后的时刻到宕机时刻)的binlog备份就能完成整个数据库的恢复了。

  -->这里我们要分析出数据库全备完成时刻到数据库宕机时刻之间的binlog 日志在哪个范围(找出来)

  -->使用mysqlbinlog    -h xxxx -u  -p  --start-position=xxx   mysql-bin.00001  mysql-bin.000002  mysql-bin.00003  >/backup/binlog.sql

  -->souce /backup/binlog.sql

 

    

  

    

    

  

原文地址:https://www.cnblogs.com/zmc60/p/14995089.html