數據庫恢復數據

上一篇爲大家整理了數據庫中的備份,那麼這一篇文章將學習各種備份恢復方法。這裏假定備份和二進制日誌(binary log)在服務器上是可用的。

從mysqldump和mysqlpump中恢復
邏輯備份工具mysqldump和mysqlpump將數據寫入單個文件。
如何操作
登錄備份所在的服務器:
shell> cat /backups/full_backup.sql | mysql -u <user> -p
或者
shell> mysql -u <user> -p < /backups/full_backup.sql
要在遠程服務器上恢復,可以使用-h <主機名> 選項:
shell> cat /backups/full_backup.sql | mysql -u <user> -p -h <remote_hostname>
當恢復一個備份時,該備份的語句將被記錄到二進制日誌中,這可能會拖慢恢復過程。如果不希望恢復過程被寫入二進制日誌,則可以使用 SET SQL_LOG_BIN = 0;選項在session(會話)級別關閉這個功能:
shell> (echo “SET SQL_LOG_BIN = 0;”; cat /backups/full_backup.sql) | mysql \ > -u <user> -p -h <remote_hostname>
或者使用
mysql> SET SQL_LOG_BIN=0; source full_backup.sql

使用myloader從mydumper中恢復
myloader是多線程恢復mydumper備份集的工具。myloader與mydumper是一起的,不需要單獨安裝。
如何操作
myloader的常用選項有:要連接的MySQL服務器的主機名(默認爲localhost)、用戶名、密碼和端口。

恢復完整的數據庫
shell> myloader --directory=/backups --user=<user> --password=<password> > --queries-per-transaction=5000 --threads=8 --compress-protocol --overwrite- tables

–overwrite-tables:這個選項會刪除已經存在的表;
–compress-protocol:該選項在MySQL連接上使用壓縮;
–threads:該選項指定要使用的線程數量,默認值是4;
–queries-per-transaction:指定每個事務的查詢數量,默認值是1000;
–directory:指定要導入的轉儲目錄。

恢復單個數據庫
可以指定–source-db <db_name>,僅恢復單個數據庫。
假設你想恢復company數據庫:
shell> myloader --directory=/backups --queries-per-transaction=5000 --threads=6
\
> --compress-protocol --user= --password=
> --source-db company --overwrite-tables

恢復單個表
mydumper將每個表的備份寫入單獨的.sql文件。你可以選擇這個.sql文件並恢復:
shell> mysql -u <user> -p<password> -h <hostname> company -A -f <
company.payments.sql

如果這個表被拆分爲chunk(塊),則可以將與這個表相關的所有chunk和信息複製到一個目錄並指定其位置。
複製所需的文件:
shell> cp /backups/employee_table_chunks/employees.employees.* \
/backups/employee_table_chunks/employees.employees-schema.sql \
/backups/employee_table_chunks/employees-schema-create.sql \
/backups/employee_table_chunks/metadata \
/backups/single_table/

使用myloader加載,它會自動檢測chunk並加載它們:
shell> myloader --directory=/backups/single_table/ --queries-per-
transaction=5000 --threads=6 \
> --compress-protocol --overwrite-tables

從普通文件備份中恢復
從普通文件備份中恢復,需要先關閉MySQL服務器,替換所有文件,更改權限,然後再啓動MySQL。

  1. 停止MySQL服務器的運行;
  2. 將文件移至數據目錄:
    shell> mv /backup/mysql /var/lib
  3. 將所有權更改爲mysql:
    shell> chown -R mysql:mysql /var/lib/mysql
  4. 啓動MySQL。

執行時間點恢復
一旦恢復完整的備份後,仍需要恢復二進制日誌以獲得時間點(point-in-time)恢復。備份集提供截止到備份可用時的二進制日誌座標。
應該根據mysqldump中指定的–dump-slave或–master-data選項從備份所在的服務器中選擇二進制日
志備份。
如何操作
根據情況不同,有很多操作細節需要注意
mysqldump或mysqlpump
根據你傳給mysqldump/mysqlpump的選項,二進制日誌信息被作爲CHANGE MASTER TO 命令存儲
在SQL文件中。

  1. 如果你用了–master-data,則應使用從服務器的二進制日誌:
    shell> head -30 /backups/dump.sql
    …略
    – Position to start replication or point-in-time recovery from

    CHANGE MASTER TO MASTER_LOG_FILE=‘server1.000008’, MASTER_LOG_POS=154;

在這種情況下,應該從位於從服務器,位置爲154處的server1.000008文件開始恢復。
shell> mysqlbinlog --start-position=154 --disable-log-bin \
> /backups/binlogs/server1.000008 | mysql -u -p -h -f

  1. 如果你用了–dump-slave,則應該使用主服務器上的二進制日誌:

    – Position to start replication or point-in-time recovery from (the master of
    this slave)

    CHANGE MASTER TO MASTER_LOG_FILE=‘centos7-bin.000001’,MASTER_LOG_POS=463;

在這種情況下,應該從位於主服務器,位置爲463處的centos7-bin.000001文件開始恢復。
shell> mysqlbinlog --start-position=463 --disable-log-bin \
> /backups/binlogs/centos7-bin.000001 | mysql -u -p -h -f

mydumper
二進制日誌信息可以從元數據中獲取:
[root@www backups]# cat …/backups/metadata
Started dump at: 2019-10-28 22:05:32
SHOW MASTER STATUS:
Log: server1.000012
Pos: 155
GTID:
SHOW SLAVE STATUS:
Host: 35.186.158.188
Log: centos7-bin.000001
Pos: 463
GTID:
Finished dump at: 2019-10-28 22:05:37

如果你已經從從服務器中獲取二進制日誌備份,則應從位置爲155(SHOW MASTER STATUS)的server1.000012文件開始恢復:
shell> mysqlbinlog --start-position=155 --disable-log-bin \
> /backups/binlogs/server1.000012 | mysql -u -p -h -f

如果你有來自主服務器的二進制日誌備份,則應從位置爲463(SHOW SLAVE STATUS)的centos7- bin.000001文件開始恢復:
shell> mysqlbinlog --start-position=463 --disable-log-bin \
> /backups/binlogs/centos7-bin.000001 | mysql -u -p -h -f

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章