# greatsql **Repository Path**: zhangxianting/greatsql ## Basic Information - **Project Name**: greatsql - **Description**: GreatSQL - GreatSQL focuses on improving the reliability and performance of MGR, supports InnoDB parallel query and other features, and is a domestic MySQL version suitable for financial applications. It can be used as an optional replacement of MySQL or Percona Server. It is completely free and compatible with MySQL or Percona server. - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 17 - **Created**: 2024-06-20 - **Last Updated**: 2024-06-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 关于 GreatSQL --- GreatSQL数据库是一款**开源免费**数据库,可在普通硬件上满足金融级应用场景,具有**高可用**、**高性能**、**高兼容**、**高安全**等特性,可作为MySQL或Percona Server for MySQL的理想可选替换。 # 下载GreatSQL --- ## GreatSQL 8.0 - [GreatSQL 8.0.32-25](https://gitee.com/GreatSQL/GreatSQL/releases/GreatSQL-8.0.32-25) - [GreatSQL 8.0.32-24](https://gitee.com/GreatSQL/GreatSQL/releases/GreatSQL-8.0.32-24) - [GreatSQL 8.0.25-17](https://gitee.com/GreatSQL/GreatSQL/releases/GreatSQL-8.0.25-17) - [GreatSQL 8.0.25-16](https://gitee.com/GreatSQL/GreatSQL/releases/GreatSQL-8.0.25-16) - [GreatSQL 8.0.25-15](https://gitee.com/GreatSQL/GreatSQL/releases/GreatSQL-8.0.25-15) ## GreatSQL 5.7 - [GreatSQL 5.7.36](https://gitee.com/GreatSQL/GreatSQL/releases/GreatSQL-5.7.36-39) # GreatSQL核心特性 --- ## 1. 高可用 针对MGR进行了大量改进和提升工作,新增支持**地理标签**、**仲裁节点**、**读写节点可绑定动态IP**、**快速单主模式**、**智能选主**,并针对**流控算法**、**事务认证队列清理算法**、**节点加入&退出机制**、**recovery机制**等多项MGR底层工作机制算法进行深度优化,进一步提升优化了MGR的高可用保障及性能稳定性。 - 支持地理标签特性,提升多机房架构数据可靠性。 - 支持仲裁节点特性,用更低的服务器成本实现更高可用。 - 支持读写节点动态VIP特性,高可用切换更便捷。 - 支持快速单主模式,在单主模式下更快,性能更高。 - 支持智能选主特性,高可用切换选主机制更合理。 - 采用全新流控算法,使得事务更平稳,避免剧烈抖动。 - 优化了节点加入、退出时可能导致性能剧烈抖动的问题。 - 优化事务认证队列清理算法,高负载下不不复存在每60秒性能抖动问题。 - 解决了个别节点上磁盘空间爆满时导致MGR集群整体被阻塞的问题。 - 解决了长事务造成无法选主的问题。 - 修复了recovery过程中长时间等待的问题。 更多信息详见文档:[高可用](https://greatsql.cn/docs/8032-25/user-manual/5-enhance/5-2-ha.html)。 ## 2. 高性能 相对MySQL及Percona Server For MySQL的性能表现更稳定优异,支持**高性能的内存查询加速AP引擎**、**InnoDB并行查询**、**并行LOAD DATA**、**事务无锁化**、**线程池等**特性,在TPC-C测试中相对MySQL性能提升超过30%,在TPC-H测试中的性能表现是MySQL的十几倍甚至上百倍。 - 支持类似MySQL HeatWave的大规模并行、高性能的内存查询加速AP引擎,可将GreatSQL的数据分析性能提升几个数量级。 - 支持InnoDB并行查询,适用于轻量级OLAP应用场景,在TPC-H测试中平均提升15倍,最高提升40+倍。 - 优化InnoDB事务系统,实现了大锁拆分及无锁化等多种优化方案,OLTP场景整体性能提升约20%。 - 支持并行LOAD DATA,适用于频繁导入大批量数据的应用场景,性能可提升约20+倍。 - 支持线程池(Threadpool),降低了线程创建和销毁的代价,保证高并发下,性能稳定不会明显衰退。 更多信息详见文档:[高性能](https://greatsql.cn/docs/8032-25/user-manual/5-enhance/5-1-highperf.html)。 ## 3. 高兼容 支持大多数常见Oracle用法,包括数据类型、函数、SQL语法、存储程序等兼容性用法。 更多信息详见文档:[高兼容](https://greatsql.cn/docs/8032-25/user-manual/5-enhance/5-3-easyuse.html)。 ## 4. 高安全 支持逻辑备份加密、CLONE备份加密、审计日志入表、表空间国密加密等多个安全提升特性,进一步保障业务数据安全,更适用于金融级应用场景。 更多信息详见文档:[高安全](https://greatsql.cn/docs/8032-25/user-manual/5-enhance/5-4-security.html)。 ## 注意事项 --- 推荐采用jemalloc库(推荐5.2.1+版本)来代替glibc中默认的内存管理分配器,是一个能够快速分配/回收内存,减少内存碎片,对多核友好,具有可伸缩性的内存分配器。为更好的支持多核内存分配的需要,jemalloc首次在FreeBSD中引入,而后被facebook发扬光大,成为了业界流行的内存分配解决方案之一。 先安装 ``` yum -y install jemalloc jemalloc-devel ``` 也可以把自行安装的lib库so文件路径加到系统配置文件中,例如: ``` [root@greatdb]# cat /etc/ld.so.conf /usr/local/lib64/ ``` 而后执行下面的操作加载libjemalloc库,并确认是否已存在 ``` [root@greatdb]# ldconfig [root@greatdb]# ldconfig -p | grep libjemalloc libjemalloc.so.2 (libc6,x86-64) => /usr/lib64/libjemalloc.so.2 libjemalloc.so (libc6,x86-64) => /usr/lib64/libjemalloc.so ``` ## 安装GreatSQL 执行下面的命令安装GreatSQL ``` #首先,查找GreatSQL $ yum search GreatSQL ... greatsql-client.x86_64 : GreatSQL - Client greatsql-devel.x86_64 : GreatSQL - Development header files and libraries greatsql-icu-data-files.x86_64 : GreatSQL packaging of ICU data files greatsql-mysql-config.x86_64 : GreatSQL config greatsql-mysql-router.x86_64 : GreatSQL MySQL Router greatsql-server.x86_64 : GreatSQL: a high performance, highly reliable, easy to use, and high security database that can be used to replace : MySQL or Percona Server. greatsql-shared.x86_64 : GreatSQL - Shared libraries greatsql-test.x86_64 : Test suite for the GreatSQL #然后安装 $ yum install -y greatsql-client greatsql-devel greatsql-icu-data-files greatsql-server greatsql-shared ``` 安装完成后,GreatSQL会自行完成初始化,可以再检查是否已加入系统服务或已启动: ``` $ systemctl status mysqld ● mysqld.service - MySQL Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) ... Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Process: 1137698 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS) Main PID: 1137732 (mysqld) Status: "Server is operational" Tasks: 39 (limit: 149064) Memory: 336.7M CGroup: /system.slice/mysqld.service └─1137732 /usr/sbin/mysqld ... ``` ## my.cnf参考 RPM方式安装后的GreatSQL默认配置不是太合理,建议参考下面这份my.cnf文档: - [my.cnf for GreatSQL 8.0.32-25](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/my.cnf-example-greatsql-8.0.32-25) 调整文档中关于`datadir`目录配置等相关选项,默认 `datadir=/var/lib/mysql` 通常都会改掉,例如替换成 `datadir=/data/GreatSQL`,修改完后保存退出, 替换原来的 `/etc/my.cnf`,然后重启GreatSQL,会重新进行初始化。 ``` # 新建 /data/GreatSQL 空目录,并修改目录所有者 $ mkdir -p /data/GreatSQL $ chown -R mysql:mysql /data/GreatSQL # 重启mysqld服务,即自行完成重新初始化 $ systemctl restart mysqld ``` ## 登入GreatSQL 首次登入GreatSQL前,需要先找到初始化时随机生成的root密码: ``` $ grep root /data/GreatSQL/error.log [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: dt_)MtExl594 ``` 其中的 **dt_)MtExl594** 就是初始化时随机生成的密码,在登入GreatSQL时输入该密码: ``` $ mysql -uroot -p'dt_)MtExl594' mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.32-25 Copyright (c) 2021-2021 GreatDB Software Co., Ltd Copyright (c) 2009-2021 Percona LLC and/or its affiliates Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> \s ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. mysql> ``` 首次登入立刻提醒该密码已过期,需要修改,执行类似下面的命令修改即可: ``` mysql> ALTER USER USER() IDENTIFIED BY 'GreatSQL-8032~%'; Query OK, 0 rows affected (0.02 sec) ``` 之后就可以用这个新密码再次登入GreatSQL了。 ## 创建新用户、测试库&表,及写入数据 修改完root密码后,应尽快创建普通用户,用于数据库的日常使用,减少超级用户root的使用频率,避免误操作意外删除重要数据。 ``` #创建一个新用户GreatSQL,只允许从192.168.0.0/16网络连入,密码是 GreatSQL-2024 mysql> CREATE USER GreatSQL@'192.168.0.0/16' IDENTIFIED BY 'GreatSQL-2024'; Query OK, 0 rows affected (0.06 sec) #创建一个新的用户库,并对GreatSQL用户授予读写权限 mysql> CREATE DATABASE GreatSQL; Query OK, 1 row affected (0.03 sec) mysql> GRANT ALL ON GreatSQL.* TO GreatSQL@'192.168.0.0/16'; Query OK, 0 rows affected (0.03 sec) ``` 切换到普通用户GreatSQL登入,创建测试表,写入数据: ``` $ mysql -h192.168.1.10 -uGreatSQL -p'GreatSQL-2024' ... # 切换到GreatSQL数据库下 mysql> use GreatSQL; Database changed # 创建新表 mysql> CREATE TABLE t1(id INT PRIMARY KEY); Query OK, 0 rows affected (0.07 sec) # 写入测试数据 mysql> INSERT INTO t1 SELECT RAND()*1024; Query OK, 1 row affected (0.05 sec) Records: 1 Duplicates: 0 Warnings: 0 # 查询数据 mysql> SELECT * FROM t1; +-----+ | id | +-----+ | 203 | +-----+ 1 row in set (0.00 sec) ``` 成功。 ## 版本历史 --- ### GreatSQL 8.0 - [Changes in GreatSQL 8.0.32-25 (2023-12-28)](https://greatsql.cn/docs/8032-25/user-manual/1-docs-intro/relnotes/changes-greatsql-8-0-32-25-20231228.md) - [Changes in GreatSQL 8.0.32-24 (2023-6-5)](https://greatsql.cn/docs/8032-25/user-manual/1-docs-intro/relnotes/changes-greatsql-8-0-32-24-20230605.md) - [Changes in GreatSQL 8.0.25-17 (2023-3-13)](https://greatsql.cn/docs/8032-25/user-manual/1-docs-intro/relnotes/changes-greatsql-8-0-25-17-20230313.md) - [Changes in GreatSQL 8.0.25-16 (2022-5-16)](https://greatsql.cn/docs/8032-25/user-manual/1-docs-intro/relnotes/changes-greatsql-8-0-25-16-20220516.md) - [Changes in GreatSQL 8.0.25-15 (2021-8-26)](https://greatsql.cn/docs/8032-25/user-manual/1-docs-intro/relnotes/changes-greatsql-8-0-25-20210820.md) ### GreatSQL 5.7 - [Changes in GreatSQL 5.7.36-39 (2022-4-7)](https://greatsql.cn/docs/8032-25/user-manual/1-docs-intro/relnotes/changes-greatsql-5-7-36-20220407.md) ## MTR回归测试 GreatSQL已经在openEuler 20.03 (LTS-SP2) 环境下通过MTR回归测试,表明GreatSQL与openEuler开源操作系统完全兼容,功能齐全,测试完备。 相关MTR测试报告详见:[GreatSQL 8.0.25-16通过MTR回归测试](https://gitee.com/src-openeuler/greatsql/blob/master/greatsql-802516-mtr-passed.md)。 ## 更多使用文档 --- - [GreatSQL MGR FAQ](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/GreatSQL-FAQ.md) - [在Linux下源码编译安装GreatSQL](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/build-greatsql-with-source.md) - [在openEuler环境下快速编译GreatSQL RPM包](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/build-greatsql-rpm-under-openeuler.md) - [利用Ansible安装GreatSQL并构建MGR集群](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/install-greatsql-with-ansible.md) - [在Docker中部署GreatSQL并构建MGR集群](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/install-greatsql-with-docker.md) - [利用GreatSQL部署MGR集群](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/using-greatsql-to-build-mgr-and-node-manage.md) - [MySQL InnoDB Cluster+GreatSQL部署MGR集群](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/mysql-innodb-cluster-with-greatsql.md) - [利用systemd管理MySQL单机多实例](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/build-multi-instance-with-systemd.md) ## 专栏文章 - [深入浅出MGR专栏文章](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/deep-dive-mgr),深入浅出MGR相关知识点、运维管理实操,配合「实战MGR」视频内容食用更佳。 ## 相关资源 - [GreatSQL用户手册](https://gitee.com/GreatSQL/GreatSQL-Manual),最新版本GreatSQL用户手册 - [GreatSQL-Docker](https://gitee.com/GreatSQL/GreatSQL-Docker),在Docker中运行GreatSQL - [GreatSQL-Ansible](https://gitee.com/GreatSQL/GreatSQL-Ansible),利用Ansible一键安装GreatSQL并完成MGR集群部署 ## GreatSQL vs MySQL 下面是GreatSQL 和 MySQL社区版本的对比表格: | **1.主要特性** | GreatSQL 8.0.32-25 | MySQL 8.0.32 | | :--- | :---: | :---: | | 开源 | :heavy_check_mark: | :heavy_check_mark: | |ACID完整性| :heavy_check_mark: | :heavy_check_mark: | |MVCC特性| :heavy_check_mark: | :heavy_check_mark: | |支持行锁| :heavy_check_mark: | :heavy_check_mark: | |Crash自动修复| :heavy_check_mark: | :heavy_check_mark: | |表分区(Partitioning)| :heavy_check_mark: | :heavy_check_mark: | |视图(Views)| :heavy_check_mark: | :heavy_check_mark: | |子查询(Subqueries)| :heavy_check_mark: | :heavy_check_mark: | |触发器(Triggers)| :heavy_check_mark: | :heavy_check_mark: | |存储程序(Stored Programs)| :heavy_check_mark: | :heavy_check_mark: | |外键(Foreign Keys)| :heavy_check_mark: | :heavy_check_mark: | |窗口函数(Window Functions)| :heavy_check_mark: | :heavy_check_mark: | |通用表表达式CTE| :heavy_check_mark: | :heavy_check_mark: | |地理信息(GIS)| :heavy_check_mark: | :heavy_check_mark: | |基于GTID的复制| :heavy_check_mark: | :heavy_check_mark: | |组复制(MGR)| :heavy_check_mark: | :heavy_check_mark: | |MyRocks引擎| :heavy_check_mark: | | | **2. 性能提升扩展** | GreatSQL 8.0.32-25 | MySQL 8.0.32 | |AP引擎| :heavy_check_mark: | 仅云上HeatWave | |InnODB并行查询| :heavy_check_mark: | 仅主键扫描 | |并行LOAD DATA| :heavy_check_mark: | ❌ | |InnoDB事务ReadView无锁优化| :heavy_check_mark: | ❌ | |InnoDB事务大锁拆分优化| :heavy_check_mark: | ❌ | |InnoDB资源组| :heavy_check_mark: | :heavy_check_mark: | |自定义InnoDB页大小| :heavy_check_mark: | :heavy_check_mark: | |Contention-Aware Transaction Scheduling| :heavy_check_mark: | :heavy_check_mark: | |InnoDB Mutexes拆分优化| :heavy_check_mark: | ❌ | |MEMORY引擎优化| :heavy_check_mark: | ❌ | |InnoDB Flushing优化| :heavy_check_mark: | ❌ | |并行Doublewrite Buffer| :heavy_check_mark: | :heavy_check_mark: | |InnoDB快速索引创建优化| :heavy_check_mark: | ❌ | |VARCHAR/BLOB/JSON类型存储单列压缩| :heavy_check_mark: | ❌ | |数据字典中存储单列压缩信息| :heavy_check_mark: | ❌ | | **3. 面向开发者提升改进** | GreatSQL 8.0.32-25 | MySQL 8.0.32 | |X API| :heavy_check_mark: | :heavy_check_mark: | |JSON| :heavy_check_mark: | :heavy_check_mark: | |NoSQL Socket-Level接口| :heavy_check_mark: | :heavy_check_mark: | |InnoDB全文搜索改进| :heavy_check_mark: | ❌ | |更多Hash/Digest函数| :heavy_check_mark: | ❌ | |Oracle兼容-数据类型| :heavy_check_mark: | ❌ | |Oracle兼容-函数| :heavy_check_mark: | ❌ | |Oracle兼容-SQL语法| :heavy_check_mark: | ❌ | |Oracle兼容-存储程序| :heavy_check_mark: | ❌ | | **4. 基础特性提升改进** | GreatSQL 8.0.32-25 | MySQL 8.0.32 | |MGR提升-地理标签| :heavy_check_mark: | ❌ | |MGR提升-仲裁节点| :heavy_check_mark: | ❌ | |MGR提升-读写节点绑定VIP| :heavy_check_mark: | ❌ | |MGR提升-快速单主模式| :heavy_check_mark: | ❌ | |MGR提升-智能选主机制| :heavy_check_mark: | ❌ | |MGR提升-全新流控算法| :heavy_check_mark: | ❌ | |information_schema表数量|95|65| |全局性能和状态指标|853|434| |优化器直方图(Histograms)| :heavy_check_mark: | :heavy_check_mark: | |Per-Table性能指标| :heavy_check_mark: | ❌ | |Per-Index性能指标| :heavy_check_mark: | ❌ | |Per-User性能指标| :heavy_check_mark: | ❌ | |Per-Client性能指标| :heavy_check_mark: | ❌ | |Per-Thread性能指标| :heavy_check_mark: | ❌ | |全局查询相应耗时统计| :heavy_check_mark: | ❌ | |SHOW INNODB ENGINE STATUS增强| :heavy_check_mark: | ❌ | |回滚段信息增强| :heavy_check_mark: | ❌ | |临时表信息增强| :heavy_check_mark: | ❌ | |用户统计信息增强| :heavy_check_mark: | ❌ | |Slow log信息增强| :heavy_check_mark: | ❌ | | **5.安全性提升** | GreatSQL 8.0.32-25 | MySQL 8.0.32 | |国密支持| :heavy_check_mark: | ❌ | |备份加密| :heavy_check_mark: | ❌ | |审计日志入库| :heavy_check_mark: | ❌ | |SQL Roles| :heavy_check_mark: | :heavy_check_mark: | |SHA-2密码Hashing| :heavy_check_mark: | :heavy_check_mark: | |密码轮换策略| :heavy_check_mark: | :heavy_check_mark: | |PAM认证插件| :heavy_check_mark: | 仅企业版 | |审计插件| :heavy_check_mark: | 仅企业版 | |Keyring存储在文件中| :heavy_check_mark: | :heavy_check_mark: | |Keyring存储在Hashicorp Vault中| :heavy_check_mark: | 仅企业版 | |InnoDB数据加密| :heavy_check_mark: | :heavy_check_mark: | |InnoDB日志加密| :heavy_check_mark: | :heavy_check_mark: | |InnoDB各种表空间文件加密| :heavy_check_mark: | :heavy_check_mark: | |二进制日志加密| :heavy_check_mark: | ❌ | |临时文件加密| :heavy_check_mark: | ❌ | |强制加密| :heavy_check_mark: | ❌ | | **6. 运维便利性提升** | GreatSQL 8.0.32-25 | MySQL 8.0.32 | |DDL原子性| :heavy_check_mark: | :heavy_check_mark: | |数据字典存储InnoDB表| :heavy_check_mark: | :heavy_check_mark: | |快速DDL| :heavy_check_mark: | :heavy_check_mark: | |SET PERSIST| :heavy_check_mark: | :heavy_check_mark: | |不可见索引| :heavy_check_mark: | :heavy_check_mark: | |线程池(Threadpool)| :heavy_check_mark: | 仅企业版 | |备份锁| :heavy_check_mark: | ❌ | |SHOW GRANTS扩展| :heavy_check_mark: | ❌ | |表损坏动作扩展| :heavy_check_mark: | ❌ | |杀掉不活跃事务| :heavy_check_mark: | ❌ | |START TRANSACTION WITH CONSISTENT SNAPSHOT扩展| :heavy_check_mark: | ❌ | 此外,GreatSQL 8.0.32-25基于Percona Server for MySQL 8.0.32版本,它在MySQL 8.0.32基础上做了大量的改进和提升以及众多新特性,详情请见:[**Percona Server for MySQL feature comparison**](https://docs.percona.com/percona-server/8.0/feature-comparison.html),这其中包括线程池、审计、数据脱敏等MySQL企业版才有的特性,以及performance_schema提升、information_schema提升、性能和可扩展性提升、用户统计增强、PROCESSLIST增强、Slow log增强等大量改进和提升,这里不一一重复列出。 GreatSQL同时也是gitee(码云)平台上的GVP项目,详见:[https://gitee.com/gvp/database-related](https://gitee.com/gvp/database-related) **数据库相关**类目。 ## 问题反馈 --- - [问题反馈 gitee](https://gitee.com/GreatSQL/GreatSQL-Doc/issues) ## 联系我们 --- 扫码关注微信公众号 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0802/141935_2ea2c196_8779455.jpeg "greatsql社区-wx-qrcode-0.5m.jpg")