Mysql
是否可以使用 Percona Xtrabackup 在 Oracle 的 MySQL 5.7.19 伺服器上備份和恢復 InnoDB 表?
我有下一個配置:
作業系統: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
決賽是:
- 停止 MySQL 伺服器
chown -R mysql:mysql /home/forum.restore/forum
mv /home/forum.restore/forum /var/lib/mysql/forum
- 啟動 MySQL
數據庫在那裡,但是當我嘗試對錶進行任何操作(SHOW/DESCRIBE/etc)時 - 我遇到了上面列出的錯誤。
在做了一些研究並重新閱讀手冊後,我發現了下一個:
- 我已經完成了所謂的部分備份,這意味著恢復過程有點不同 - 您需要
--export
在執行恢復過程時指定選項(請參閱恢復單個表)
- 如果您在 Percona Server 上,您可以嘗試使用
innodb_expand_import
選項並避免一些正常操作。- 如果您在 MySQL 伺服器上 - 您還必須進行模式轉儲。然後對每張桌子進行
ALTER TABLE xxx DISCARD TABLESPACE
操作。ALTER TABLE xxx IMPORT TABLESPACE
(見這裡)
- 我在沒有指定 的情況下進行了還原
--export
,所以這些 的問題.frm
。- 如果您有儲存過程/等 - 也許您還需要備份它們。我沒有機會檢查。