• innodb_file_per_table


    共享InnoDB / var / lib / mysql / ibdata1存储的问题
    InnoDB表当前将数据和索引存储到共享表空间(/ var / lib / mysql / ibdata1)。由于共享表空间,一个InnoDB表的数据损坏可能导致MySQL无法在整个计算机上启动。修复InnoDB损坏可能非常难以执行,并且可能导致在修复过程中最初未损坏的表的数据丢失。

    由于MySQL 5.5将使用InnoDB作为默认存储引擎,因此考虑继续利用/ var / lib / mysql / ibdata1中的共享表空间的后果非常重要。

    使用innodb_file_per_table更改为每表表空间

    作为解决问题的选项,MySQL有一个名为innodb_file per_table的配置变量。要使用此变量,可以将以下内容放入/etc/my.cnf,以将InnoDB转换为每个InnoDB引擎表的每个表文件:

    码:
    innodb_file_per_table = 1

    添加该行后,需要在机器上重新启动MySQL。

    在/etc/my.cnf中使用该行的结果将导致在添加行之后的任何数据库在/ var / lib / mysql / database / location中创建.idb文件。请注意,共享表空间仍将保留内部数据字典和撤消日志。

    转换旧的InnoDB表

    任何设置为先前在ibdata1中共享表空间的InnoDB表的旧数据库仍将使用该文件,因此需要将这些旧数据库切换到新系统。MySQL CLI中的以下命令将创建InnoDB引擎表的列表以及为每个引擎运行的命令,以将它们转换为新的innodb_file_per_table系统:

    代码:
    select concat('alter table ',TABLE_SCHEMA ,'.',table_name,' ENGINE=InnoDB;') FROM INFORMATION_SCHEMA.tables where table_type='BASE TABLE' and engine = 'InnoDB';

    我的测试计算机上的Roundcube示例在运行previous命令时显示以下返回值:

    码:
    alter table roundcube.cache ENGINE = InnoDB;
    alter table roundcube.contacts ENGINE = InnoDB;
    alter table roundcube.identities ENGINE = InnoDB;
    alter table roundcube.messages ENGINE = InnoDB;
    alter table roundcube.session ENGINE = InnoDB;
    alter table roundcube.users ENGINE = InnoDB;

    然后,您只需发出MySQL CLI指出的命令,然后将每个表转换为新的innodb_file_per_table格式。

    请注意,这些命令只需要在MySQL命令行中进行转换,可以通过在bash提示符下输入mysql在root SSH中访问。

    转换旧InnoDB表的可能问题

    1.转换期间可能发生系统负载
    2.驱动器空间填满转换的可能问题

  • 相关阅读:
    postgresql postgres.Jsonb
    gorm jsonb
    json
    postgresql重置序列和自增主键
    go build x509: certificate has expired or is not yet valid
    权限修饰符
    交换两个变量的值
    Java编译报错:编码GBK的不可映射字符
    原码反码补码的理解
    Scanner类中hasNext()方法的解析
  • 原文地址:https://www.cnblogs.com/DataArt/p/10203395.html
Copyright © 2020-2023  润新知