本文将详细介绍PolarDB数据库内核版本的组成部分和各部分间的关系,以及与MySQL的兼容性说明。

一个完整的PolarDB数据库内核版本号由大版本(DB version)号、小版本(Minor version)号和修订版本(Revision version)号三者组成,三者间的关系如下所示(以PolarDB MySQL引擎 8.0版本为例):

版本号说明

大版本号是PolarDB数据库内核版本最重要的标识号,一个大版本下通常包含一个或多个小版本,如大版本5.6仅包含一个小版本5.6.16,而大版本8.0包含8.0.1和8.0.2两个小版本。不同小版本支持的功能差异较大,建议您在购买集群前先根据业务需要确定适合的小版本号。通常情况下,一个小版本下还包含多个修订版本。新版本的修订版本会优化或改进现有功能,或者增加一些新的简单功能。同时,小版本和修订版本均会包含安全、性能等方面的优化和改进。

说明 PolarDB数据库内核版本整体向下兼容,高版本包含低版本的全部功能,即当您从低版本升级到高版本后,应用程序不需要做任何修改,完全兼容。关于如何升级版本,详情请参见版本升级

兼容性说明

PolarDB MySQL引擎100%兼容原生MySQL和RDS MySQL,您可以在不修改应用程序任何代码和配置的情况下,将MySQL数据库迁移至PolarDB

PolarDB MySQL引擎内核兼容性说明如下:
  • 兼容ANSI/ISO SQL标准,PolarDB MySQL引擎支持修改SQL兼容模式为ANSI,您可以将集群参数sql_mode修改为ANSI实现该需求。如何修改集群参数,请参见设置集群参数和节点参数
  • 支持0至3.51版本的ODBC。
  • 支持W3C和XPath标准的XML功能。
  • PolarDB MySQL引擎5.7和8.0版本支持RFC 7159和ECMAScript标准(ECMA-262)的原生JSON数据类型。

PolarDB MySQL与社区MySQL版本的兼容关系

内核版本 完全兼容的MySQL小版本
8.0.2 8.0.18
8.0.1 8.0.13
5.7 5.7.28
5.6 5.6.16

8.0.2.2.0及以上版本与MySQL兼容性实现说明

PolarDB MySQL引擎8.0.2.2.0及以上版本为了与其他MySQL进行语法兼容,您需要在MySQL中进行如下操作:
  • 如果是create table语法,通过Show create table语法、mysqldump工具和binlog日志同步可以自动添加create table语法,实现自动兼容create table。具体说明如下:
    • 通过Show create table语法自动添加create table语法。示例如下:
      CREATE TABLE `t1` (c1 int) ENGINE=InnoDB UNIQUE CHECK IGNORE=1
      PARTITION BY HASH (`c1`) PARTITIONS 4;
      
      --- result
      SHOW CREATE TABLE t1;
      Table Create Table
      t1  CREATE TABLE `t1` (
        `c1` int(11) DEFAULT NULL
      ) /*!99990 800020200 UNIQUE CHECK IGNORE=1 */ ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
      /*!50100 PARTITION BY HASH (`c1`)
      PARTITIONS 4 */
    • 通过mysqldump工具自动添加create table语法。示例如下:
      CREATE TABLE `t1` (c1 int) UNIQUE CHECK IGNORE=1 ENGINE=InnoDB
      DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci PARTITION BY HASH (`c1`);
      --result
      mysql_dump --compact test t1
      
      include/mysqlbinlog.inc
      /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
      /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
      DELIMITER /*!*/;
      ROLLBACK/*!*/;
      # [empty]
      # original_commit_timestamp= MICROSECONDS-FROM-EPOCH (YYYY-MM-DD HOURS:MINUTES:SECONDS TZ)
      # immediate_commit_timestamp= MICROSECONDS-FROM-EPOCH (YYYY-MM-DD HOURS:MINUTES:SECONDS TZ)
      /*!80001 SET @@session.original_commit_timestamp= MICROSECONDS-FROM-EPOCH*//*!*/;
      /*!80014 SET @@session.original_server_version= ORIGINAL_SERVER_VERSION*//*!*/;
      /*!80014 SET @@session.immediate_server_version= IMMEDIATE_SERVER_VERSION*//*!*/;
      SET @@SESSION.GTID_NEXT= '#'/*!*/;
      use `test`/*!*/;
      SET TIMESTAMP=#/*!*/;
      SET @@session.pseudo_thread_id=#/*!*/;
      SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
      SET @@session.sql_mode=1168113696/*!*/;
      SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
      /*!\C utf8mb4 *//*!*/;
      SET @@session.character_set_client=255,@@session.collation_connection=255,@@session.collation_server=255/*!*/;
      SET @@session.lc_time_names=0/*!*/;
      SET @@session.collation_database=DEFAULT/*!*/;
      /*!80011 SET @@session.default_collation_for_utf8mb4=255*//*!*/;
      /*!80013 SET @@session.sql_require_primary_key=0*//*!*/;
      CREATE TABLE `t1` (
        `c1` int(11) DEFAULT NULL
      ) /*!99990 800020200 UNIQUE CHECK IGNORE=1 */ ENGINE=InnoDB
      /*!50100 PARTITION BY HASH (`c1`)
      PARTITIONS 4 */
      /*!*/;
      ......
    • 通过binlog日志同步自动添加create table语法。
      本文以创建PolarDB MySQL引擎8.0.2.2.0版本到MySQL 8.0.27版本的binlog日志同步为例进行说明:
      1. 首先在PolarDB上修改配置文件、创建rep用户和导出当前数据结构和信息。
        #修改配置文件
        polar_log_bin=on
        server-id=1
        sync_binlog = 1
        innodb_flush_log_at_trx_commit = 1
        log-bin=mysql-bin
        expire_logs_days = 10
        max_binlog_size = 100M
        #创建rep用户
        create user 'rep'@'ip' identified by 'xxxxxxx';
        grant replication slave on *.* to 'rep'@'ip';
        ALTER USER 'rep'@'10.160.45.141' IDENTIFIED WITH mysql_native_password BY 'xxxxxxx';
        #导出当前数据结构和信息
        mysqldump -uroot -S /tmp/mysql.sock -A -B -F --master-data=2 >/tmp/full.sql;
        Show master status\G;
        *************************** 1. row ***************************
        File: mysql-bin.000021
        Position: 155
        Binlog_Do_DB:
        Binlog_Ignore_DB:
        Executed_Gtid_Set:
        1 row in set (0.00 sec)
      2. 然后在MySQL 8.0.27上修改配置文件、设置master信息并启动binlog同步。
        #配置文件
        log-bin=mysql-bin
        server_id=2
        
        #设置master信息
        CHANGE MASTER TO
        MASTER_HOST='ip',
        MASTER_USER='rep',
        MASTER_PASSWORD='xxxxxxx',
        MASTER_PORT=33006,
        MASTER_LOG_FILE='mysql-bin.000021',
        MASTER_LOG_POS=155;
        
        #启动Binlog同步
        Start SLAVE;
      3. 分别在PolarDB8.0.2.2.0版本和MySQL上查看binlog同步结果。
        PolarDB同步结果如下:
        MySQL同步结果如下:MySQL从图中可以看到,MySQL这边的显示结果中不包含PolarDB的新功能。
        说明 PolarDB数据同步到MySQL后,MySQL将无法使用PolarDB的新功能。
  • 如果是除create table外的其他DDL操作,需要手动添加PolarDB语法兼容性comments。具体格式如下:
    /*!99990 800020200 Special new PolarDB Syntax SQL supported >= version 2.2.0 */
    示例如下:
    CREATE TABLE `t1` (c1 int)
    /*!99990 900020200 UNIQUE CHECK IGNORE=1 */
    ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
    /*!50100 PARTITION BY HASH (`c1`) */;
    SHOW CREATE TABLE t1;
    DROP TABLE `t1`;