发布于2021-06-07 19:58 阅读(785) 评论(0) 点赞(2) 收藏(1)
relay log
中。1)默认在 /usr/local/mysql/data/
目录下,存在 mysql-bin.000001
mysql-bin.000002
的二进制文件
[root@MySQL ~]# sed -i '/\[mysqld]/a log-bin=mysql-bin' /etc/my.cnf
[root@MySQL ~]# sed -i '/\[mysqld]/a server-id=1' /etc/my.cnf
[root@MySQL ~]# head -3 /etc/my.cnf
什么时候二进制日志会重新生成:
systemctl restart mysqld
flush logs;
max_binlog_size
设置 MySQL 二进制文件最大值,达到最高值会自动创建。[root@MySQL ~]# systemctl restart mysqld
[root@MySQL ~]# ls -l /usr/local/mysql/data/ | grep 'mysql-bin'
1)查看正在使用的二进制日志文件
mysql> show master status;
2)手动滚动二进制日志文件
mysql> flush logs;
3)显示所有的二进制日志文件
mysql> show binary logs;
格式:mysqlbinlog [参数] log-files
有以下四种参数选择:
--start-position
:用来指定二进制日志文件的起始位置;--stop-position
:用来指定二进制日志文件的结束位置。--start-datetime
:用来指定二进制日志文件的起始日期;--stop-datetime
:用来指定二进制日志文件的结束日期。使用 mysqlbinlog
工具来对 MySQL 进行增量备份:MySQL 增量备份与恢复
bin_log_format={ statement | row | mixed }
定义(5.7
版本之前是 statement
,5.7
版本之后是 row
)1)statement
:
insert into test values(CURRENT_DATE())
2)row
:
3)mixed
:
statement
和 row
模式。查看当前二进制日志记录格式
mysql> show variables like 'binlog_format';
sed -i '/\[mysqld]/a binlog_format=模式' /etc/my.cnf
来进行修改。1)根据备份时,MySQL 服务是否在线
2)根据备份时的接口
mysqldump
就属于逻辑备份。各自特点:
1)完全备份:每次对数据进行完整的备份,即对整个数据库的备份(是差异备份与增量备份的基础)
2)差异备份:
3)增量备份:只有那些在上次完全备份或增量备份后被修改的文件才会被备份。
1)mysqldump
:通常为数据小的情况下备份;单线程恢复比较慢。
2)xtrabackup
(通常用 innobackupex
工具):备份 MySQL 大数据;属于物理备份,速度快。
3)lvm-snapshot
:接近于热备的工具,因为要先请求全局锁,而后创建快照,并在创建快照完成后释放全局锁;
cp
tar
等工具进行物理备份;两者对比如下:
工具名称 | mysqldump | xtrabackup |
---|---|---|
备份方式 | 逻辑备份 | 物理备份 |
数据保存方式 | SQL 脚本 | 二进制文件 |
是否支持热备份 | 是 | 是 |
是否支持增量备份 | 是 | 是 |
备份过程 | 会锁表 | 不锁表 |
是否影响正常业务 | 影响较大 | 影响较小 |
备份和恢复性能 | 耗时较长 | 耗时较短 |
占用空间 | 占用空间小 | 占用空间大 |
基于快照备份注意事项:
1)创建分区
[root@localhost ~]# fdisk -l /dev/sdb
2)创建 PV、VG、LVM,并格式化
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3
[root@localhost ~]# vgcreate test /dev/sdb1 /dev/sdb2 /dev/sdb3
[root@localhost ~]# lvcreate -L +10G -n zhangsan test
[root@localhost ~]# mkfs.xfs /dev/test/zhangsan
3)创建目录,并挂载逻辑磁盘
[root@localhost ~]# mkdir /var/zhangsan
[root@localhost ~]# mount /dev/test/zhangsan /var/zhangsan/
[root@localhost ~]# df -hT
4)确认服务处于关闭状态,然后将数据迁移到 /var/zhangsan
[root@localhost ~]# systemctl stop mysqld
[root@localhost ~]# cd /usr/local/mysql/data/
[root@localhost data]# tar -cf - . | tar xf - -C /var/zhangsan/
5)重新挂载 zhangsan
到 MySQL 数据库的主目录 /usr/local/mysql/data
[root@localhost ~]# umount /var/zhangsan/
[root@localhost ~]# mount /dev/test/zhangsan /usr/local/mysql/data/
6)审核权限并启动服务
[root@localhost ~]# systemctl start mysqld
[root@localhost ~]# mysql -uroot -p123123
mysql> show master status\G
mysql> flush logs;
mysql> flush tables with read lock;
[root@localhost ~]# lvcreate -L +4G -s -n mysql /dev/test/zhangsan
[root@localhost ~]# mysql -uroot -p123123 -e "unlock tables;"
7)开启 MySQL 的二进制日志,并重启 MySQL 服务
[root@localhost ~]# sed -i '/\[mysqld]/a log-bin=mysql-bin' /etc/my.cnf
[root@localhost ~]# sed -i '/\[mysqld]/a server-id=1' /etc/my.cnf
[root@localhost ~]# systemctl restart mysqld
mysql> create database Coco;
mysql> use Coco;
mysql> create table test(ID int);
mysql> insert into test values(1),(2),(3);
[root@localhost ~]# cp /usr/local/mysql/data/mysql-bin.000001 /opt/
模拟数据库故障
[root@localhost ~]# systemctl stop mysqld
[root@localhost ~]# umount /dev/test/zhangsan
恢复
[root@localhost ~]# mount /dev/test/zhangsan /usr/local/mysql/data/
[root@localhost ~]# systemctl start mysqld
[root@localhost ~]# mysql -uroot -p123123 -e "select * from Coco.test;"
Percona XtraBackup(简称 PXB)是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQL、Percona Server 和 MariaDB,并且全部开源。
xtrabackup_suspended_1
xtrabackup_suspended_2
xtrabackup_log_copied
备份时 xtrabackup_suspended_2
协调这两个工具进程过程如下:
ib
在启动 xb
进程后,会一直等 xb
备份完 InnoDB
文件,方式就是等待 xb_suspended_2
这个文件被创建出来。xb
在备完 InnoDB
数据后,就在指定目录下创建出这个文件,然后等这个文件被 ib
删除。ib
检测到文件 xb_suspended_2
被创建出来后,就继续往下走。ib
在备份完非 InnoDB
表后,删除 xb_suspended_2
这个文件,这样就通知 xb
可以继续了,然后等待 xb_log_copied
被创建。xb
检测到 xb_suspended_2
文件删除后,就可以继续往下了。备份过程:
innobackupex
在启动后,会先 fork
一个进程,来启动 xtrabackup
进程,然后等待 xtrabackup
备份完 InnoDB
数据文件;xtrabackup
备份完时,会通过创建文件来通知 innobackupex
进程,接着 innobackupex
进程会去备份非 InnoDB
数据文件。Redo
文件:是存储引擎层(InnoDB)生成的日志,主要为了保证数据的可靠性。Ibd
文件:InnoDB 引擎开启的表空间,用来存储表的数据和索引。[root@MySQL ~]# yum -y install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-TermReadKey.x86_64 perl-Digest-MD5
[root@MySQL ~]# rpm -ivh percona-toolkit-2.2.19-1.noarch.rpm
[root@MySQL ~]# tar xf percona-xtrabackup2.4.5-Linux-x86_64.tar.gz -C /usr/src/
[root@MySQL ~]# cd /usr/src/percona-xtrabackup-2.4.5-Linux-x86_64/
[root@MySQL percona-xtrabackup-2.4.5-Linux-x86_64]# cp bin/* /usr/bin/
XtraBackup 中主要包含两个工具:
xtrabackup
(Perl
脚本):
innobackupex
(C/C++
编译的二进制):
xtrabackup
命令来备份 InnoDB 表;ftwrl
、获取位点 show slave status
等。简单来说就是 innobackupex
在 xtrabackup
之上做了一层封装。
常用选项 | 作用 |
---|---|
--host | 指定主机 |
--user | 指定用户名 |
--password | 指定密码 |
--port | 指定端口 |
--databases | 指定数据库 |
--incremental | 创建增量备份 |
--incremental-basedir | 指定包含完全备份的目录 |
--incremental-dir | 指定包含增量备份的目录 |
--apply-log | 对备份进行预处理操作 |
--redo-only | 不回滚未提交事务 |
--copy-back | 恢复备份目录 |
[root@MySQL ~]# innobackupex --user=root --password=123123 /backups
查看备份数据
[root@MySQL ~]# ls /backups/
[root@MySQL ~]# ls -l /backups/2021-05-19_22-31-36/
注解:
backup-my.cnf
:备份用到的配置选项信息文件。xtrabackup_binlog_info
:MySQL 当前正在使用的二进制日志文件和此时二进制日志文件时间的位置信息文件。xtrabackup_checkpoints
:备份的类型、状态和 LSN 状态信息文件。xtrabackup_logfile
:备份的日志文件。删除原有的数据
[root@MySQL ~]# rm -rf /usr/local/mysql/data/*
合并数据,使数据文件处于一致性的状态
[root@MySQL ~]# innobackupex --apply-log /backups/2021-05-19_22-31-36/
恢复数据
[root@MySQL ~]# innobackupex --copy-back /backups/2021-05-19_22-31-36/
[root@MySQL ~]# ls -l /usr/local/mysql/data/
[root@MySQL ~]# chown -R mysql:mysql /usr/local/mysql/data/
总结:
innobackupex
完全备份,并指定备份目录路径。--apply-log
参数先进行合并数据文件,确保数据的一致性要求。--copy-back
参数进行恢复,需要注意的是,在 my.cnf
中要指定数据文件目录的路径。[root@MySQL ~]# innobackupex --user=root --password=123123 /backups
[root@MySQL ~]# mysql -uroot -p123123
mysql> create database Coco;
mysql> use Coco;
mysql> create table test(ID int);
mysql> insert into test values(1),(2),(3);
使用 innobackupex
进行增量备份
[root@MySQL ~]# innobackupex --user=root --password=123123 \
--incremental /backups/ \
--incremental-basedir=/backups/2021-05-19_23-00-37/
查看备份数据
[root@MySQL ~]# ll /backups/
[root@MySQL ~]# cat /backups/2021-05-19_23-00-37/xtrabackup_checkpoints
[root@MySQL ~]# cat /backups/2021-05-19_23-23-45/xtrabackup_checkpoints
删除数据库中所有数据
[root@MySQL ~]# rm -rf /usr/local/mysql/data/*
合并全备数据目录,确保数据的一致性
[root@MySQL ~]# innobackupex --apply-log --redo-only /backups/2021-05-19_23-00-37/
将增量备份数据合并到全备数据目录当中
[root@MySQL ~]# innobackupex --apply-log --redo-only /backups/2021-05-19_23-00-37/ \
--incremental-dir=/backups/2021-05-19_23-23-45/
恢复数据
[root@MySQL ~]# innobackupex --copy-back /backups/2021-05-19_23-00-37/
[root@MySQL ~]# chown -R mysql:mysql /usr/local/mysql/data/
[root@MySQL ~]# mysql -uroot -p123123 -e "select * from Coco.test;"
总结:
--incremental
参数来指定需要备份到哪个目录,使用 incremental-dir
参数来指定全备目录。--apply-log redo-only
参数来先合并全备数据目录数据,确保全备数据目录的一致性。--incremental-dir
参数来合并到全备数据当中。作者:天神下凡
链接:http://www.phpheidong.com/blog/article/89439/3b6722920976b3b6ae8c/
来源:php黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 php黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-4
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!