Release Notes for StoneDB-5.7-V1.0.4-alpha
修复在导入数据时候,增量数据导致的 crash(#1805)
修复在 union all 字句结果集导致的 crash(#1875)
修复在大数据量情况下使用聚合函数导致的 crash(#1855)
修复主从复制下的内存溢出导致的 crash(#1549)
当更新 Tianmu 时候,对于主键冲突的记录将被跳过,然后执行后续的更新操作。例如:
CREATE TABLE t1 (id int(11) NOT NULL auto_increment,parent_id int(11) DEFAULT '0' NOT NULL,level tinyint(4)
DEFAULT '0' NOT NULL, PRIMARY KEY (id)) engine=tianmu;
INSERT INTO t1 VALUES (3,1,1),(4,1,1);
执行 update ignore t1 set id=id+1;
语句会忽略 PK=3 的更新,因为更新后的主键会与 PK=4 冲突。继续执行 PK=4 的更新,更新后 PK=5。
mysql> CREATE TABLE t1 (id int(11) NOT NULL auto_increment, parent_id int(11) DEFAULT '0' NOT NULL, level tinyint(4)
-> DEFAULT '0' NOT NULL, PRIMARY KEY (id)) engine=tianmu;
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO t1 VALUES (3,1,1),(4,1,1);
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> update t1 set id=id+1;
ERROR 1062 (23000): Duplicate entry '4' for key 'PRIMARY'
mysql> select * from t1;
+----+-----------+-------+
| id | parent_id | level |
+----+-----------+-------+
| 3 | 1 | 1 |
| 4 | 1 | 1 |
+----+-----------+-------+
2 rows in set (0.00 sec)
mysql> update ignore t1 set id=id+1;
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> select * from t1;
+----+-----------+-------+
| id | parent_id | level |
+----+-----------+-------+
| 3 | 1 | 1 |
| 5 | 1 | 1 |
+----+-----------+-------+
2 rows in set (0.00 sec)
当 StoneDB 作为主机时候,Load 语句将以 insert into 的方式被写进 binlog。
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#230630 10:50:51 server id 1 end_log_pos 123 CRC32 0x050a2c27 Start: binlog v 4, server v 5.7.36-StoneDB-v1.0.1.42e5a3ad4 created 230630 10:50:51 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
C0OeZA8BAAAAdwAAAHsAAAABAAQANS43LjM2LVN0b25lREItdjEuMC4xLjQyZTVhM2FkNAAAAAAA
AAAAAAAAAAAAAAAAAAALQ55kEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AScsCgU=
'/*!*/;
# at 123
#230630 10:50:51 server id 1 end_log_pos 154 CRC32 0x3407f97c Previous-GTIDs
# [empty]
# at 154
#230630 10:50:51 server id 1 end_log_pos 219 CRC32 0x1631cab7 Anonymous_GTID last_committed=0 sequence_number=1 rbr_only=no
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 219
#230630 10:50:51 server id 1 end_log_pos 334 CRC32 0x1b721a4f Query thread_id=2 exec_time=0 error_code=0
use `test`/*!*/;
SET TIMESTAMP=1688093451/*!*/;
SET @@session.pseudo_thread_id=2/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1436549152/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
create table t1(id int, name varchar(10))
/*!*/;
# at 334
#230630 10:50:51 server id 1 end_log_pos 399 CRC32 0x092fa235 Anonymous_GTID last_committed=1 sequence_number=2 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 399
#230630 10:50:51 server id 1 end_log_pos 471 CRC32 0x417b2366 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1688093451/*!*/;
BEGIN
/*!*/;
# at 471
#230630 10:50:51 server id 1 end_log_pos 519 CRC32 0x563c6d07 Table_map: `test`.`t1` mapped to number 108
# at 519
#230630 10:50:51 server id 1 end_log_pos 580 CRC32 0x99df1dba Write_rows: table id 108 flags: STMT_END_F
BINLOG '
C0OeZBMBAAAAMAAAAAcCAAAAAGwAAAAAAAEABHRlc3QAAnQxAAIDDwIKAAMHbTxW
C0OeZB4BAAAAPQAAAEQCAAAAAGwAAAAAAAEAAgAC//wBAAAAB0FBQUFBQUH8AgAAAAdCQkJCQkJC
uh3fmQ==
'/*!*/;
### INSERT INTO `test`.`t1`
### SET
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
### @2='AAAAAAA' /* VARSTRING(10) meta=10 nullable=1 is_null=0 */
### INSERT INTO `test`.`t1`
### SET
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
### @2='BBBBBBB' /* VARSTRING(10) meta=10 nullable=1 is_null=0 */
# at 580
#230630 10:50:51 server id 1 end_log_pos 611 CRC32 0x8ee952db Xid = 3
COMMIT/*!*/;
# at 611
#230630 10:50:51 server id 1 end_log_pos 676 CRC32 0x5d2a5859 Anonymous_GTID last_committed=2 sequence_number=3 rbr_only=no
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 676
#230630 10:50:51 server id 1 end_log_pos 791 CRC32 0x929d7148 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1688093451/*!*/;
DROP TABLE `t1` /* generated by server */
/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
mysql> select GROUP_CONCAT(t.id) from sequence t;
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GROUP_CONCAT(t.id) |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 3000000000010000,3000000000010001,3000000000010002,3000000000010003,3000000000010004,3000000000010005,3000000000010006,3000000000010007,3000000000010008,3000000000010009,3000000000010010 |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
mysql> select id from tt union all select 2222 c1 from dual;
+------+
| id |
+------+
| 1111 |
| 2222 |
+------+
mysql> select id from tt union all select 2222 ;
+------+
| id |
+------+
| 1111 |
| 2222 |
+------+
-- PS:select 111( from dual) 出现位置非第一子句位置
group_concat
function in tianmu (#1852)完整的更新日志: https://gitee.com/StoneDB/stonedb/compare/5.7-v1.0.3-GA...5.7-v1.0.4-alpha
在 Oracle MySQL 团队的推动下,MySQL 8.0发生了巨大的变化和修改,代码进行了重构。8.0.0 在2016-09-12 发布, 重写了 5.7 中解析器的近 50% 的代码。MySQL 将编程语言都统一到 C++,编译器使用最新版本,代码风格采用 google C++ Style,统一了 300 人的开发团队的代码标准。
目前 MySQL 5.7 维护也渐渐进入尾声,8.0 成为市面上的主流,在此背景下, StoneDB 也对 tianmu 引擎做了适配 8.0 的升级,并推出 StoneDB-8.0 v1.0.1 beta 版本。
tianmu 引擎适配 8.0 (https://github.com/stoneatom/stonedb/milestone/4?closed=1)
lex->derived_tables
调整为 lex->unit->derived_table
asc
排序调整为 8.0 不设置默认排序方式。z4-1.9.4"
List<Item>
--->mem_root_deque<Item *>
SELECT_LEX_UNIT
->Query_expression
st_select_lex_unit
-> Query_expression
SELECT_LEX
->Query_block
first_select()
-> first_query_block()
StoneDB-5.7 v1.0.1 功能 backport: https://github.com/stoneatom/stonedb/milestone/10?closed=1
# 全局级别
mysql>set global sql_mode='NO_KEY_ERROR';
# 会话级别
mysql>set session sql_mode='NO_KEY_ERROR';
# my.cnf 配置文件
[mysqld]
sql_mode='NO_KEY_ERROR'
修复了如下 Bug:
Full Changelog: https://github.com/stoneatom/stonedb/compare/5.7-v1.0.2-GA...5.7-v1.0.3-GA
# 全局级别
mysql>set global sql_mode='NO_KEY_ERROR';
# 会话级别
mysql>set session sql_mode='NO_KEY_ERROR';
# my.cnf 配置文件
[mysqld]
sql_mode='NO_KEY_ERROR'
修复了如下 Bug:
Full Changelog: https://github.com/stoneatom/stonedb/compare/5.7-v1.0.2-GA...5.7-v1.0.3-beta
发布日期: 2023 年 01 月 15 日
# 全局级别
mysql>set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU';
# 会话级别
mysql>set session sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU';
# my.cnf 配置文件
[mysqld]
sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'
修复了如下 Bug:
使用快速部署StoneDB为MySQL的从库Shell脚本,默认 sql_mode 开启强制 Tianmu 引擎参数:MANDATORY_TIANMU。
mysql> show engines;
+----------------+---------+--------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+----------------+---------+--------------------------+--------------+------+------------+
| TIANMU | DEFAULT | Tianmu storage engine | YES | NO | NO |
+----------------+---------+--------------------------+--------------+------+------------+