Mysql

是否可以使用 Percona Xtrabackup 在 Oracle 的 MySQL 5.7.19 伺服器上備份和恢復 InnoDB 表?

  • August 1, 2017

我有下一個配置:

作業系統:Ubuntu 16.04.2 x86_64 MySQL 伺服器:版本 5.7.19-0ubuntu0.16.04.1 for Linux on x86_64 ((Ubuntu)) 從 Ubuntu 的儲存庫安裝

Percona 工具:從 Percona 的儲存庫安裝的 innobackupex 版本 2.4.8 Linux (x86_64)(修訂版 ID:97330f7)。

下一個問題是:當我使用 innobackupex 進行備份然後恢復時 - 我的 InnoDB 表已損壞。

2017-07-28T15:49:50.078080Z 4 [Warning] InnoDB: Cannot open table forum/domain from the internal data dictionary of InnoDB though the .frm file for the table exists. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html for how to resolve the issue.

備份/恢復發生在同一台伺服器上。MySQL伺服器有預設設置,innodb_file_per_table選項不直接設置,但Oracle的MySQL預設啟用。

mysql> show variables like '%innodb_file%';
+--------------------------+-----------+
| Variable_name            | Value     |
+--------------------------+-----------+
| innodb_file_format       | Barracuda |
| innodb_file_format_check | ON        |
| innodb_file_format_max   | Barracuda |
| innodb_file_per_table    | ON        |
+--------------------------+-----------+
4 rows in set (0.00 sec)

為了進行備份,我這樣做:

innobackupex --defaults-extra-file=/root/.my.cnf \
--include=forum.* --parallel=9 \
--extra-lsndir=/home/forum \
--stream=xbstream \
--no-timestamp /home/forum 2>/home/backup.log | lzop -c > /home/forum.xbs.lzo

結果中的xtrabackup_info文件:

uuid = 850f3d9e-73ab-11e7-8b45-448a5b2c32e7
name =
tool_name = innobackupex
tool_command = --defaults-extra-file=/root/.my.cnf --include=forum.* --parallel=9 --extra-lsndir=/home/forum --stream=xbstream --no-timestamp /home/forum
tool_version = 2.4.8
ibbackup_version = 2.4.8
server_version = 5.7.19-0ubuntu0.16.04.1
start_time = 2017-07-28 17:43:27
end_time = 2017-07-28 17:43:36
lock_time = 0
binlog_pos =
innodb_from_lsn = 0
innodb_to_lsn = 14341896999
partial = Y
incremental = N
format = xbstream
compact = N
compressed = N
encrypted = N

作為還原,我執行以下操作:取消歸檔文件:

lzop -dcfU /home/forum.xbs.lzo | xbstream -x --directory=/home/forum.restore

應用日誌:

innobackupex --apply-log --redo-only /home/forum.restore --use-memory=1G 2>/home/restore.log

準備備份以供使用:

innobackupex --apply-log /home/forum.restore --use-memory=1G 2>>/home/restore.log

之後我的目錄有:

root@restore-test /home/forum.restore # tree
.
├── backup-my.cnf
├── forum
│   ├── db.opt
│   ├── domain.frm
│   └── domain.ibd
├── ib_buffer_pool
├── ibdata1
├── ib_logfile0
├── ib_logfile1
├── ibtmp1
├── xtrabackup_checkpoints
├── xtrabackup_info
└── xtrabackup_logfile

決賽是:

  1. 停止 MySQL 伺服器
  2. chown -R mysql:mysql /home/forum.restore/forum
  3. mv /home/forum.restore/forum /var/lib/mysql/forum
  4. 啟動 MySQL

數據庫在那裡,但是當我嘗試對錶進行任何操作(SHOW/DESCRIBE/etc)時 - 我遇到了上面列出的錯誤。

在做了一些研究並重新閱讀手冊後,我發現了下一個:

  1. 我已經完成了所謂的部分備份,這意味著恢復過程有點不同 - 您需要--export在執行恢復過程時指定選項(請參閱恢復單個表
  • 如果您在 Percona Server 上,您可以嘗試使用innodb_expand_import選項並避免一些正常操作。
  • 如果您在 MySQL 伺服器上 - 您還必須進行模式轉儲。然後對每張桌子進行ALTER TABLE xxx DISCARD TABLESPACE操作。ALTER TABLE xxx IMPORT TABLESPACE見這裡
  1. 我在沒有指定 的情況下進行了還原--export,所以這些 的問題.frm
  2. 如果您有儲存過程/等 - 也許您還需要備份它們。我沒有機會檢查。

引用自:https://dba.stackexchange.com/questions/182166