企业中如何对Mysql数据库进行热备份

A.基础概念问答:

  • 为什么要使用热迁移?

答:传统的数据库迁移方式(1、mysqldump;2、停机直接复制文件)都需要面临应用服务暂时停止访问的问题。如果数据库文件过大(GB级别),服务暂停时间甚至需要按小时计算。对于生产环境而言这是不可接受的。

  • 如何实现热迁移?

使用xtrabackup,以下为xtrabackup的热备原理图。

知识引申: http://mysql.taobao.org/monthly/2016/03/07/

注意点:实际中xtrabackup也会存在锁表,对于备份myism引擎的数据会全程锁表,对于备份innodb引擎的数据会存在短暂锁表(秒到分钟级别,个人在生产环境验证过热备200G左右的数据库文件,整个备份过程大概是5分钟,锁表时间是秒级别)。所以xtrabackup特别适合大数据库文件备份。

  • xtrabackup存在那些优缺点?

优点:

  • 备份速度极快,可以实现innodb的热备份。
  • 基于物理备份,成功率高。
  • 对内存,CPU资源的消耗可控且小
  • 恢复速度极快。

缺点:

  • xtrabackup生成的文件相对要比mysqldump等文件要大,因为他是基于物理备份的(mysqldump为逻辑备份)
  • 不是mysql自带的工具,需要额外安装。
  • 备份与恢复的操作相比mysqldump要繁琐些
  • 支持文档没有mysqldump那么全面,网络上的资源文档参差不齐需要自己辨别。

 

B.具体的操作说明(以centos7,mysql5.7为例)

1、xtrabackup安装

依赖安装:

yum install -y perl-DBD-MySQL
yum install -y perl-Digest-MD5
yum install -y perl-DBI
yum install -y perl-DBD-MySQL
yum install -y perl-Time-HiRes
yum install -yperl-IO-Socket-SSL

xtrabackup下载

下载地址: https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/

注意事项:

1、xtrabackup需要和本机的libgcrypt对应。例如通过yum list installed|grep libgcrypt查看本机的libgcrypt。

Xtrabackup安装:

解压下载的文件: tar –zvxf percona-xtrabackup-2.4.18-Linux-x86_64.libgcrypt153.tar.gz
移动文件:mv percona-xtrabackup-2.4.18-Linux-x86_64 /usr/local/xtrabackup
建立命令软连接:ln -sf /usr/local/xtrabackup/bin/* /usr/bin/

 

Xtrabackup数据库备份:

innobackupex --defaults-file=/etc/my.cnf --user=备份用账号 --password=备份用账户密码 --socket=/tmp/mysql.sock /tmp/backup/


注意:提示completed ok!表示备份成功。成功后/tmp/backup会生成一个日志命名格式的文件夹。

传输备份文件到需要迁移的主机
scp –P 2222 /tmp/backup/2019-12-31_09-44-20 root@192.168.8.117/tmp/

在需要恢复的主机上对备份文件进行日志重放

注意:这个是实现不停机迁移恢复备份的关键步骤,另外恢复备份数据的主机也需要安装Xtrabackup才能执行相关命令。

innobackupex --apply-log /tmp/2019-12-31_09-44-20
在待恢复的主机上关闭MySQL服务并让datadir为空。
service mysqld stop
mv /usr/local/mysql/data /usr/local/mysql/data_bak && mkdir /usr/local/mysql/data

 

利用全备数据进行数据恢复:

innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /tmp/2019-12-31_09-44-20

修改恢复后文件的所属信息

chown –R mysql:mysql /usr/local/mysql

启动mysql

service mysqld start

 

至此mysql的全量备份迁移已经完成。但是在热迁移过程中,数据库是时实更新的。我们在拿到备份数据恢复的这段时间中数据库依然有新数据产生。所以还需要继续对binlog进行追赶,直到数据完全一致。

 

查看Xtrabackup备份时记录的binlog文件名和pos日志偏移量

cat /tmp/2019-12-31_09-44-20/xtrabackup_binlog_info
注意:恢复后的/usr/local/mysql/data/路径中也有这个文件。

登入mysql设置主从同步,追binlog

mysql –uroot –p登入密码
注意:数据同步尽量不要使用root账户,应该重新建立一个单独账户。
stop slave;
change master to master_host='192.168.8.86', master_port=3306, master_user='root', master_password='账户密码', master_log_file='mysqlbin.000002', master_log_pos=14970574;
start slave;
show slave status;
注意:这两项为yes表示成功。


待binlog追平后我们可以在应用的负载均衡中,转发业务请求到新迁移的数据库中。并执行stop slave;停止追赶数据库,并停止被迁移的mysql服务。

 

知识拓展:

对于高并发的系统,如果后端的mysql是集群模式,则不建议使用binlog加pos(日志偏移量)的方式来做主从同步,而是使用mysq5.7的新特性gtid来实现集群同步。

拓展知识关键词:mysql,gtid

本文系作者 @ 原创发布在 维简网。未经许可,禁止转载。

喜欢()
评论 (0)

请登录以参与评论。

现在登录…
热门搜索
16 文章
0 评论
20 喜欢
Top