Mysql修改系统表

以在columns中增加一列xxx_type为例

修改系统表定义

  • sql/dd/impl/tables/columns.h里增加enum:FIELD_XXX_TYPE
  • sql/dd/impl/tables/columns.cc里增加:
m_target_def.add_field(FIELD_XXX_TYPE,
                       "FIELD_XXX_TYPE",
                       "xxx_type BIGINT UNSIGNED");

修改存储和dd之间的存取接口和序列化反序列化协议

  • sql/dd/impl/types/column_impl.h增加dd里的属性定义:
    //XXX information blow
    enum class enum_xxx_type {
      INVALID = 0,
      XXX1,
      XXX2,
      XXX3,
      };
    ulonglong m_xxx_type;

  • sql/dd/impl/types/column_impl.cc修改构造函数、存取接口和协议,还要修改static_asset,否则编译过不去
//For XXX information blow
m_xxx_type = r.read_uint(Columns::FIELD_XXX_TYPE);


r->store(Columns::FIELD_XXX_TYPE, m_xxx_type);

......

修改升级协议

  • sql/dd/impl/upgrade/dd.cc里修改columns的升级语句,以及static_assert:
+    /*
+     * Also need to store 0 for new column mysql.xxx_type.
+     * So dd::tables::Columns::NUMBER_OF_FIELDS is 32 + 1 = 33
+     * */
     if (migrate_table(
             "columns",
-            "INSERT INTO columns SELECT *, NULL, NULL FROM mysql.columns")) {
+            "INSERT INTO columns SELECT *, NULL, NULL, 0 FROM mysql.columns")) {

重新init数据库

修改了系统表之后一定要重新init数据库,否则会core掉。重新init的时候要把mysqldata整个目录删掉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值