你的位置:首页 > 数据库

[数据库]Percona博客学习总结


1. Upgrading to MySQL 5.7, focusing on temporal types

    在MySQL 5.6.4中,对TIME, TIMESTAMP and DATETIME三种时间类型进行了扩充,支持了微秒,并且DATETIME的存储由之前的8个字节缩小到5个字节。

    如果从MySQL 5.5升级到5.6,使用mysql_upgrade,mysql_upgrade并不会显示的将之前的类型转换成新类型,只是新建的表会使用新类型。

    但如果是升级到5.7,则mysql_upgrade会将旧类型转换为新类型,而这可能导致升级的过程比较漫长。

    对于上述情况,如果避免呢?

    1. mysql_upgrade支持upgrade-system-tables选项,在升级时可指该参数,只升级系统表,而不升级普通表

    2. 升级完毕后,再使用alter table或者pt-online-schema-schange修改表的数据类型。

    可通过以下命令查看升级完毕后,各表中上述三个字段的新旧情况。   

SELECT CASE isc.mtype      WHEN '6' THEN 'OLD'      WHEN '3' THEN 'NEW'    END FORMAT,    t.schema_name,    t.table_nameFROM information_schema.tables AS tINNER JOIN information_schema.columns AS c ON c.table_schema = t.table_schemaAND c.table_name = t.table_nameLEFT OUTER JOIN information_schema.innodb_sys_tables AS ist ON ist.name = concat(t.table_schema,'/',t.table_name)LEFT OUTER JOIN information_schema.innodb_sys_columns AS isc ON isc.table_id = ist.table_idAND isc.name = c.column_nameWHERE c.column_type IN ('time','timestamp','datetime')  AND t.table_schema NOT IN ('mysql','information_schema','performance_schema')  AND t.table_type = 'base table'  AND (t.engine = 'innodb');

      注意:5.6中t.shema_name应为t.TABLE_SCHEMA。

      具体可参考:https://www.percona.com/blog/2016/04/27/upgrading-to-mysql-5-7-focusing-on-temporal-types/