关于MySQL数据库的备份方案(2)

#!/bin/bash
#mysql全量备份脚本建议在slave从库上运行,从库slave上建议开启参数log_slave_updates=1
mkdir /backup
cd /backup
dateDIR=$(date +"%Y-%m-%d")
mkdir -p $dateDIR/data
path=/data/mysql/data
for n in `mysql -uroot -p123456 -e "show databases"|grep -v "Database"`
do
mysqldump -uroot -p123456 --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B $n|gzip >/backup/$dateDIR/data/${n}_$dateDIR.sql.gz
done
binlog_rm=$(tail -n 1 $path/mysql-bin.index|sed 's/.\///')
mysql -uroot -p123456 -e "purge binary logs to '$binlog_rm'"
说明:这个全量备份脚本,会在导出的时候锁住全局表,并且此时刷新产生一个新的bin-log,期间会产生写操作的等待,直到导出结束后才会写入新产生的bin-log文件,然后旧的bin-log 文件会被删除删除掉,一般在晚上2:00业务低峰期执行操作

进行本地bin-log增量备份

在执行完全量备份脚本后,就可以执行增量备份脚本了.
增量备份脚本思路很简单:

先mysqladmin -uroot -p123456 flush-logs 刷新新的binlog文件,此时mysql写入到新的binlog文件中。
然后把当前mysql数据库存放binlog的目录中抛去刚才最新生成的binlog文件,其余旧的binlog文件全部cp到本地服务器/backup/binlog  binlog的备份目录下。
最后在登录MySQL清除当前的binlog文件数减一
mysql -uroot -p123456 -e "purge binary logs to 'mysql-bin.(n-1)'"

3.热备份与恢复

热备份的方式也是直接复制数据物理文件,和冷备份一样,但是热备份可以不停机直接复制,一般用于7*24小时不间断的重要核心业务。Mysql的社区版本热备份工具InnoDB Hot Backup是付费的,只能试用30天,商业版才可以永久的使用,
Percona公司发布一个xtrabackup热备工具,和付费的工具一样,支持在线热备(备份时不影响数据的读写)是商业工具InnoDB Hot Backup的一个很好的替代。
xtrabackup热备工具是一个开源的工具,他可以非常快速的备份和恢复mysql数据库。由于Xtrabackup支持备份innodb表,实际生产环境中我们使用的工具是innobackupex,它是对xtrabackup的一层封装。innobackupex脚本用来备份非 InnoDB 表,同时会调用 xtrabackup命令来备份 InnoDB 表,innobackupex的基本流程如下:

1.开启redo日志拷贝线程,从最新的检查点开始顺序拷贝redo日志;
2.开启idb文件拷贝线程,拷贝innodb表的数据
3.idb文件拷贝结束,通知调用FTWRL,获取一致性位点
4.备份非innodb表(系统表)和frm文件
5.由于此时没有新事务提交,等待redo日志拷贝完成
6.最新的redo日志拷贝完成后,相当于此时的innodb表和非innodb表数据都是最新的
7.获取binlog位点,此时数据库的状态是一致的。
8.释放锁,备份结束。

具体使用请参考:https://www.linuxidc.com/Linux/2018-08/153635.htm

关于MySQL数据库的备份方案到此处就介绍完了,如有不对,请及时指出。欢迎一起交流学习。

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5236b2594d5da9d7aaf1f9e4d7b60151.html