大家好,我是anyux。本文介绍MySQL批量操作及XBK安装简介。
批量操作
以下语句只能在屏幕显示出拼接后的语句,但是无法导入到文件中
select concat("alter table ",table_schema," ",table_name," discard tablespace;") from information_schema.tables where table_schema='world';复制
写入拼接语句到文件
需要设置导出数据限制,重启数据库
vim /etc/my.cnf
[mysqld]
secure-file-priv=复制
select concat("alter table ",table_schema," ",table_name," discard tablespace;") from information_schema.tables where table_schema='world' into outfile '/tmp/discard.sql';复制
此时/tmp/discard.sql就是一个sql文件,配置mysql -e命令,与定时任务配置,可以完成自动化操作,节省人力成本
导出数据行到文件
select * from city into outfile '/tmp/city.csv';
cat /tmp/city.csv复制
导出结果,如下图所示,可以使用Excel打开,使用此种方式,可以用作异构平台数据迁移
Xtrabackup
安装XBK
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL libdev
wget https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.18/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.18-1.el7.x86_64.rpm
rpm -ivh percona-xtrabackup-24-2.4.18-1.el7.x86_64.rpm
查看版本
innobackupex --version复制
备份的过程
1.针对非InnoDB进行锁表备份,copy所有的非innoDB表文件
2.针对InnoDB表,立即触发checkpoint,立即记录一个LSN号,copy所有InnoDB表相关的文件(iddata2,ibd,frm),并将备份过程中产生新的数据变化的部分的redo一并备走
在恢复时,xbk会调用InnoDB引擎的CSR过程,将数据和redo的LSN号追平,然后进行一致性恢复
恢复过程
模拟了CSR的全过程,在恢复之前,将数据的LSN号和redo LSN号追平,恢复方法是直接复制
XBK的全备和恢复
mkdir -p /tmp/db
备份
innobackupex --defaults-file=/etc/my.cnf --user=root --password='root' -S /data/mysql/mysql.sock --no-timestamp /tmp/db
复制
恢复
innobackupex --apply-log /tmp/db
再复制文件即可复制
看到下图中completed表示安装成功
备份文件介绍
除正常的数据库文件外,还包含其他文件,如下
xtrabackup_binlog_info 备份过程中二进制信息
记录二进制文件名称,及pos号,gtid号,可以作为二进制日志截取日志的起点
cd /tmp/db
cat xtrabackup_binlog_info复制
xtrabackup_checkpoints 记录当前备份类型,全备是0,增量是上次备份的结束位置。备份前的to_lsn号,备份后的last_lsn号,下次增量备份的起始位置,默认差9个数值,用来做redo维护
cat xtrabackup_checkpoints复制
xtrabackup_info 所有备份信息
cat xtrabackup_info复制
xtrabackup_logfile redo二进制文件 备份过程中的日志文件
strings xtrabackup_logfile复制
欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍运维、数据库相关的技术,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章。