成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

InnoDB數據表空間文件平滑遷移

數據庫 MySQL 數據庫運維
InnoDB存儲引擎滿足了MVCC和ACID特性,在需要支持事務的環境下必不可少。有些環境下,采用InnoDB可能效果比MyISAM還要來的好。不過,在很多人眼中看來,InnoDB表空間文件由于無法實現跨服務器平滑遷移,因此不愿意使用。實際情況真是這樣嗎?本文就來探討一下InnoDB表空間文件的平滑遷移可能性。

如何遷移?

從MySQL文檔中我們了解到,InnoDB的表空間可以是共享的或獨立的。如果是共享表空間,則所有的表空間都放在一個文件里:ibdata1,ibdata2..ibdataN,這種情況下,目前應該還沒辦法實現表空間的遷移,除非完全遷移,因此不在本次討論之列;我們只討論獨立表空間的情況。

不管是共享還是獨立表空間,InnoDB每個數據表的元數據(metadata)總是保存在 ibdata1 這個共享表空間里,因此該文件必不可少,它還可以用來保存各種數據字典等信息。數據字典中,會保存每個數據表的ID號,每次發生數據表空間新增時,都會使得該ID自增一個值(++1),例如:CREATE TABLE xx ENGINE = InnoDB / ALTER TABLE xx ENGINE = InnoDB 都會使得ID值增加。

有了上面的理解,想要實現InnoDB表空間文件的平滑遷移就很容易了,呵呵。下面是一些例子:

假定我們有2臺DB主機,一個是A,一個B,現在想把A上的某個InnoDB表空間文件遷移到B上直接用。

一、遷移失敗的例子

直接從A上把表空間文件 yejr.ibd 拷貝到 B 上后,導入表空間,報錯,無法使用。這是由于A,B上創建該表時的順序不一致,導致表的ID不一樣,無法導入。

注意:在這里,表空間文件直接拷貝的前提是該表空間處于"干凈"狀態下,也就是所有的數據均已經刷新到磁盤中,否則可能導致無法使用或部分數據丟失。

1. 在B上將舊的表空間廢棄

(root@imysql.cn/17:52:47)[yejr]>ALTER TABLE yejr DISCARD TABLESPACE;
Query OK, 0 rows affected (0.00 sec)

2. 拷貝到目標機器

scp yejr.ibd B:/home/mysql/yejr/yejr.ibd
....

3. 啟用該表空間

(root@imysql.cn/17:52:47)[yejr]>ALTER TABLE yejr IMPORT TABLESPACE;
ERROR 1030 (HY000): Got error -1 from storage engine

4. 查看錯誤

InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: Error: trying to open a table, but could not
InnoDB: open the tablespace file './test/b.ibd'!
InnoDB: Error: cannot reset lsn's in table `test/b`
InnoDB: in ALTER TABLE ... IMPORT TABLESPACE

5. 很明顯,是權限的問題,修正過來,然后重新導入

(root@imysql.cn/17:52:47)[yejr]>ALTER TABLE yejr DISCARD TABLESPACE;
ERROR 1030 (HY000): Got error -1 from storage engine

6. 怎么還是錯誤?繼續看日志

InnoDB: Error: tablespace id in file './yejr/yejr.ibd' is 15, but in the InnoDB
InnoDB: data dictionary it is 13.
InnoDB: Have you moved InnoDB .ibd files around without using the
InnoDB: commands DISCARD TABLESPACE and IMPORT TABLESPACE?
InnoDB: Please refer to
InnoDB: http://dev.mysql.com/doc/refman/5.0/en/innodb-troubleshooting.html
InnoDB: for how to resolve the issue.
InnoDB: cannot find or open in the database directory the .ibd file of
InnoDB: table `yejr/yejr`
InnoDB: in ALTER TABLE ... IMPORT TABLESPACE

從上面的日志得知,由于在A服務器上,yejr表的ID是15,而在B服務器上,yejr表的ID卻是13,二者不一致,因此遷移失敗。

既然只是因為ID不一樣,而且有了上面的理論基礎,我們完全可以人為的讓它們的ID一致嘛,請看下面的第2次嘗試。

二、人工干預下的成功遷移

1. 上面的例子中,B上面的yejr表ID為13,而A上面為15;因此只需要讓B上的yejr表ID增加2就可以了。

(root@imysql.cn/17:52:47)[yejr]>ALTER TABLE yejr RENAME TO yejr1;
Query OK, 0 rows affected (0.00 sec)
#這個時候,yejr的ID變為14
(root@imysql.cn/17:52:47)[yejr]>ALTER TABLE yejr1 RENAME TO yejr;
Query OK, 0 rows affected (0.00 sec)
#這個時候,yejr的ID變為15

2. 然后,我們再導入

(root@imysql.cn/17:52:47)[yejr]>ALTER TABLE yejr IMPORT TABLESPACE;
Query OK, 0 rows affected (0.00 sec)
(root@imysql.cn/17:52:47)[yejr]>select count(*) from yejr;
+----------+
| count(*) |
+----------+
|        3 |
+----------+
1 row in set (0.00 sec)

看到了吧,成功了,呵呵。想要讓其它ID增加的方式也可以重復創建表,根據實際情況或者個人喜好而定了。

以上測試均在MySQL 5.0.67版本下通過,只不過顯示數據稍作處理了。

【編輯推薦】

  1. 用于MySQL的PHP XML類
  2. 三種優化MySQL數據庫查詢的方法簡介
  3. MySQL新特性之復制特性的測試
責任編輯:楊鵬飛 來源: MySQL中文網
相關推薦

2023-03-04 20:50:19

MySQL字典InnoDB

2021-07-02 09:45:29

MySQL InnoDB數據

2023-11-14 08:44:55

數倍數據

2010-09-01 14:07:33

DB2映射

2021-03-01 10:10:39

數據遷移擴容

2024-08-22 14:16:08

2020-12-02 14:38:21

SQL數據庫MySQL

2017-01-05 08:54:15

OctopressHugo遷移

2020-03-22 21:46:06

MySQLInnoDB表空間

2011-02-21 13:06:34

SQL Servr 2

2010-11-22 13:53:46

MySQL數據表

2009-09-07 16:13:14

LINQ to SQL

2011-02-21 13:41:14

SQL Server

2017-03-24 14:46:50

數據架構數據庫

2009-09-09 11:24:13

Linq使用數據表

2015-01-26 14:35:22

數據中心遷移

2010-05-07 12:35:05

Oracle spat

2010-06-09 16:55:47

MySQL數據表

2010-11-29 13:22:45

sybase數據表

2010-11-24 13:11:06

MySQL遍歷數據表
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美午夜影院 | 毛片一级电影 | 国产精品欧美一区二区三区 | 日韩中文字幕av | 久久午夜精品福利一区二区 | 欧美精品在线一区 | 中文字幕一区二区三区四区五区 | 国产精品国产三级国产aⅴ浪潮 | 久久久91精品国产一区二区精品 | 韩国久久精品 | 伊人超碰 | av一二三区 | 国产精品国产成人国产三级 | 久久国产精品久久久久 | 欧美成人精品一区二区男人看 | 精品免费国产一区二区三区四区 | 精品一区二区三区电影 | 粉嫩粉嫩芽的虎白女18在线视频 | 91久久精品国产91久久性色tv | 午夜免费视频观看 | 青青久草| 亚洲天堂av一区 | 欧洲av一区 | 久久大陆 | 成人精品视频99在线观看免费 | 亚洲 一区 | 亚洲一区二区三区视频 | 国产高清一区二区三区 | 免费激情 | 亚洲在线久久 | 精品国产18久久久久久二百 | 97久久久 | 亚洲欧美日韩激情 | 亚洲人成网站777色婷婷 | 亚洲午夜精品一区二区三区他趣 | 国产精品亚洲精品日韩已方 | 日本精品一区二区三区在线观看 | www精品 | 中文字幕亚洲精品在线观看 | 久久综合爱 | 欧美做暖暖视频 |