Linux-mysql的備份與恢復


數據庫

備份

mysqldump(mysql自帶備份功能)

- 鎖表
- 備份特別慢,適用於數據量較小
- 不可以做增量備份
- 單線程
```
-A, --all-databases 所有的庫
-B 指定備份的庫
—F 備份前刷新日志
--flush-privileges 刷新授權表
-p 密碼
-u 用戶
-P 端口
觸發器
存儲過程和存儲函數

備份

mysqldump -uroot -S /mydata/mysql/mysql.sock -A -p > mysql.sql
## 恢復一
直接在數據庫里面source mysql.sql文件
## 恢復二
mysql -uroot -p < mysql.sql
```

xtrabackup(第三方備份工具)

- 多進程
- 支持增量備份
- 鎖行

安裝

```
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm # 安裝yum倉庫
yum install -y percona-xtrabackup-24
--target-dir=name # 指定備份生成的目錄
--backup 備份
--prepare 准備
--databases=name filtering by list of databases.
--databases-file=name 配置文件
```

創建一個用戶

```
mysql> create user 'backup'@'localhost' identified by 'backup';
Query OK, 0 rows affected (0.00 sec)

mysql> grant reload,lock tables,process,replication client on *.* to 'backup'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

```

備份

```
xtrabackup --backup --target-dir=/mydata/backup/base -ubackup -pbackup --socket=/mydata/mysql/mysql.sock
### 看得如下信息,代表成功
xtrabackup: Transaction log of lsn (5480853) to (5480862) was copied.
190902 09:25:09 completed OK!
```

恢復

#### 准備文件

```
xtrabackup --prepare --target-dir=/mydata/backup/base
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 5482536
190902 09:28:12 completed OK!
```

#### 恢復文件

```
cd /mydata/backup/base
cp -rf hello /mydata/mysql/
chown mysql.mysql /mydata/mysql/hello/ -R
```

#### 恢復全部文件

```
xtrabackup --copy-back --target-dir=/mydata/backup/base
chown mysql.mysql * -R
```

### 增量備份

```
xtrabackup --backup --target-dir=/mydata/backup/t1 --incremental-basedir=/mydata/backup/base -uroot -p --socket=/mydata/mysql/mysql.sock
--incremental-dir 全備的路徑
xtrabackup --backup --target-dir=/mydata/backup/t2 --incremental-basedir=/mydata/backup/t1 -uroot -p --socket=/mydata/mysql/mysql.sock
--incremental-basedir應該是上一次的增量備份目錄
xtrabackup --prepare --apply-log-only --target-dir=/mydata/backup/base
```

### 恢復(只能全部刪除以后再恢復)

```
xtrabackup --prepare --apply-log-only --target-dir=/mydata/backup/base
xtrabackup --prepare --apply-log-only --target-dir=/mydata/backup/base --incremental-dir=/mydata/backup/t1
xtrabackup --prepare --apply-log-only --target-dir=/mydata/backup/base --incremental-dir=/mydata/backup/t2
xtrabackup --copy-back --target-dir=/mydata/backup/base
chown mysql.mysql * -R
systemctl restart mysqld
```
#一句話總結:首先先備份。如果想恢復數據,首先先准備數據,再進行備份。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM