數據庫
備份
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 ```
#一句話總結:首先先備份。如果想恢復數據,首先先准備數據,再進行備份。