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
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
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- Pytorch 解决自定义子Module .cuda() tensor失败的问题
- PHP异常类及异常处理操作实例详解
- PHP面向对象程序设计(OOP)之方法重写(override)操作示例
- Python3与fastdfs分布式文件系统如何实现交互
- PHP判断是否微信访问的方法示例
- Pytorch损失函数nn.NLLLoss2d()用法说明
- python实现学生成绩测评系统
- Python dict的常用方法示例代码
- Scrapy模拟登录赶集网的实现代码
- opencv 图像腐蚀和图像膨胀的实现
- PHP实现微信退款的方法示例
- 基于Python和C++实现删除链表的节点
- python让函数不返回结果的方法
- PHP微商城开源代码实例
- PHP小程序支付功能完整版【基于thinkPHP】