宝塔自助建站源码,网站建设需要哪些岗位,门户网站建站目标,泉州专业建站品牌1. 常用的mysql备份工具
物理备份缺点#xff1a; 跨平台差。备份时间长、冗余备份、浪费存储空间。 解释如下#xff1a;如Linux操作系统和Windows操作系统之间#xff0c;由于文件系统不一样#xff0c;如Linux操作系统的文件系统是ext4、xfs#xff0c;Windows操作系统…1. 常用的mysql备份工具
物理备份缺点 跨平台差。备份时间长、冗余备份、浪费存储空间。 解释如下如Linux操作系统和Windows操作系统之间由于文件系统不一样如Linux操作系统的文件系统是ext4、xfsWindows操作系统的文件系统是FAT16/32、NTFS这样可能会导致数据读写的问题。由于物理备份用的是cp命令所以可能会导致拷贝的时间很长而且可能会存在重复的内容占用空间导致空间变大浪费存储空间。 mysqldump备份缺点 效率较低、备份和还原速度慢、锁表。备份过程中数据插入和更新操作被阻塞。 解释如下正常公司的数据量非常大几十个G一般几十个G备份需要一两个小时在备份期间不能数据插入和更新导致阻塞。 binlog增量备份缺点 在进行范围内备份恢复的时候我们需要在日志文件中寻找起始偏移量和结束偏移量或者起始时间和结束时间当日志文件非常庞大的时候这样的操作就很变得很繁琐。 XtraBackup 工具介绍 一款强大的在线热备份工具备份过程中不锁库表适合生产环境。由专业组织Percona提供改进MySQL分支。主要包含两个组件 xtrabackup:C程序支持InnoDB/XtraDB。Innobackupex:以Perl脚本封装xtrabackup还支持MyISAM。 注Innobackupex这个组件只有数据库使用InnoDB存储引擎时可以实现增量备份。 2. 安装percona软件
2.1. 官网下载软件包
官网地址https://www.percona.com/downloads
##下载软件包[rootlocalhost ~]# wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.8/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm
2.2. 安装软件包
环境需要两台服务器都安装mysql备份在A服务器恢复在B服务器软件两台服务器都需要安装
yum -y install percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm3. innobackupex 命令介绍 3.1. 命令格式
完全备份
innobackupex --user 用户名 --password 密码 备份目录名 --no-timestamp完全恢复
innobackupex --apply-log 目录名 ---准备恢复数据
innobackupex --copy-back 目录名 ---恢复数据 增量备份
innobackupex --user --password 密码 --incremental 增量目录 --incremental-basedir完全备份目录 --no-timestamp增量恢复
innobackupex --apply-log --redo-only 完全备份目录 ---合并日志
innobackupex --apply-log --redo-only 完全备份目录 --incremental-dir 目录名 ---准备恢复数据
innobackupex --copy-back 目录名 --恢复数据4. 完整备份与恢复
##创建数据库
create database db1 default charsetutf8mb4;
##创建表格
use db1;
create table t1(id int primary key auto_increment,name char(20)not null)engineinnodb;
##插入数据
insert into t1(name) values(bob),(tom),(andy),(abel),(adam),(ada),(alice),(afra);
select * from t1;
-----------
| id | name |
-----------
| 1 | bob |
| 2 | tom |
| 3 | andy |
| 4 | abel |
| 5 | adam |
| 6 | ada |
| 7 | alice |
| 8 | afra |
-----------
##备份db1数据库
[rootlocalhost ~]# innobackupex --user root --password 1234 --databases db1 /data/backup --不加--no-timestamp会自动创建一个当前时间子目录。
[rootlocalhost ~]# ls /data/backup/
2023-02-15_16-08-40 ---这个目录就是不加--no-timestamp创建的子目录##备份所有数据库
这里不加--databases 这个选项就代表备份所有库
[rootlocalhost ~]# innobackupex --user root --password 1234 /data/backup --no-timestamp[rootlocalhost ~]# ls /data/backup/ --查看备份的数据
2023-02-15_16-08-40 db1 ibdata1 performance_schema xtrabackup_binlog_info xtrabackup_info
backup-my.cnf ib_buffer_pool mysql sys xtrabackup_checkpoints xtrabackup_logfile
###删除备份db1库
[rootlocalhost backup]# rm -rf /data/backup/2023-02-15_16-08-40/
##把所有库备份数据传给B服务器
[rootlocalhost backup]# scp -r /data/backup/ 192.168.2.20:/root
##在B服务器恢复所有数据
[rootlocalhost ~]# systemctl stop mysqld
[rootlocalhost ~]# rm -rf /var/lib/mysql/* ---必须清空mysql数据目录的内容不然下面恢复失败
[rootlocalhost ~]# innobackupex --apply-log /root/backup/ ---准备恢复数据
[rootlocalhost ~]# innobackupex --copy-back /root/backup/ ---恢复数据
##修改mysql目录下的数据所属主和所属组
[rootlocalhost ~]# chown -R mysql. /var/lib/mysql
##登录mysql查看db1库的t1表
mysql select * from db1.t1;
-----------
| id | name |
-----------
| 1 | bob |
| 2 | tom |
| 3 | andy |
| 4 | abel |
| 5 | adam |
| 6 | ada |
| 7 | alice |
| 8 | afra |
-----------
---数据已经4.1. 使用完全备份数据恢复1张表的所有数据
[rootlocalhost ~]# ls /var/lib/mysql/db1/
db.opt t1.frm t1.ibd
t1.frm ---是t1表结构
t1.ibd ---是t1表空间
表空间存储数据的表文件。
###删除t1的表空间
mysql alter table db1.t1 discard tablespace;
Query OK, 0 rows affected (0.00 sec)
##查看是否删除成功
mysql system ls /var/lib/mysql/db1;
db.opt t1.frm
##导出表信息
[rootlocalhost ~]# ls backup/db1/
db.opt t1.frm t1.ibd
[rootlocalhost ~]# innobackupex --apply-log --export /root/backup/
##验证
[rootlocalhost ~]# ls backup/db1/
db.opt t1.cfg t1.exp t1.frm t1.ibd
t1.cfg t1.exp ---这两个是表信息日志文件
##拷贝表信息文件到数据库目录下
[rootlocalhost ~]# cp -r backup/db1/t1.{ibd,cfg,exp} /var/lib/mysql/db1/
##查看是否拷贝成功
[rootlocalhost ~]# ls /var/lib/mysql/db1/
db.opt t1.cfg t1.exp t1.frm t1.ibd
##修改表信息文件的所属者及组为mysql
[rootlocalhost ~]# chown -R mysql. /var/lib/mysql
##导入表空间
mysql alter table db1.t1 import tablespace;
##删除表信息文件
[rootlocalhost ~]# rm -rf /var/lib/mysql/db1/t1.{cfg,exp}
##查看是否恢复成功
mysql select * from db1.t1;
-----------
| id | name |
-----------
| 1 | bob |
| 2 | tom |
| 3 | andy |
| 4 | abel |
| 5 | adam |
| 6 | ada |
| 7 | alice |
| 8 | afra |
-----------
8 rows in set (0.00 sec)5. 增量备份与恢复
增量备份备份上次备份后所有新产生的数据。增量备份时必须先有一次备份通常是完全备份。一般周一完全备份周二~周日增量备份。增量备份原理 在执行增量备份时会从事务日志文件对比上次备份的last_lsn序列值是否有变化如果有变化说明产生了新数据然则无增量备份是从上次备份的to_lsn序列值作为from_lsn起点序列值开始备份。 增量备份的恢复原理 在执行增量恢复命令时首先把增量备份的数据拷贝到完全备份目录下并修改xtrabackup_checkpoints的结束序列号(把增量备份的结束序列号改为完全备份目录的xtrabackup_checkpoints序列号为结束序列号)然后把完全备份目录的数据拷贝至/var/lib/mysql/目录拷贝之前保证此目录为空 ###继续往db1.t1表插入内容。
insert into t1(name) values(eden),(john),(noah),(amos);
##查看表格
select * from t1;
-----------
| id | name |
-----------
| 1 | bob |
| 2 | tom |
| 3 | andy |
| 4 | abel |
| 5 | adam |
| 6 | ada |
| 7 | alice |
| 8 | afra |
| 9 | eden |
| 10 | john |
| 11 | noah |
| 12 | amos |
-----------
##增量备份
[rootlocalhost ~]# innobackupex --user root --password 1234 --incremental /data/zlbf/ --incremental-basedir/data/backup
##查看备份内容
[rootlocalhost ~]# ls /data/zlbf/2023-02-16_10-32-46/
backup-my.cnf ib_buffer_pool ibdata1.meta performance_schema xtrabackup_binlog_info xtrabackup_info
db1 ibdata1.delta mysql sys xtrabackup_checkpoints xtrabackup_logfile
##查看xtrabackup_checkpoints文件内容
[rootlocalhost ~]# cat /data/backup/xtrabackup_checkpoints
backup_type full-backuped ---备份类型为完全备份
from_lsn 0 ---备份起点为0
to_lsn 3189344 ---备份结束为3189344
last_lsn 3189353 ---事务日志文件目录最后的系列号
compact 0
recover_binlog_info 0
[rootlocalhost ~]# cat /data/zlbf/2023-02-16_10-32-46/xtrabackup_checkpoints
backup_type incremental ---备份类型为增量备份
from_lsn 3189344 ---这个备份起点是前面完全备份的终点
to_lsn 3191428 ----备份终点
last_lsn 3191437
compact 0
recover_binlog_info 0
##lsn:日志序列号记录执行的SQL命令的编号表的存储引擎必须是innodb。
##查看事务日志文件
[rootlocalhost ~]# ls /var/lib/mysql/ib_logfile*
/var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile1
##增量恢复此操作在B服务器上执行
[rootlocalhost ~]# scp -r /data/zlbf/2023-02-16_10-32-46/ 192.168.2.20:/root/ ---把增量备份文件拷贝至B服务器。
[rootlocalhost ~]# innobackupex --apply-log --redo-only /root/backup/
[rootlocalhost ~]# innobackupex --apply-log --redo-only /root/backup/ --incremental-dir /root/2023-02-16_10-32-46/
[rootlocalhost ~]# systemctl stop mysqld.service
[rootlocalhost ~]# rm -rf /var/lib/mysql/*
[rootlocalhost ~]# innobackupex --copy-back /root/backup/
[rootlocalhost ~]# chown -R mysql. /var/lib/mysql
[rootlocalhost ~]# systemctl restart mysqld
###验证
[rootlocalhost ~]# mysql -uroot -p1234 -e select * from db1.t1;
mysql: [Warning] Using a password on the command line interface can be insecure.
-----------
| id | name |
-----------
| 1 | bob |
| 2 | tom |
| 3 | andy |
| 4 | abel |
| 5 | adam |
| 6 | ada |
| 7 | alice |
| 8 | afra |
| 9 | eden |
| 10 | john |
| 11 | noah |
| 12 | amos |
-----------