AliSQL编译安装

简介:
1、下载AliSQL  

源码 https://github.com/alibaba/AliSQL 


2、linux编译

若安装MySQL则 rm /etc/my.cnf卸载,否则忽略
卸载已安装的mysql

yum remove mysql mysql-server mysql-libs compat-mysql51 //51为版本
rm –rf /var/lib/mysql
rm /etc/my.cnf
查看是否还存在mysql软件
rpm -qa|grep mysql
若存在,则继续
yum –y remove 查询到的软件名
一、编译安装AliSQL前的准备工作
1、编译源码所需的工具和库
yum install gcc gcc-c++ ncurses-devel perl 
2、安装cmake,或从https://cmake.org/download/下载所需版本
wget --no-check-certificate http://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz
tar -zxvf cmake-2.8.10.2.tar.gz
cd cmake-2.8.10.2
./bootstrap ; make ; make install
cd ../
3、安装bison,从http://ftp.gnu.org/gnu/bison/下载所需版本
wget http://ftp.gnu.org/gnu/bison/bison-2.7.tar.gz
tar -xvzf bison-2.7.tar.gz
cd bison-2.7
./configure
make && make install
cd ../
二、设置AliSQL用户和组
1、增加AliSQL用户和组
groupadd mysql
2、新增AliSQL用户
useradd -r -g mysql mysql
三、AliSQL所需目录
1、新建AliSQL安装目录
mkdir –p /usr/local/mysql
2、新建AliSQL数据库数据文件目录
mkdir -p /data/mysqldb
四、下载AliSQL源码并解压
从https://github.com/alibaba/AliSQL下载源码
解压unzip AliSQL-master.zip
cd AliSQL-master
五、编译安装AliSQL

1、设置编译参数

         cmake\
         -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \  
         -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \  
         -DDEFAULT_CHARSET=utf8 \  
         -DDEFAULT_COLLATION=utf8_general_ci \
         -DWITH_INNOBASE_STORAGE_ENGINE=1 \  
         -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ 
         -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
         -DMYSQL_DATADIR=/data/mysqldb \
         -DMYSQL_TCP_PORT=3306 \  
         -DENABLE_DOWNLOADS=1  
或者:
 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DDEFAULT_CHARSET=utf8   -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/data/mysqldb -DMYSQL_TCP_PORT=3306 -DENABLE_DOWNLOADS=1

注:重新运行配置,需要删除CMakeCache.txt文件

         rm CMakeCache.txt 

2、编译源码

make

3、安装

make install

六、修改AliSQL目录所有者和组

1、修改AliSQL安装目录

1)、cd  /usr/local/mysql
2)、chown -R mysql:mysql .

2、修改AliSQL数据库文件目录

1)、cd  /data/mysqldb
2)、chown -R mysql:mysql .

七、初始化AliSQL数据库

cd  /usr/local/mysql
scripts/mysql_install_db  --user=mysql  --datadir=/data/mysqldb

注:初始化数据库出现错误:

 FATAL ERROR:please install the following Perl modules before executingscripts/mysql_install_db:
 Data::Dumper
安装:autoconf库
命令:yum –y install autoconf  //此包安装时会安装Data::Dumper
再次执行初始化AliSQL数据库命令

八、复制AliSQL服务启动配置文件

cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf

注:如果/etc/my.cnf文件存在,则覆盖

九、复制AliSQL服务启动脚本及加入path路径

cp  support-files/mysql.server  /etc/init.d/mysqld
vim  /etc/profile
        PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
        export PATH
 source/etc/profile
十、系统在/usr/bin下面做链接
ln -s /usr/local/mysql/bin/mysql /usr/bin

十一、启动AliSQL服务并加入开机自启动(可选)

service mysqld start
chkconfig --level 35 mysqld on

十二、检查服务是否启动

netstat -tulnp | grep 3306
mysql -u root -p

防火墙设置参考http://www.ilkhome.cn/?post=156

给root账号授权,root账号使用123456从任何主机连接到mysql服务器mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

3.windows下VS2013编译

1、生成VS2013工程

windows下使用VS2013进行编译

mkdir build_msvc
cd build_msvc
cmake -DCMAKE_INSTALL_PREFIX=D:\AliSQL -G "Visual Studio 12 Win64" ..
执行cmake前需要安装好bison。
点击下载
2、编译安装

执行完成cmake后生成VS工程文件
使用VS2013 开发人员命令提示进入build_msvc目录,执行下面命令进行编译

msbuild ALL_BUILD.vcxproj   # 编译
msbuild INSTALL.vcxproj     # 安装
可以在后面添加/p:Configuration="Release"参数来指定编译release版本。因为文件比较多,可以使用/maxcpucount:8来指定使用的CPU核心数,并行编译。

3、使用

安装后在安装目录下建立my.ini文件,具体写法可以百度。
新建一个start.bat

::
START bin\mysqld --standalone --console
双击start.bat启动即可。

4、编译错误解决

错误1:alisql\sql\binlog.h(236): error C2065: “asm”: 未声明的标识符

定位到错误代码

#define barrier() __asm volatile("" ::: "memory")
这个宏是GCC下做编译屏障的宏,VS2013不支持(x64编译也不支持内联汇编),使用windows下的替代版本

#define barrier() MemoryBarrier()
具体的可以看MemoryBarrier macro
参考http://book.51cto.com/art/201504/474436.htm

错误2:alisql\storage\innobase\include\trx0trx.h(54): error C2146: 语法错误: 缺少“,”(在标识符“attribute”的前面)

因为__attribute__是gcc的扩展,所以VC不支持也很正常。
在trx0trx.h文件最前面添加#define __attribute__(...)即可。
类似的问题还出现在sql_connect.cc等文件中,可以将上面的宏添加到预编译指令中。

错误3:AliSQL\storage\innobase\handler\ha_innodb.cc(16222): error C2440: “初始化”: 无法从“ulint ”转换为“unsigned long ”

将ha_innodb.cc中的

static MYSQL_SYSVAR_ULONG(adaptive_hash_index_parts, btr_search_index_num,
  PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "Number of InnoDB adaptive hash index partitions", NULL, NULL, 8, 1, 512, 0);
修改为

static unsigned long& btr_search_index_num_ul = (unsigned long&)btr_search_index_num; static MYSQL_SYSVAR_ULONG(adaptive_hash_index_parts, btr_search_index_num_ul,
  PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "Number of InnoDB adaptive hash index partitions", NULL, NULL, 8, 1, 512, 0);
错误4:AliSQL\storage\innobase\read\read0read.cc(507): error C3861: “min”: 找不到标识符

将read0read.cc中代码(506-508行)

 if (view->n_descr > 0) {
        view->up_limit_id = min(view->up_limit_id, view->descriptors[0]);
    }
修改为

 if (view->n_descr > 0) {
        view->up_limit_id = (view->up_limit_id < view->descriptors[0])?
                            view->up_limit_id : view->descriptors[0];
    }
错误5:AliSQL\storage\innobase\read\read0read.cc(603): error C2664: “lint win_xchg_and_add(volatile lint ,lint)”: 无法将参数 1 从“ulint ”转换为“volatile lint *”

将read0read.cc中代码(601-604行)

 os_atomic_decrement_lint(&srv_read_views_memory, sizeof(read_view_t) +
                 view->max_descr * sizeof(trx_id_t));
修改为

 os_atomic_decrement_lint((volatile lint*)&srv_read_views_memory,
                 sizeof(read_view_t) +
                 view->max_descr * sizeof(trx_id_t));
这样的错误还有几个,都是做这样的修改即可。

错误6:AliSQL\sql\sql_filter.cc(134): error C3861: “__sync_add_and_fetch”: 找不到标识符
这样的错误有多个

4>E:\AliSQL\sql\sql_filter.cc(134): error C3861: “__sync_add_and_fetch”:  找不到标识符 4>E:\AliSQL\sql\sql_filter.cc(356): error C3861: “__sync_add_and_fetch”:  找不到标识符 4>E:\AliSQL\sql\sql_filter.cc(362): error C3861: “__sync_bool_compare_and_swap”:  找不到标识符 4>E:\AliSQL\sql\sql_filter.cc(455): error C3861: “__sync_sub_and_fetch”:  找不到标识符
这是gcc提供的built-in函数,用于提供加减和逻辑运算的原子操作。参考http://www.cnblogs.com/FrankTan/archive/2010/12/11/1903377.html
可以对应VC下的Interlocked函数族。
参考http://jishublog.iteye.com/blog/1898518
https://technet.microsoft.com/zh-cn/library/ms683504
带Exchange的函数返回的是更新前的值,不带的返回更新后的值。

所以这里可以在sql_filter.h(多个文件中都需要用到)文件头部添加如下宏定义来实现替换

 // 返回更新前的值 #define __sync_fetch_and_add(ptr,value, ...)    InterlockedExchangeAdd64((LONG64 volatile *)ptr,value) #define __sync_fetch_and_sub(ptr, value, ...)   InterlockedExchangeAdd64((LONG64 volatile *)ptr,-value) #define __sync_fetch_and_or(ptr, value, ...) #define __sync_fetch_and_and(ptr, value, ...) #define __sync_fetch_and_xor(ptr, value, ...) #define __sync_fetch_and_nand(ptr, value, ...) // 返回更新后的值 #define __sync_add_and_fetch(ptr, value, ...)   InterlockedAdd64((LONG64 volatile *)ptr,value) #define __sync_sub_and_fetch(ptr, value, ...)   InterlockedAdd64((LONG64 volatile *)ptr,-value) #define __sync_or_and_fetch(ptr, value, ...) #define __sync_and_and_fetch(ptr, value, ...) #define __sync_xor_and_fetch(ptr, value, ...) #define __sync_nand_and_fetch(ptr, value, ...) #define __sync_bool_compare_and_swap(ptr, oldval,newval, ...) InterlockedCompareExchange64(ptr,newval,oldval)
错误7:AliSQL\sql\sql_locale.cc(789): error C2146: 语法错误: 缺少“}”(在标识符“嗒忇喃嵿嗒苦”的前面)

这是因为VS对utf-8的支持不好(编译器支持不好),将其保存为带BOM标记的UTF-8编码即可。

错误8:AliSQL\sql\sql_show.cc(3896): error C2059: 语法错误:“(”

先看一下这一段代码

// Sends the global table stats back to the client. int fill_schema_table_stats(THD* thd, TABLE_LIST* tables, Item* __attribute__((unused))) {
  TABLE *table= tables->table;
  DBUG_ENTER("fill_schema_table_stats"); char *table_full_name, *table_schema;
  TABLE_SHARE *share; uint indx;
这里函数中出现了__attribute__((unused))这个东西,需要处理一下。
在文件sql_show.cc开头添加(在mysqld.cc中也需要)

#define __attribute__(...)
错误9:AliSQL\sql\sql_show.cc(3922): error C3861: “strsep”: 找不到标识符

这个函数在linux下是有的,windows下没有就使用下面的来替代

char *strsep(char **stringp, const char *delim) { char *s; const char *spanp; int c, sc; char *tok; if ((s = *stringp)== NULL) return (NULL); for (tok = s;;) {
        c = *s++;
        spanp = delim; do { if ((sc =*spanp++) == c) { if (c == 0)
                    s = NULL; else s[-1] = 0;
                *stringp = s; return (tok);
            }
        } while (sc != 0);
    } /* NOTREACHED */ }
错误10:C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets(170,5): error MSB6006: “cmd.exe”已退出,代码为 1。

因为编译ALL_BUILD工程完成后会去执行下面操作

Executing E:/AliSQL/build_msvc/sql/Debug/mysqld.exe --no-defaults --console --bootstrap --lc-messages-dir=E:/windows-software/AliSQL/build_msvc/sql/share --basedir=. --datadir=. --default-storage-engine=MyISAM --default-tmp-storage-engine=MyISAM --loose-skip-ndbcluster --max_allowed_packet=8M --net_buffer_length=16K
 

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
7月前
|
存储 SQL 关系型数据库
AI时代,当 MySQL 遇见列式存储引擎 DuckDB
在AI浪潮席卷全球的今天,有人认为关系型数据库已走向黄昏,MySQL 的生命力正在被边缘化。但事实真的如此吗?AliSQL,作为 MySQL 的重要分支,自2010年诞生以来,始终默默支撑着阿里巴巴集团核心业务的高并发、高可用需求。它从未消失,只是沉寂太久。 2026年,AliSQL社区的一帮开发者们,开始为AliSQL注入创新的血液!这是他们的第一篇,系统阐述了MySQL深度融合DuckDB的重大技术实践。这不仅是对“MySQL 只擅长 TP”这一行业共识的突破性回应,更是一次兼具工程魄力与架构远见的创新。
AI时代,当 MySQL 遇见列式存储引擎 DuckDB
|
AliSQL 关系型数据库 MySQL
AI时代,当 MySQL 遇见列式存储引擎 DuckDB
国内首场《2026 AliSQL Innovate 用户大会暨 AliSQL DuckDB 开源发布会》将于2月3日在杭州开启!席位有限,快来报名吧:https://page.aliyun.com/form/act1162737496/index.htm
AI时代,当 MySQL 遇见列式存储引擎 DuckDB
|
人工智能 编解码 芯片
告别低效沟通|让技术提问不再头疼-这套高效AI提问模板来帮你
不会向ai提问,不知道怎么提问的 可以看看
21487 1
告别低效沟通|让技术提问不再头疼-这套高效AI提问模板来帮你
|
11月前
|
Linux 虚拟化 iOS开发
macOS Sonoma 14.8 (23J21) Boot ISO 原版可引导镜像下载
macOS Sonoma 14.8 (23J21) Boot ISO 原版可引导镜像下载
9983 0
macOS Sonoma 14.8 (23J21) Boot ISO 原版可引导镜像下载
|
11月前
|
人工智能 API 数据安全/隐私保护
私有化部署Dify构建企业AI平台教程
在AI技术快速发展的当下,如何安全高效地将AI能力融入企业内部流程成为关键。Dify作为开源LLM应用开发平台,支持私有化部署,保障数据安全与模型隐私,助力企业快速搭建智能工作流。本文详解Dify部署步骤,并以智能IT工单分类为例,展示如何构建高效AI应用,适用于金融、政务、医疗等多领域,助力企业智能化转型。
|
SQL 缓存 监控
SqlRest让SQL秒变Http API,还支持20+数据库(含国产数据库)
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
小程序 开发者 UED
支付宝小程序UI/UX设计原则与最佳实践
支付宝小程序UI/UX设计原则与最佳实践
1020 6
|
存储 缓存 关系型数据库
MariaDB 和 GreatSQL 性能差异背后的真相
【10月更文挑战第22天】本文介绍了 MariaDB 和 GreatSQL 两款数据库系统的背景、性能差异因素及实际应用场景。MariaDB 是 MySQL 的分支,具有良好的社区支持和丰富的插件生态系统;GreatSQL 是国产的 MySQL 兼容数据库,专注于企业级应用场景。文章详细对比了两者的存储引擎优化、查询优化器差异、缓存机制和并发处理能力,并分析了它们在 OLTP 和 OLAP 场景中的性能表现。
839 3
|
存储 安全 前端开发
OAuth 2.0资源授权机制与安全风险分析
OAuth 2.0资源授权机制与安全风险分析
1066 1