mysql数据库,亿级别数据量,修改表结构中的字段类型,求可实行方案
这个问题困扰我很多天了,用了一些方法,都不太可行。
大虾,高手们,给个偏方吧。谢谢

解决方案 »

  1.   

    直接改,似乎不太可行。
    不如根据原来的表结构以及你要改的字段类型创建一个新的表:
    原表为t, 新表为t2
    1. create table t2(col1,....colN)其中包括你修正以后的某字段
    2. insert into t2 select * from t
    3. 将原表重命名备份:
       rename t to t_orig;
    4. 将新表重命名为原表
       rename t2 to t;
      

  2.   

    TO iihero ,谢谢
    TO ACMAIN_CHM   没有外键参照,就是一个普通的字段
      

  3.   

    alter table 在MYSQL中的后台实际操作就是和  #1楼  所说的步骤一样。不过会锁表。
      

  4.   

    如果生产环境,而且不能下线,那么一般是另加一张表,加上主键和要加的字段。如果预估还会增加,那么索性就多加点字段x1,x2,x3....作为预留
      

  5.   

    对productive 环境如果要求很高的话,对其影响最小的一种方法是1. show create table old_table; 得到 create table 语句,然后按要求修改为 create table new_table (..,,, col newColumnType,,,,)
    2. 使用mysqldump, 或者 select * from old_table into 'mdata.dat' 导出文件。
    3. 运行create table new_table .... 创建新表 (先不创建索引)
    4. mysql <xxx.sql 或者 load data infile .. 把刚才导出的数据导入。
    5. 创建索引。
    6. RENAME TABLE old_table TO back_table
    7. RENAME TABLE new_table TO old_table 
      

  6.   

    2. 使用mysqldump, 或者 select * from old_table into 'mdata.dat' 导出文件。
    2.5  LOCK TABLES old_table  (锁定原表)
    3. 运行create table new_table .... 创建新表 (先不创建索引)
      

  7.   


    如果生产环境,而且不能下线的话,这个方法不太合适啊,ACMAIN_CHM
      

  8.   

    这估计已经是影响最小的方法了。 肯定会有down time
      

  9.   

    用delete删除要改的数据,然后用insert into插入一行要修改成的数据!
      

  10.   

    Sorry,我承认我看错了,是修改,我看成新增了。
      

  11.   


    呵呵,没事,谢谢,shine333的捧场!