MySQL备份与恢复-3
Posted 夜间独行的浪子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL备份与恢复-3相关的知识,希望对你有一定的参考价值。
上一片myloder搞崩溃,为什么百度的博文都是抄袭一模一样的,哎烦!
这一片文章我们来介绍物理备份工具xtracebackup!
首先是安装可以percona官网下载安装,下载rpm包直接yum安装即可!
yum install -y perl-DBD-mysql perl-DBI perl-Time-HiRes libaio* #安装依赖包
yum install -y percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm
[[email protected] ~]# xtrabackup -v
xtrabackup version 2.4.4 based on MySQL server 5.7.13 Linux (x86_64) (revision id: df58cf2)
#下载的时候尽量下载新版本的percoan,这样会有对MySQL5.7的支持
#写这个博文的时候,官网最新版本好像是2.4.14
XtraceBackup是由知名数据库软件服务企业Percona提供的一款热备工具,除了能够支持最为常见的MyISAM,INNODB引擎对象外,还支持XtraDB引擎。
查看percona的安装文件:
[[email protected] ~]# rpm -ql percona-xtrabackup-24-2.4.4-1.el6.x86_64 /usr/bin/innobackupex /usr/bin/xbcloud /usr/bin/xbcloud_osenv /usr/bin/xbcrypt /usr/bin/xbstream #以专用的xbstream格式压缩xtrabackup输出的信息。也可以使用tar /usr/bin/xtrabackup #最经常使用的就是这两个备份工具,其中xtracebackup只能备份INNODB存储引擎,而innobackupex对xtracebackup进行了封装,不仅能备份INNODB存储引擎,也能备份myisam存储引擎。 /usr/share/doc/percona-xtrabackup-24-2.4.4 /usr/share/doc/percona-xtrabackup-24-2.4.4/COPYING /usr/share/man/man1/innobackupex.1.gz /usr/share/man/man1/xbcrypt.1.gz /usr/share/man/man1/xbstream.1.gz /usr/share/man/man1/xtrabackup.1.gz
XtraceBackup备份有以下几个优点:
l 备份集高效,完整,可用。
l 备份任务执行过程中不会有阻塞任务
l 节省磁盘空间,降低网络带宽占用
l 备份集自动验证机制
l 恢复更快
xtrabackup必须在MySQL服务端执行(但是创建的备份集不一定是保存在本地),特别是通过innobackupex命令创建备份集时,由于操作需要连接数据库获取信息,因此还要指定的连接参数(用户名,密码),而且连接所使用的的用户,必须拥有正确的操作权限。
innobackupex的参数有很多,仅通过实例来讲解经常使用的,若需要某些参数可以查看官方文档!
一个完全备份
[[email protected] ~]# innobackupex --user=root --password=123456 /data/backup/ #备份很简单,/data/backup/为备份的目录 181128 18:50:47 innobackupex: Starting the backup operation IMPORTANT: Please check that the backup run completes successfully. At the end of a successful backup run innobackupex prints "completed OK!". 181128 18:50:47 version_check Connecting to MySQL server with DSN ‘dbi:mysql:;mysql_read_default_group=xtrabackup;host=localhost‘ as ‘root‘ (using password: YES). 181128 18:50:47 version_check Connected to MySQL server 181128 18:50:47 version_check Executing a version check against the server... 181128 18:50:47 version_check Done.
181128 18:50:47 Connecting to MySQL server host: localhost, user: root, password: set, port: 0, socket: (null)
Using server version 5.7.22-log
innobackupex version 2.4.4 based on MySQL server 5.7.13 Linux (x86_64) (revision id: df58cf2)
xtrabackup: uses posix_fadvise().
xtrabackup: cd to /data/mysql
xtrabackup: open files limit requested 0, set to 1024
xtrabackup: using the following InnoDB configuration:
xtrabackup: innodb_data_home_dir = .
xtrabackup: innodb_data_file_path = ibdata1:12M:autoextend
xtrabackup: innodb_log_group_home_dir = ./
xtrabackup: innodb_log_files_in_group = 2
xtrabackup: innodb_log_file_size = 50331648
InnoDB: Number of pools: 1
181128 18:50:47 >> log scanned up to (13741543758)
xtrabackup: Generating a list of tablespaces
InnoDB: Allocated tablespace ID 48 for mysql/servers, old maximum was 0
181128 18:50:48 [01] Copying ./ibdata1 to /data/backup/2018-11-28_18-50-47/ibdata1 #拷贝的是ibd文件,然后分别拷贝每张表的文件,然后再拷贝redo日志
181128 18:50:48 >> log scanned up to (13741543758)
181128 18:50:49 >> log scanned up to (13741543758)
181128 18:50:50 [01] ...done
181128 18:50:50 [01] Copying ./mysql/servers.ibd to /data/backup/2018-11-28_18-50-47/mysql/servers.ibd
181128 18:50:50 [01] ...done
181128 18:50:50 [01] Copying ./mysql/time_zone_name.ibd to /data/backup/2018-11-28_18-50-47/mysql/time_zone_name.ibd
...... MySQL binlog position: filename ‘test3-bin.000001‘, position ‘21818‘ 181128 18:51:12 [00] Writing backup-my.cnf 181128 18:51:12 [00] ...done 181128 18:51:12 [00] Writing xtrabackup_info 181128 18:51:12 [00] ...done xtrabackup: Transaction log of lsn (13741543749) to (13741543758) was copied. 181128 18:51:12 completed OK! #出现completed OK表示备份完成!
因为过程比较长,没有粘贴,可以看一下备份的过程!
innobackupex会在备份目录下面创建以当前时间点命名的备份文件如下:
[[email protected] ~]# cd /data/backup/ [[email protected] backup]# ls 2018-11-28_18-50-47 #以当前时间点命名的备份文件集 [[email protected] backup]# cd 2018-11-28_18-50-47/ [[email protected] 2018-11-28_18-50-47]# ls #看到的备份之后的文件集 backup-my.cnf employees hostinfo ibdata1 mysql performance_schema sys tpcc_test xtrabackup_binlog_info xtrabackup_info cmdb financesys ib_buffer_pool lianxi mytest sbtest test ts1.ibd xtrabackup_checkpoints xtrabackup_logfile
[[email protected] 2018-11-28_18-50-47]# cd employees; ls #每个数据库中包含的表的结构文件(frm)和表数据文件(ibd)
current_dept_emp.frm departments.frm dept_emp.frm dept_emp_latest_date.frm dept_manager.ibd employees.ibd salaries.ibd test2.frm titles.frm
db.opt departments.ibd dept_emp.ibd dept_manager.frm employees.frm salaries.frm test1.frm test3.frm titles.ibd
[[email protected] employees]#
backup-my.cnf: 为当前数据库配置文件的备份!
xtrabackup_binlog_info:当前备份文件对应的二进制日志文件和position位置,做PIT恢复时使用。
[[email protected] 2018-11-28_18-50-47]# cat xtrabackup_info #包含信息比较多
uuid = 85662dd9-f2fb-11e8-a47c-fa336351fc00 #当前数据库的UUID
name =
tool_name = innobackupex #包含备份的工具,备份的命令,备份工具的版本,MySQL的版本
tool_command = --user=root --password=... /data/backup/
tool_version = 2.4.4
ibbackup_version = 2.4.4
server_version = 5.7.22-log
start_time = 2018-11-28 18:50:47 #备份的开始时间
end_time = 2018-11-28 18:51:12 #备份的结束时间
lock_time = 0
binlog_pos = filename ‘test3-bin.000001‘, position ‘21818‘ #二进制日志的位置
innodb_from_lsn = 0
innodb_to_lsn = 13741543749 #刷新到lsn的位置
partial = N
incremental = N #增量备份
format = file
compact = N
compressed = N
encrypted = N
[[email protected] 2018-11-28_18-50-47]# cat xtrabackup_checkpoints #包含checkpoint的信息,以及备份方式
backup_type = full-backuped
from_lsn = 0
to_lsn = 13741543749
last_lsn = 13741543758
compact = 0
recover_binlog_info = 0
xtrabackup_logfile:【未知】
执行恢复
恢复分为两个步骤:
准备恢复:所谓准备恢复,就是要为恢复做准备。就是说备份集没办法直接拿来用,因为这中间可能存在未提交或未回滚的事务,数据文件不一致,所以需要一个队备份集的准备过程。
[[email protected] ~]# innobackupex --apply-log /data/backup/2018-11-28_18-50-47/ #准备阶段的命令 181128 19:16:57 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.4 based on MySQL server 5.7.13 Linux (x86_64) (revision id: df58cf2) xtrabackup: cd to /data/backup/2018-11-28_18-50-47 xtrabackup: This target seems to be not prepared yet. InnoDB: Number of pools: 1 ..... InnoDB: 5.7.13 started; log sequence number 13741544981 xtrabackup: starting shutdown with innodb_fast_shutdown = 1 InnoDB: FTS optimize thread exiting. InnoDB: Starting shutdown... InnoDB: Shutdown completed; log sequence number 13741545378 181128 19:17:02 completed OK!
执行恢复:innobackupex提供了--copy-back参数,就是将指定的备份集,恢复到指定的路径下面(这个指定的路径是配置文件中datadir指定的路径)!
[[email protected] ~]# service mysqld stop #首先停掉数据库 Shutting down MySQL.... SUCCESS! [[email protected] ~]# rm -fr /data/mysql/* #情况datadir指定的目录,若是线上环境,确保一定备份过 [[email protected] ~]# innobackupex --copy-back /data/backup/2018-11-28_18-50-47/ #备份命令 181128 19:20:58 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!". innobackupex version 2.4.4 based on MySQL server 5.7.13 Linux (x86_64) (revision id: df58cf2) ...... 181128 19:21:30 [01] Copying ./xtrabackup_info to /data/mysql/xtrabackup_info 181128 19:21:30 [01] ...done 181128 19:21:30 [01] Copying ./xtrabackup_binlog_pos_innodb to /data/mysql/xtrabackup_binlog_pos_innodb 181128 19:21:30 [01] ...done 181128 19:21:30 [01] Copying ./xtrabackup_galera_info to /data/mysql/xtrabackup_galera_info 181128 19:21:30 [01] ...done 181128 19:21:30 [01] Copying ./ibtmp1 to /data/mysql/ibtmp1 181128 19:21:30 [01] ...done 181128 19:21:30 completed OK! #恢复完成
数据库恢复之后,启动数据库:
[[email protected] ~]# chown -R mysql:mysql /data/mysql/ [[email protected] ~]# service mysqld start Starting MySQL.. SUCCESS!
至此一个完全备份的数据恢复工作完成!
在使用innobackupex进行备份时,还可以使用--no-timestamp选项来阻止命令自动创建一个以时间命名的目录,我们可以自定义备份集的名字如下:
[[email protected] ~]# innobackupex --user=root --password=123456 --no-timestamp /data/backup/test_`date +%F` #指定备份集的名字 [[email protected] ~]# cd /data/backup/ [[email protected] backup]# ls #查看备份集 test_2018-11-28 [[email protected] backup]#
有时候因为socket文件不在默认位置,可以使用--socket指定位置:
[[email protected] ~]# innobackupex --user=root --password="7abec53701c3eefb" --no-timestamp /data/backup/testdb 181128 19:40:10 innobackupex: Starting the backup operation IMPORTANT: Please check that the backup run completes successfully. At the end of a successful backup run innobackupex prints "completed OK!". 181128 19:40:10 version_check Connecting to MySQL server with DSN ‘dbi:mysql:;mysql_read_default_group=xtrabackup‘ as ‘root‘ (using password: YES). 181128 19:40:10 version_check Connected to MySQL server 181128 19:40:10 version_check Executing a version check against the server... 181128 19:40:10 version_check Done. 181128 19:40:10 Connecting to MySQL server host: localhost, user: root, password: set, port: 0, socket: (null) Failed to connect to MySQL server: Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘ (2). [[email protected] ~]# innobackupex --user=root --password="7abec53701c3eefb" --no-timestamp --socket=/var/lib/mysql/mysql.sock data/backup/testdb
以上是关于MySQL备份与恢复-3的主要内容,如果未能解决你的问题,请参考以下文章