技术分享
mysql innodb备份恢复和主从复制 xtrabackup工具的使用
2021-06-28
用XtraBackup实现MySQL的主从复制快速部署【主不锁表】
mysql热备工具xtrabackup
xtrabackup有两个主要的工具:xtrabackup、innobackupex
(1)xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表 (2)innobackupex是参考了InnoDB Hotbackup的innoback脚本修改而来的,innobackupex是一个perl脚本封装,封装了xtrabackup,所以能同时备份处理innodb和myisam,但在处理myisam时需要加一个读锁。并且加入了一些使用的选项,如slave-info可以记录备份恢复后,作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。
1,安装xtrabackup
[root@bs-db2 data]# wget
[root@bs-db2 data]# rpm -ivh percona-xtrabackup-2.1.6-702.rhel6.x86_64.rpm
Preparing... ########################################### [100%]
1:percona-xtrabackup ########################################### [100%]
innobackupex是一个perl脚本封装,如果安装提示缺少perl库可以搜索安装
[root@bs-db2 data]# yum install perl-DBD-MySQL
[root@bs-db2 data]# yum install perl-Time-HiRes
其他的搜索安装即可。
在linux shell中查看是否有
[root@bs-db2 data]# xtrabackup
xtrabackup xtrabackup_55 xtrabackup_56
[root@bs-db2 data]# innobackupex
innobackupex innobackupex-1.5.1
如果没有 可以尝试重新登录。其他情况欢迎留言。
2,备份
首先注意一点:确保在my.cnf中存在[mysqld]并且在[mysqld]后面存在 datadir = ....
这里的参数datadir为mysql源码编译安装存放数据的目录。如我的mysql编译安装在/opt/mysql
这里的datadir=/opt/mysql/data
备份指令
[root@bs-db2 data]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=Abcd1234 --stream=tar ./ |gzip >mysql_back.tar.gz
其中参数--stream=tar
备份文件输出格式, tar时使用tar4ibd , 该文件可在XtarBackup binary文件中获得.如果备份时有指定--stream=tar, 则tar4ibd文件所处目录一定要在$PATH中(因为使用的是tar4ibd去压缩, 在XtraBackup的binary包中可获得该文件)。
在使用参数stream=tar备份的时候,你的xtrabackup_logfile可能会临时放在/tmp目录下,如果你备份的时候并发写入较大的话xtrabackup_logfile可能会很大(5G+),很可能会撑满你的/tmp目录,可以通过参数--tmpdir指定目录来解决这个问题。
注意备份完成后 innobackupex 提示解压时要加上i参数
3,还原
[root@bs-db2 data]# scp mysql_back.tar.gz root@192.168.11.41:/opt/mysql/inno
复制备份文件到slave上
[root@bs-db2 inno]# pwd
/opt/mysql/inno
[root@bs-db2 inno]# ll
total 1481752
-rw-r--r-- 1 root root 1517306755 Dec 12 10:40 mysql_back.tar.gz
[root@bs-db2 inno]# tar zxvfi mysql_back.tar.gz
./backup-my.cnf
ibdata1
.
.
.
mysql/ndb_binlog_index.frm
mysql/proc.MYI
mysql/help_relation.MYD
mysql/user.MYD
mysql/servers.MYI
mysql/ndb_binlog_index.MYI
xtrabackup_logfile
xtrabackup_checkpoints
./xtrabackup_binary
[root@bs-db2 inno]innobackupex --defaults-file=/etc/my.cnf --user=root --password=Abcd1234 --apply-log /opt/mysql/inno/
--apply-log
对xtrabackup的--prepare参数的封装
(--prepare
实施对备份文件进行恢复前的准备(生成InnoDB log file)xtrabackup指令)
--copy-back
做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir ;
InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona LLC and/or its affiliates 2009-2013. All Rights Reserved.
This software is published under
the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.
Get the latest version of Percona XtraBackup, documentation, and help resources:
IMPORTANT: Please check that the apply-log run completes successfully.
At the end of a successful apply-log run innobackupex
prints "completed OK!".
131212 12:20:01 innobackupex: Starting ibbackup with command: xtrabackup_55 --defaults-file="/etc/my.cnf" --defaults-group="mysqld" --prepare --target-dir=/opt/mysql/inno --tmpdir=/tmp
.
.
.
[notice (again)]
If you use binary log and don't use any hack of group commit,
the binary log position seems to be:
InnoDB: Last MySQL binlog file position 0 32661, file name ./mysql-bin.000026
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
131212 12:20:07 InnoDB: Starting shutdown...
131212 12:20:12 InnoDB: Shutdown completed; log sequence number 11667029516
131212 12:20:12 innobackupex: completed OK!
注意此文件
[root@bs-db2 inno]# more xtrabackup_binlog_info
mysql-bin.000026 32661
记录了master的备份时状态,一会儿slave同步的时候设置为master_log_file 和master_log_pos
[root@bs-db2 inno]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=Abcd1234 --copy-back /opt/mysql/inno/
其中/opt/mysql/inno/为备份出来的文件位置。
[root@bs-db2 data]# chown mysql.mysql * -R 修改数据文件的权限
[root@bs-db2 data]# /etc/init.d/mysql restart
3,同步
配置主从
#master
# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id = 1
#slave
# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id = 2
更多配置参考度娘。
登入mysql shell中
mysql> change master to master_host='192.168.11.43',
-> master_port=3333,
-> master_user='slave1',
-> master_password='Abcd1234',
-> master_log_file='mysql-bin.000026',
-> master_log_pos=32661;
Query OK, 0 rows affected (0.05 sec)
这里的log_file和log_pos通过mysql数据目录下的xtrabackup_binlog_pos_innodb文件获得
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.11.43
Master_User: slave1
Master_Port: 3333
Connect_Retry: 60
Master_Log_File: mysql-bin.000026
Read_Master_Log_Pos: 32852
Relay_Log_File: bs-db2-relay-bin.000002
Relay_Log_Pos: 444
Relay_Master_Log_File: mysql-bin.000026
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
同步ok
如遇其他问题欢迎留言,共同探讨。
- 标签:
-
容灾备份