电影网站app怎么做的,整形网站专题素材,上海建设钢结构工程网站,网站下载不了怎么解决从MySQL的Innodb特性中我们知道#xff0c;Inndob的表空间有共享和独享的特点#xff0c;如果是共享的。则默认会把表空间存放在一个文件中#xff08;ibdata1#xff09;#xff0c;当开启独享表空间参数Innodb_file_per_table时#xff0c;会为每个Innodb表创建一个.ib… 从MySQL的Innodb特性中我们知道Inndob的表空间有共享和独享的特点如果是共享的。则默认会把表空间存放在一个文件中ibdata1当开启独享表空间参数Innodb_file_per_table时会为每个Innodb表创建一个.ibd的文件。文章讨论在独享表空间卸载、装载、迁移Innodb表的情况。 条件 2台服务器A和B需要A服务器上的表迁移到B服务器。 Innodb表sysUser记录数351781。 以下测试在MySQL 5.5.34中进行。 开始处理 1在B服务器上建立sysUser表并且执行 zjyB : db_test 09:50:30alter table sysUser discard tablespace; 2把A服务器表的表空间ibd复制到B服务器的相应数据目录。 3修改复制过来的ibd文件权限 chown mysql:mysql sysUser.ibd 4最后就开始加载 zjyB : db_test 10:00:03alter table sysUser import tablespace;
ERROR 1030 (HY000): Got error -1 from storage engine 报错了查看错误日志 131112 10:05:44 InnoDB: Error: tablespace id and flags in file ./db_test/sysUser.ibd are 2428 and 0, but in the InnoDB
InnoDB: data dictionary they are 2430 and 0.
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.5/en/innodb-troubleshooting-datadict.html
InnoDB: for how to resolve the issue.
131112 10:05:44 InnoDB: cannot find or open in the database directory the .ibd file of
InnoDB: table db_test.sysUser
InnoDB: in ALTER TABLE ... IMPORT TABLESPACE 当遇到这个的情况A服务器上的表空间ID 为2428而B服务器上的表空间ID为2430。所以导致这个错误发生解决办法是让他们的表空间ID一致即B找出表空间ID为2428的表CREATE TABLE innodb_monitor (a INT) ENGINEINNODB;修改成和sysUser表结构一样的的表再import。要不就把A服务器的表空间ID增加到大于等于B的表空间ID。需要新建删除表来增加ID 要是A的表空间ID大于B的表空间ID则会有 131112 11:01:45 InnoDB: Error: tablespace id and flags in file ./db_test/sysUser.ibd are 44132 and 0, but in the InnoDB
InnoDB: data dictionary they are 2436 and 0.
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.5/en/innodb-troubleshooting-datadict.html
InnoDB: for how to resolve the issue.
131112 11:01:45 InnoDB: cannot find or open in the database directory the .ibd file of
InnoDB: table db_test.sysUser
InnoDB: in ALTER TABLE ... IMPORT TABLESPACE 这时的情况A服务器上的表空间ID 为44132而B服务器上的表空间ID为2436。因为A是测试机子经常做还原操作所以表空间ID已经很大了正常情况下。表空间ID不可能这么大。 既然表空间ID不对导致这个错误报出那我们手动的让B的表空间ID追上A的表空间ID。 需要建立的表数量44132-2436 41696个才能追上。因为他本身就需要再建立一个目标表所以需要建立的表数量为41695。不过安全起见最好也不要超过41695以防B的表空间ID超过了A则比如设置安全的值41690即使B没有到达A表空间ID的值也应该差不多了可以再手动的去增加。用一个脚本跑需要建立的表比较多少的话完全可以自己手动去处理 #!/bin/env python
# -*- encoding: utf-8 -*-import MySQLdb
import datetimedef create_table(conn):query
create table tmp_1 (id int) engine innodbcursor conn.cursor()cursor.execute(query)conn.commit()
def drop_table(conn):query
drop table tmp_1cursor conn.cursor()cursor.execute(query)conn.commit()if __name__ __main__:conn MySQLdb.connect(hostB,userzjy,passwd123,dbdb_test,port3306,charsetutf8)for i in range(41690):print icreate_table(conn)drop_table(conn) View Code 也可以开启多线程去处理加快效率。 当执行完之后再重新按照上面的1-3步骤进行一次最后再装载 zjyB : db_test 01:39:23alter table sysUser import tablespace;
Query OK, 0 rows affected (0.00 sec) 要是再提示A表空间ID大于B表的话就再手动的按照脚本里面的方法来增加ID这时候就只需要增加个位数就可以追上A的表空间ID了。 总结 上面只是一个方法虽然可以迁移Innodb但是出问题之后可能会引其Innodb的页损坏所以最安全的还是直接用mysqldump、xtrabackup等进行迁移。 5.6 可以不用考虑这些tablespace id可以直接import 进来。 2013-11-12 15:25:09 2378 [Note] InnoDB: Sync to disk
2013-11-12 15:25:09 2378 [Note] InnoDB: Sync to disk - done!
2013-11-12 15:25:09 2378 [Note] InnoDB: Phase I - Update all pages
2013-11-12 15:25:09 2378 [Note] InnoDB: Sync to disk
2013-11-12 15:25:09 2378 [Note] InnoDB: Sync to disk - done!
2013-11-12 15:25:09 2378 [Note] InnoDB: Phase III - Flush changes to disk
2013-11-12 15:25:09 2378 [Note] InnoDB: Phase IV - Flush complete 更多信息见: http://www.iamcjd.com/?p1307 p10~13 http://imysql.cn/2008_12_17_migrate_innodb_tablespace_smoothly http://www.chriscalender.com/?p28转载于:https://www.cnblogs.com/zhoujinyi/p/3419142.html