美食网站建设背景,网络营销课程性质,动力启航做网站,南昌官网seo收费标准主打一个数据备份与恢复 binlog与xtarbackup bin-log日志恢复开启bin-log配置bin-log日志恢复 物理备份-xtrabackup三种备份方式安装xtrabackup备份全量备份增量备份差异备份 bin-log日志恢复 bin-log 日志#xff0c;就记录对数据库进行的操作#xff0c;什么增删改的操作全… 主打一个数据备份与恢复 binlog与xtarbackup bin-log日志恢复开启bin-log配置bin-log日志恢复 物理备份-xtrabackup三种备份方式安装xtrabackup备份全量备份增量备份差异备份 bin-log日志恢复 bin-log 日志就记录对数据库进行的操作什么增删改的操作全都在 bin-log 日志中首先需要开启bin-log日志文件 开启bin-log配置 如图在mysql的配置文件中的 [mysqld] 添加下面的配置
vim /etc/my.cnf # 不同的操作系统的配置文件不一样server_id10 # 不指定可随意写一个数
log-bin/var/lib/mysql/mysql-bin.log添加上面的配置之后需要重启一下
systemctl restart mysqld重启之后在/var/lib/mysql 目录下面有一个 mysql_bin.00001 文件 在mysql中可以刷新bin-log日志
mysql flush logs;可以使用下面的查看当前使用的是哪一个 bin-log 日志文件
mysql show master status-------------------------------------------------------------------------------
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
-------------------------------------------------------------------------------
| mysql-bin.000003 | 777 | | | |
-------------------------------------------------------------------------------
1 row in set (0.00 sec)bin-log日志恢复
查看bin-log日志
mysql select * from school.student;
------------------
| id | name | sex |
------------------
| 1 | 小温 | 男 |
| 2 | 小成 | 女 |
------------------
2 rows in set (0.00 sec)mysql delete from school.student;
Query OK, 2 rows affected (0.00 sec)
# 上面是删除表中的两条记录
# 查看 bin-log 日志文件中对应的操作
mysqlbinlog --base64-outputdecode-rows /var/lib/mysql/mysql-bin.000003 -vv
BEGIN这个图片是课件里面的只供展示 里面有好多我只截取上面对应的一部分的日志
/*!*/;
# at 927
#230926 0:48:58 server id 10 end_log_pos 991 CRC32 0x55632c6b Table_map: school.student mapped to number 83
# has_generated_invisible_primary_key0
# at 991
#230926 0:48:58 server id 10 end_log_pos 1052 CRC32 0x67d51427 Delete_rows: table id 83 flags: STMT_END_F
### DELETE FROM school.student
### WHERE
### 11 /* INT meta0 nullable0 is_null0 */
### 2小温 /* VARSTRING(90) meta90 nullable1 is_null0 */
### 31 /* ENUM(1 byte) meta63233 nullable1 is_null0 */
### DELETE FROM school.student
### WHERE
### 12 /* INT meta0 nullable0 is_null0 */
### 2小成 /* VARSTRING(90) meta90 nullable1 is_null0 */
### 32 /* ENUM(1 byte) meta63233 nullable1 is_null0 */
# at 1052
#230926 0:48:58 server id 10 end_log_pos 1083 CRC32 0x6eb05b5b Xid 132
COMMIT/*!*/;
SET SESSION.GTID_NEXT AUTOMATIC /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file如果要恢复对应的数据必须找到对应的添加语句
BEGIN
/*!*/;
# at 634
#230925 19:52:16 server id 10 end_log_pos 698 CRC32 0x26fba24f Table_map: school.student mapped to number 83
# has_generated_invisible_primary_key0
# at 698
#230925 19:52:16 server id 10 end_log_pos 746 CRC32 0x88535582 Write_rows: table id 83 flags: STMT_END_F
### INSERT INTO school.student
### SET
### 11 /* INT meta0 nullable0 is_null0 */
### 2小温 /* VARSTRING(90) meta90 nullable1 is_null0 */
### 31 /* ENUM(1 byte) meta63233 nullable1 is_null0 */
# at 746
#230925 19:52:16 server id 10 end_log_pos 777 CRC32 0xd1f2f433 Xid 96
COMMIT/*!*/;
# at 777
#230926 0:48:58 server id 10 end_log_pos 856 CRC32 0x842fc928 Anonymous_GTID last_committed2 sequence_number3 rbr_onlyyes original_committed_timestamp1695660538233698 immediate_commit_timestamp1695660538233698 transaction_length306
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
# original_commit_timestamp1695660538233698 (2023-09-26 00:48:58.233698 CST)
# immediate_commit_timestamp1695660538233698 (2023-09-26 00:48:58.233698 CST)
/*!80001 SET session.original_commit_timestamp1695660538233698*//*!*/;
/*!80014 SET session.original_server_version80034*//*!*/;
/*!80014 SET session.immediate_server_version80034*//*!*/;
SET SESSION.GTID_NEXT ANONYMOUS/*!*/;
# at 856
#230926 0:48:58 server id 10 end_log_pos 927 CRC32 0xf9ee8b28 Query thread_id18 exec_time0 error_code0
SET TIMESTAMP1695660538/*!*/;
SET session.sql_mode1168113696/*!*/;
BEGIN上面是添加数据对应的日志要恢复的话需要使用下面的这条语句
mysqlbinlog --start-position 634 --stop-position 927 /var/lib/mysql/mysql-bin.000003 | mysql -uroot -p1# 其中 634 是上面日志文件有个 at 634 相当于从这个时刻开始到 927 这个时刻
# 需要注意的是在这个里面必须将 COMMITTED 事务提交语句也得包含起来当然还可以使用时间来恢复数据
mysqlbinlog --start-datetime2019-8-21 23:55:54 --stop-datetime2019-8-21 23:56:541 mylog.000001 | mysql -u root -p1物理备份-xtrabackup 物理备份 直接复制数据库文件适用于大型数据库环境不受存储引擎的限制但不能恢复到不同的MySQL版本。 三种备份方式
全量备份-----完整备份
每次都将所有数据不管自第一次备份以来有没有修改过进行一次完整的复制备份后会清除文件的存档属性方便日后增量备份或者差异备份进行版本比较。 特点占用空间大备份速度慢但恢复时一次恢复到位恢复速度快。
增量备份: 每次备份上一次备份到现在产生的新数据
在第一次完整备份之后第二次开始每次都将添加了存档属性的文件进行备份并且在备份之后再把这些存档属性清除。为什么要清除存档属性呢这就是为了下一次备份的时候判断是否有文件变化因为用户在每次备份以后修改这些被清除存档属性的文件存档属性就会自动加上相当于用户告诉系统这些文件有变化你下一次就备份这些文件其他没有存档属性的就不需要备份这就是增量备份的工作机制。
特点因每次仅备份自上一次备份注意是上一次不是第一次以来有变化的文件所 以备份体积小备份速度快但是恢复的时候需要按备份时间顺序逐个备份版本进行恢 复恢复时间长。
差异备份:只备份跟完整备份不一样的
在第一次完整备份之后第二次开始每次都将所有文件与第一次完整备份的文件做比较把自第一次完整备份以来所有修改过的文件进行备份且以后每次备份都是和第一次完整备份进行比较注意是第一次不是上一次备份自第一次完整备份以来所有的修改过的文件。 特点占用空间比增量备份大比完整备份小恢复时仅需要恢复第一个完整版本和最后一次的差异版本恢复速度介于完整备份和增量备份之间。 简单的讲完整备份就是不管三七二十一每次都把指定的备份目录完整的复制一遍不管目录下的文件有没有变化增量备份就是每次将之前第一次、第二次、直到前一次做过备份之后有变化的文件进行备份差异备份就是每次都将第一次完整备份以来有变化的文件进行备份。
安装xtrabackup
官网www.percona.com
下载 点击这个下载然后复制到linux系统中解压安装
# 解压后进入对应文件夹里面
yum install -y *.npm # 安装备份
全量备份
备份
# 创建备份目录
mkdir /xtrabackup/full -p
# 全量备份
innobakeupex --userroot --password1 /xtrabackup/full恢复
# 1.关闭数据库
systemctl stop mysqld
# 2.清理数据
rm -rf /var/lib/mysql/*
# 3.恢复之前验证数据
innobackupex -apply-log /xtrabackup/full/对应的文件
# 4.恢复数据 恢复数据前需要将 bin-log 配置修改 将bin-log的文件目录修改为其他地方
# 也可以将 bin-log 配置项注释掉
innobackupex --copy-back /xtrabackup/full/文件
# 5.修改权限
chown mysql.mysql /var/lib/mysql -R增量备份 原理每次备份上一次备份到现在产生的新数据 全量备份第一天的
innobackupex --userroot --password1 /xtrabackup/full增量备份第二天的
innobackupex --userroot --password1 --incremental /xtrabackup/ --incremental-basedir/xtrabackup/第一天备份的文件夹增量备份第三天的
innobackupex --userroot --password1 --incremental /xtarbackup/ --incremental-basedir/xtrabackup/第二天备份的文件恢复文件
# 1.关闭mysql
systemctl stop mysqld
# 2.清除数据
rm -rf /var/lib/mysql/*
# 3.依次重演备份文件
innobackupex --apply-log --redo-only /xtarbackup/第一天备份文件
# 之后的重演相当于将数据放到了第一天备份文件上
innobackupex --apply-log --redo-only /xtrabackup/第一天备份文件 --incremental-dir/xtrabackup/第二天备份文件
innobackupex --apply-log --redo-only /xtrabackup/第一天备份文件 --incremental-dir/xtrabackup/第三天备份文件
# 4.恢复数据
innobackupex --copy-back /xtarbackup/第一天备份文件
# 5.修改权限
chown mysql.mysql -R /var/lib/mysql/*
# 6.启动数据库
systemctl start mysqld差异备份
全量备份第一天的
innobackupex --userroot --password1 /xtarbackup/第二到四天全不备份 第五天备份前面全部的数据除外第一天
innobackupex --userroot --password1 --incremental /xtarbackup/ --incremental-basedir/xtarbackup/第一天备份的文件夹恢复数据
# 1.关闭mysql
systemctl stop mysqld
# 2.清除数据
rm -rf /var/lib/mysql/*
# 3.依次重演备份文件
innobackupex --apply-log --redo-only /xtarbackup/第一天备份文件
innobackupex --apply-log --redo-only /xtarbackup/第一天备份文件 --incremental-dir/xtarbackup/第五天备份文件
# 4.恢复数据
innobackupex --copy-back /xtarbackup/第一天备份文件
# 5.修改权限
chown mysql.mysql -R /var/lib/mysql/*
# 6.启动数据库
systemctl start mysqld