MySQL備份
在生産環境中資料庫可能會遭遇意外情況進而導緻資料丢失, 如硬體故障、軟體故障、自然災害、黑客攻擊、誤操作,當機是以,為了應對意外突發情況是以我們要提前做好資料備份
實體備份/冷備份:直接複制資料庫檔案,适用于大型資料庫環境,不受存儲引擎的限制,但不能恢複到不同的MySQL版本(tar,cp,scp)。拷貝資料, 優點快,缺點服務停止。
邏輯備份/熱備份:備份的是建表、建庫、插入等操作所執行SQL語句(DDL DML DCL),适用于中小型資料庫(mysqldump,mydumper)。效率相對較低
完全備份
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CMiBjYlRWY2UGMjZGNwQzMkRjN3QGM0kTZwMDOjdjYz8CX2EzLcRDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.png)
差異備份:占用空間比增量備份大,比完整備份小,恢複時僅需要恢複第一個完整版本和最後 一次的差異版本(包含所有的差異),恢複速度介于完整備份和增量備份之間。
percona-xtrabackup:它是開源免費的支援MySQL 資料庫熱備份的軟體,它能對InnoDB和XtraDB存儲引擎的資料庫非阻塞地備份。它不暫停服務建立Innodb熱備份;
為mysql做增量備份;在mysql伺服器之間做線上表遷移;使建立replication更加容易;備份mysql而不增加伺服器的負載。
percona是一家老牌的mysql技術咨詢公司。它不僅提供mysql的技術支援、教育訓練、咨詢,還釋出了mysql的分支版本–percona Server。并圍繞
percona Server還釋出了一系列的mysql工具。
- 安裝percona-xtrabackup:
yum install -y https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm mysql官方源
yum install -y yum-utils 安裝yum工具
yum repolist all | grep mysql 檢視mysql可用版本
yum-config-manager --disable mysql80-community 禁用80
yum-config-manager --enable mysql57-community 啟用57
yum install mysql-community-libs-compat -y
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
yum -y install percona-xtrabackup-24.x86_64 安裝percona
rpm -ql percona-xtrabackup-24 查詢安裝結果
完全備份流程
innobackupex --user=root --password='XieDongwy@163' /xtrabackup/full 備份ls /xtrabackup/full/ 檢視備份目錄 ls /xtrabackup/full/2021-04-16_18-55-07/cat /xtrabackup/full/2021-04-16_18-55-07/xtrabackup_binlog_info 觀看二進制日志位置
systemctl stop mysqld 停止資料庫
以下兩行代碼測試環境使用rm -rf /var/lib/mysql/* 删除mysql資料庫檔案rm -rf /var/log/mysqld.log 删除mysql日志檔案
innobackupex --apply-log /xtrabackup/full/2017-08-01_00-00-18/ 指定備份點
innobackupex --copy-back /xtrabackup/full/2017-08-01_00-00-18/ 恢複檔案
ls /var/lib/mysqlchown -R mysql.mysql /var/lib/mysql
systemctl start mysqld
mysql -uroot -p'XieDongwy@163' 登陸驗證
增量備份流程
create database testdb;use testdb;create table test(id int);insert into test values (1);select * from test;
完整備份:1
rm -rf /xtrabackup/*date 04010000 (如果調的話時間建議靠後設定。)
innobackupex --user=root --password='XieDongwy@163' /xtrabackup
ll /xtrabackup/
增量備份:2
date 04020000 (更新時間)
mysql -uroot -p'XieDongwy@163' -e 'insert into testdb.test values (2)'innobackupex --user=root --password='XieDongwy@163' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2021-04-16_19-14-11ls /xtrabackup/
增量備份:3
date 04030000 (更新時間)
mysql -uroot -p'XieDongwy@163' -e 'insert into testdb.test values (3)'innobackupex --user=root --password='XieDongwy@163' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2021-04-16_19-17-01 ls /xtrabackup/
增量備份依次類推。
- 增量備份恢複
systemctl stop mysqld 停止mysqlrm -rf /var/lib/mysql/* 清理庫
innobackupex --apply-log --redo-only /xtrabackup/2021-04-16_19-14-11 恢複1
innobackupex --copy-back /xtrabackup/2021-04-16_19-14-11
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld
innobackupex --apply-log --redo-only /xtrabackup/2021-04-16_19-14-11 --incremental-dir=/xtrabackup/2021-04-16_19-17-01 恢複2
innobackupex --apply-log --redo-only /xtrabackup/2021-04-16_19-17-01 --incremental-dir=/xtrabackup/ 2021-04-16_19-18-23 恢複3
rm -rf /var/lib/mysql/*
innobackupex --copy-back /xtrabackup/2021-04-16_19-17-01 恢複累加的123chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld
mysql -uroot -p'XieDongwy@163' -e 'select * from testdb.test'
- 差異備份
rm -rf /xtrabackup/*
完整備份
1
date 05010000 (修改時間,這裡我不做修改)
create database testdb;use testdb;create table test2(id int);insert into test2 values(1);select * from test2;innobackupex --user=root --password='XieDongwy@163' /xtrabackup
ll /xtrabackup/
2
date 05020000
mysql -uroot -p'XieDongwy@163' -e 'insert into testdb.test2 values(2)'
innobackupex --user=root --password='XieDongwy@163' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2021-04-16_20-38-09
ll /xtrabackup/du -sh /xtrabackup/
3
date 05030000
mysql -uroot -p'XieDongwy@163' -e 'insert into testdb.test2 values(3)'
innobackupex --user=root --password='XieDongwy@163' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2021-04-16_20-40-42
ll /xtrabackup/du -sh /xtrabackup/
systemctl stop mysqldrm -rf /var/lib/mysql/*
innobackupex --apply-log --redo-only /xtrabackup/2021-04-16_20-38-09
innobackupex --apply-log --redo-only /xtrabackup/2021-04-16_20-38-09 --incremental-dir=/xtrabackup/2021-04-16_20-39-18
innobackupex --copy-back /xtrabackup/2021-04-16_20-38-09
chown -R mysql.mysql /var/lib/mysql/
ystemctl start mysqld