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/profilePATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATHexport PATHsource/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
AliSQL编译安装相关推荐
- Alisql源码编译安装(详细篇)
前言 AliSQL 在 2016 云栖大会宣布开放源代码之后,迅速就获得了广泛的关注,目前(2016-10-27) star 数目已达 1187,欢迎访问 AliSQL GitHub 项目关注.社区反 ...
- Windows 10下编译安装Hadoop2.6
转自:https://www.linuxidc.com/Linux/2016-08/134131.htm Windows 10下安装Hadoop2.6,Windows10下编译64位Hadoop2.x ...
- 7 centos 源码安装samba_在CentOS7.6里编译安装PHP7.4(最新版),很详细
拿到一个空的服务器,首先我们就要来用起来啦! 首先要先下载并编译安装PHP最新版本,请到php官网下载: 这里我首先在系统里在新建存储源码包的文件夹,比如我存放在这里 下载安装PHP7.4之前,你要先 ...
- mysql8.0.12最小化安装_简述MySql8.0编译安装过程
[[email protected] ~]# cat /etc/redhat-release CentOS Linux release 8.0.1905 (Core) 注意:不要用8以下的系统编译My ...
- debian编译安装python_编译安装python2.7及相关模块(debian5.0.1)
基础环境说明及安装 当前系统 cat /etc/debian_version 5.0.1 因自带的python版本太旧 开发需要使用python2.7的版本 并需要paramiko Crypto My ...
- php编译7教程,PHP7 快速编译安装
PHP7正式版发布啦, 之前没有安装过的,都来安装试一试 . 即将发布的ThinkPHP5 在PHP7环境下也完全兼容, 佩服鸟哥把兼容性做得这么好 快速编译安装PHP7步骤: 第一步: 安装必要一些 ...
- linux mysql 5.6.22_LinuxCentOS6.0下编译安装MySQL5.6.22
Linux CentOS6.5下编译安装MySQL 5.6.22[给力详细教程] 一.编译安装MySQL前的准备工作 安装编译源码所需的工具和库(安装过程注意有没出错) yum install gcc ...
- 在CentOS 6.6 64bit上编译安装LLVM3.7,Clang,Libc++和libc++abi
一.简介 LLVM LLVM(之前称为低级虚拟机Low Level Virtual Machine)是一种非常强大的编译器基础架构框架,专门为使用您喜爱的编程语言编写的程序的编译时.链接时和运行时优化 ...
- 在Ubuntu 14.04 64bit上编译安装Crtmpserver trunk svn 811版本!
这里仅在 在Ubuntu 12.04 64bit上搭建Crtmpserver视频点播服务 基础上补充一下在Ubuntu 14.04上编译安装Crtmpserver的方法,以作备忘.因为Ubuntu 1 ...
- 在Ubuntu 14.04 64bit下编译安装rtmpdump并调试输出
2011年那会儿就开始研究rtmp, 但是后来很快又换了公司转作Android移动浏览器项目,就一直没有机会 继续进行下去.现在因为工作需要,我又重新捡使起来, 继续进行中断了几年的工作.下面记录下我 ...
最新文章
- BZOJ 2456 mode
- ubuntu sun-java6-jre_在 Ubuntu Lucid 下请回 Sun Java6 Jre, 赶走 OpenJDK
- 一些系统事件的手动触发方法
- workbench字符匹配错误_猪憨憨刷题笔记-LeetCode-10 正则表达式匹配
- 主流七款web服务器软件点评,几款比较好的WEB服务器软件推荐
- 太阳高度角/方位角计算公式
- 我看肖老师的《明日世界-云端计算下的程序设计需求》视频时,做的简单笔记
- SQL查询左连接、右连接、内连接
- 干碳纤维 湿碳纤维_纤维状网站故障不是一种选择
- datanucleus+spring 的JDO操作 select save update delete
- android 圆形渐变背景,android实现圆形渐变进度条
- 项目中身份证有效期的判断规则
- linux下敏感文件(账号密码)查找—内网渗透linux主机密码收集
- 如何利用计算机隐藏文件,如何查找隐藏的计算机文件夹
- slice,splice,split区别和作用
- 树莓派 linux 私有云,树莓派搭建私有云服务器
- html的视频字幕制作步骤,视频滚动字幕怎么制作(上)
- (简单)华为畅玩5C NEM-AL00的usb调试模式在哪里打开的教程
- 荐书丨《进化心理学》:刘耕宏、王心凌背后的魔力之谜
- 一会通一会不通 一台设备ping_局域网 一会ping的通,一会ping不通???