1.MySQL:å¦ä½ç¼åUDF_MySQL
2.64位系统上源码编译32位libcurl库
3.webRTC服务器搭建(基于Janus)与Demo运行
4.MySQL源码下载及安装步骤mysql下载源码
5.ubuntu php 如何安装 curl
6.curlålibcurlçåºå«ç®ä»
MySQL:å¦ä½ç¼åUDF_MySQL
bitsCN.com
1.ä»ä¹æ¯UDF
UDF顾åæä¹ï¼å°±æ¯User defined Functionï¼ç¨æ·å®ä¹å½æ°ãæ们ç¥éï¼MySQLæ¬èº«æ¯æå¾å¤å 建çå½æ°ï¼æ¤å¤è¿å¯ä»¥éè¿å建åå¨æ¹æ³æ¥å®ä¹å½æ°ãUDF为ç¨æ·æä¾äºä¸ç§æ´é«æçæ¹å¼æ¥å建å½æ°ã
UDFä¸æ®éå½æ°ç±»ä¼¼ï¼æåæ°ï¼ä¹æè¾åºãå为两ç§ç±»åï¼å次è°ç¨ååèéå½æ°ãåè è½å¤é对æ¯ä¸è¡æ°æ®è¿è¡å¤çï¼åè åç¨äºå¤çGroup Byè¿æ ·çæ åµã
2.为ä»ä¹ç¨UDF
æ¢ç¶MySQLæ¬èº«æä¾äºå¤§éçå½æ°ï¼å¹¶ä¸ä¹æ¯æå®ä¹å½æ°ï¼ä¸ºä»ä¹æ们è¿éè¦UDFå¢ï¼è¿ä¸»è¦åºäºä»¥ä¸å ç¹ï¼
1)UDFçå ¼å®¹æ§å¾å¥½ï¼è¿å¾çäºMySQLçUDFåºæ¬ä¸æ²¡æåå¨
2)æ¯åå¨æ¹æ³å ·ææ´é«çæ§è¡æçï¼å¹¶æ¯æèéå½æ°
3)ç¸æ¯ä¿®æ¹ä»£ç å¢å å½æ°ï¼æ´å æ¹ä¾¿ç®å
å½ç¶UDFä¹æ¯æ缺ç¹çï¼è¿æ¯å 为UDFä¹å¤äºmysqldçå å空é´ä¸ï¼ä¸è°¨æ çå å使ç¨å¾å®¹æ导è´mysqld crashæã
3.å¦ä½ç¼åUDF
UDFçAPIå æ¬
name_init()ï¼
å¨æ§è¡SQLä¹åä¼è¢«è°ç¨ï¼ä¸»è¦åä¸äºåå§åçå·¥ä½ï¼æ¯å¦åé åç»ç¨å°çå åãåå§ååéãæ£æ¥åæ°æ¯å¦åæ³çã
name_deinit()
å¨æ§è¡å®SQLåè°ç¨ï¼å¤§å¤ç¨äºå åæ¸ ççå·¥ä½ãinitådeinitè¿ä¸¤ä¸ªå½æ°é½æ¯å¯éç
name()
UDFç主è¦å¤çå½æ°ï¼å½ä¸ºå次è°ç¨åæ¶ï¼å¯ä»¥å¤çæ¯ä¸è¡çæ°æ®ï¼å½ä¸ºèéå½æ°æ¶ï¼åè¿åGroup byåçèéç»æã
name_add()
å¨æ¯ä¸ªåç»ä¸æ¯è¡è°ç¨
name_clear()
å¨æ¯ä¸ªåç»ä¹åè°ç¨
为äºä¾¿äºç解ï¼è¿éç»åºä¸¤ç§UDFç±»åçAPIè°ç¨å¾ï¼
ä¸é¢å°å°±ä¸è¿°å 个APIè¿è¡è¯¦ç»ç讲解ï¼
1). name_init
ååï¼
my_boolname_init(UDF_INIT *initid,码下 UDF_ARGS *args, char *message)
UDF_INITç»æä½å¦ä¸ï¼
å段
ç±»å
æè¿°
maybe_null
my_bool
å¦æ为1表示该UDFå¯ä»¥è¿åNULL
decimals
unsigned int
è¿åå¼ä¸ºå®æ°æ¶ï¼è¡¨ç¤ºç²¾åº¦ï¼èå´0~
max_length
unsigned long
对äºè¿åå¼ä¸ºINTEGERç±»åå¼ä¸ºï¼å¯¹äºREALç±»åå¼ä¸ºï¼å¯¹äºå符串类åï¼åå¨å½æ°æé¿åæ°çé¿åº¦
ptr
char
*é¢å¤çæéï¼æ们å¯ä»¥å¨è¿éåé å åãéè¿initdä¼ éç»å ¶ä»API
const_item
my_bool
为1表示å½æ°æ»æ¯è¿åç¸åçå¼
extension
void
*ç¨äºæ©å±ï¼
UDF_ARGSç»æä½å¦ä¸ï¼
å段
ç±»å
æè¿°
arg_count
unsigned int
åæ°ä¸ªæ°
arg_type
enum Item_result
*åæ°ç±»åæ°ç»ï¼è®°å½æ¯ä¸ä¸ªåæ°çç±»åï¼å¯ä»¥æ¯STRING_RESULTãREAL_RESULTãINT_RESULT以åDECIMAL_RESULT
args
char
**åæ ·æ¯ä¸ä¸ªæ°ç»ï¼ç¨äºåå¨å®é æ°æ®ã
STRING_RESULTä¸DECIMAL_RESULTç±»å为char*ï¼INT_RESULTç±»å为long long*ï¼REAL_RESULTç±»å为double*ï¼æè ä¸ä¸ªNULLæé
lengths
unsigned long
*æ°ç»ï¼ç¨äºåå¨æ¯ä¸ä¸ªåæ°çé¿åº¦
maybe_null
char
*该æ°ç»ç¨äºè¡¨ææ¯ä¸ªåæ°æ¯å¦å¯ä»¥ä¸ºNULLï¼ä¾å¦
attributes
char
**æ¯ä¸ªåæ°çåå
attribute_lengths
unsigned long
*æ¯ä¸ªåæ°ååçé¿åº¦
extension
void
*ç¨äºæ©å±ï¼
Messageï¼ç¨äºæå°é误信æ¯ï¼è¯¥æéæ¬èº«æä¾é¿åº¦ä¸ºMYSQL_ERRMSG_SIZEï¼æ¥åå¨ä¿¡æ¯ï¼
2).name_deinit
ååï¼
void name_deinit(UDF_INIT*initid)
该å½æ°ä¼è¿è¡ä¸äºå åéæ¾åæ¸ ççå·¥ä½ï¼å¨ä¹åæ们æå°initid->ptrï¼æ们å¯ä»¥å¨è¯¥åºå·è¿è¡å åçå¨æåé ï¼è¿éå°±å¯ä»¥ç´æ¥è¿è¡å åéæ¾ã
3).name()
ååï¼é对ä¸åçè¿åå¼ç±»åï¼æä¸åçå½æ°ååï¼
è¿åå¼ç±»å
å½æ°åå
STRING or DECIMAL
char *name(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error)
INTEGER
long long name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)
REAL
double name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
å½è¿åå¼ä¸ºSTRINGç±»åæ¶ï¼åæ°resultå¼è¾ä¸ä¸ªbufferæ¥åå¨è¿åå¼ï¼ä½ä¸è¶ è¿åèï¼å¨lengthåæ°ä¸åå¨äºå符串çé¿åº¦ã
æ¯ä¸ªå½æ°ååè¿å æ¬äºis_nullåerroråæ°ï¼å½*is_null被设置为1æ¶ï¼è¿åå¼ä¸ºNULLï¼è®¾ç½®*error为1ï¼è¡¨æåçäºé误ã
4).name_add()åname_clear()
ååï¼
void name_add(UDF_INIT *initid, UDF_ARGS *args, char *is_null,char *error)
void name_clear(UDF_INIT *initid, char *is_null, char *error)
对äºèåç±»åçUDFï¼name_adddåname_clearä¼è¢«åå¤è°ç¨ã
4. 两个ä¾å
ä¸é¢å°ä¸¾ä¸¤ä¸ªç®åçä¾åï¼ä¸ä¸ªå次è°ç¨åå½æ°ï¼ä¸ä¸ªèéç±»åå½æ°ï¼æ¥æè¿°åä¸ä¸ªUDFçè¿ç¨ã
1)æ¥åä¸ä¸ªåæ°ï¼å¹¶è¿å该åæ°çå¼
//åå§å
my_booludf_int_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
{
if (args->arg_count != 1){ //æ£æ¥åæ°ä¸ªæ°
strcpy(message,
"udf_intexample() can onlyaccept one argument");
return 1;
}
if (args->arg_type[0] != INT_RESULT){ //æ£æ¥åæ°ç±»å
strcpy(message,
"udf_intexample() argumenthas to be an integer");
return 1;
}
return 0;
}
//æ¸ çæä½
voidudf_int_deinit(UDF_INIT *initid)
{
}
//主å½æ°
long long udf_int(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)
{
long long num = (*(long long *)args->args[0]); //è·å第ä¸ä¸ªåæ°å¼
return num;
}
2)æ¥åä¸ä¸ªæµ®ç¹æ°ç±»åçåæ°ï¼å¹¶å¯¹æ¯ä¸ªåç»è¿è¡æ±å
//åå§å
my_booludf_floatsum_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
{
double *total = (double *) malloc (sizeof(double));
if (total == NULL){ //å ååé 失败
strcpy(message,"udf_floatsum:alloc mem failed!");
return 1;
}
*total = 0;
initid->ptr = (char *)total;
if (args->arg_count != 1){ //æ£æ¥åæ°ä¸ªæ°
strcpy(message, "too moreargs,only one!");
return 1;
}
if (args->arg_type[0] != REAL_RESULT){ //æ£æ¥åæ°ç±»å
strcpy(message, "wrongtype");
return 1;
}
initid->decimals = 3; //设置è¿åå¼ç²¾åº¦
return 0;
}
//æ¸ çãéæ¾å¨initå½æ°ä¸åé çå å
voidudf_floatsum_deinit(UDF_INIT *initid)
{
free(initid->ptr);
}
//æ¯ä¸è¡é½ä¼è°ç¨å°è¯¥å½æ°
voidudf_floatsum_add(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)
{
double* float_total;
float_total = (double*)initid->ptr;
if (args->args[0])
*float_total += *(double*)args->args[0];
}
//æ¯ä¸ªåç»å®æåï¼è¿åç»æ
doubleudf_floatsum(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)
{
double* float_total;
float_total = (double *)initid->ptr;
return *float_total;
}
//å¨è¿è¡ä¸ä¸ä¸ªåç»åè°ç¨ï¼è®¾ç½®initid->ptræåçå¼ä¸º0ï¼ä»¥ä¾¿ä¸ä¸æ¬¡åç»ç»è®¡
voidudf_floatsum_clear(UDF_INIT *initid, char *is_null, char *error)
{
double *float_total;
float_total = (double *)initid->ptr;
*float_total = 0;
}
3) Mysql-udf-/statuses/user_timeline/.json?count=1&source=')
UDFå ·æé常é«çèªç±åº¦ï¼ä½ å¯ä»¥ç¼åä½ ä»»ä½æ³è¦å®ç°çåè½å½æ°ï¼çè³å¯ä»¥å¼ç¨MySQLå æ ¸ç代ç ååéã
å½ç¶ï¼UDFä¹æçå±éæ§ï¼å¦ä¸ï¼
a) å¨mysqlåºä¸å¿ é¡»æfunc表ï¼å¹¶ä¸å¨‑‑skip‑grant‑tableså¼å¯çæ åµä¸ï¼UDFä¼è¢«ç¦æ¢ï¼
b) å½UDFæææ¶ï¼æå¯è½ä¼å¯¼è´mysqld crashæï¼
c) ææçUDFçå½æ°å¿ é¡»æ¯çº¿ç¨å®å ¨çï¼å¦æéè¦ç¨å ¨å±åéï¼éè¦å äºæ¥ï¼å°½éå¨name_initä¸åé èµæºï¼å¹¶å¨name_deinitä¸éæ¾
d) éè¦æinsertæé
ä½è zhaiwx
bitsCN.com
位系统上源码编译位libcurl库
有时候需要交叉编译libcurl,比如目标机器是码下位系统的,但是码下本地机器是位系统的,而且由于某些原因,码下我们无法在位系统上直接编译,码下所以需要用到交叉编译
libcurl是码下leveldb源码知乎依赖openssl的,所以先编译openssl的码下位库 完整编译选项配置如下:
详细选项含义如下:预先已经export CC的版本 配置-m指定编译位的库 配置–prefix指定openssl的安装目录 配置–openssldir指定openssl的头文件目录 配置shared关键字指定编译时生成动态库(libssl.so/libcrypto.so及其相关软连接)然后再make && make install即可
有时候有的系统是默认安装了位zlib库的,那么就可以跳过这一步,码下但是码下有的系统需要自己下载编译zlib-位库 完整编译选项配置如下:直接修改CMakeLists.txt文件,增加以下两行 set(CMAKE_C_FLAGS “-m”) set(CMAKE_CXX_FLAGS “-m”) 详细选项含义如下:配置CMAKE_C_FLAGS指定编译位库环境 配置CMAKE_CXX_FLAGS指定编译位库环境然后再mkdir build && cd build && cmake .. && make && make install即可
最后就是码下编译libcurl 完整编译选项配置如下:
详细选项含义如下:配置PKG_CONFIG_PATH指定启动openssl选项(启动这个选项,就会默认链接lssl,码下lcrypto,码下lz三个库) 配置CFLAGS指定编译位库环境 配置CPPFLAGS指定链接的码下库的头文件 配置LDFLAGS指定链接的库的路径然后再make && make install即可
当编译第三方库的时候,如果有CMakeLists.txt,码下直接用CMakeLists.txt编译就很方便;如果只有configure,码下那么需要先了解编译选项执行./configure –help来查看当前支持的编译选项然后根据提示配置一下我们需要指定的选项,比如自己指定的openssl的版本的库和头文件路径名,比如CC的版本,比如安装路径等等 (当然,如果不需要额外配置这些东西的话,直接走默认配置的ishopapp源码话,那么直接执行./config或者./configure就行)然后在生成Makefile之后,再make && make install即可
webRTC服务器搭建(基于Janus)与Demo运行
在直播带货和云游戏的浪潮中,webRTC技术占据重要地位。搭建webRTC服务器的核心是STUN/TURN服务器和信令服务器,coturn是常用的STUN/TURN服务器解决方案,而Janus则是信令服务器的知名选择。本文将详细介绍基于Ubuntu 的Janus服务器搭建步骤和Demo运行。1. Janus服务器搭建
1.1 下载源码:从github.com/meetecho/jan...获取Janus最新代码。
1.2 安装依赖:依赖库通过命令行或源码安装。遇到问题时,item源码如libcurl4未安装,需解决。
1.2.1 命令行安装:确保所有官方推荐的库都已成功安装。
1.2.2 源码安装:libnice和libwebsocket是关键,老版本libnice需手动编译。
1.2.3 libsrtp:非必须,但推荐升级到最新版以避免bug。
1.2.4 usrsctp:用于Data Channel,如需消息通道则需要安装。
1.3 编译Janus:安装文档生成工具后,头皮源码执行configure,查看配置信息。
1.4 运行Janus:复制配置文件并进行SSL配置,启用HTTPS和WSS支持。
1.4.1 生成和配置SSL证书
1.4.2 检查运行端口和警告信息
2. Demo运行
网页端Demo在源码的html目录中,使用/downloads/mysql/)下载最新的MySQL源码包。MySQL官方网站提供了多个不同的版本,可以根据需要选择合适的版本。例如,对于Linux系统,conhash源码可以选择.tar.gz格式的源码包进行下载。第二步:解压MySQL源码
下载完毕之后,就需要解压MySQL源码包。可以使用以下命令解压:
$ tar zxvf mysql-x.x.x.tar.gz
其中,mysql-x.x.x.tar.gz是下载得到的源码包的名称。解压过程可能需要几分钟的时间,具体时间因系统配置不同而有所不同。
第三步:安装依赖库
在编译安装MySQL的时候,需要依赖很多的库文件。这时,需要首先安装这些依赖库:
$ sudo apt-get install build-essential autoconf automake libtool m4 make gcc g++ libncurses5 libncurses5-dev zlib1g-dev libssl-dev libcurl4-openssl-dev libxml2-dev gettext
第四步:配置源码
在完成依赖库安装之后,接下来需要对MySQL源码进行配置。可以使用以下命令执行源码配置:
$ cd mysql-x.x.x
$ cmake .
$ make
其中,第一条命令进入MySQL源码的目录,第二条命令进行配置,第三条命令则是编译源码。
第五步:安装MySQL
经过第四步编译,就可以执行以下安装命令:
$ sudo make install
这样就完成了MySQL的安装。在安装过程中,会提示输入MySQL的相关配置信息,例如root密码等。安装完成后,可以使用以下命令启动MySQL服务:
$ sudo systemctl start mysql
为了避免每次手动启动服务,还可以设置MySQL为系统服务并设置为开机启动:
$ sudo systemctl enable mysql
总结
在这篇文章中,我们介绍了从MySQL官网下载最新的MySQL源码,然后解压、配置源码并安装MySQL的步骤。要注意的是,在安装MySQL时会提示输入一些配置信息,例如root密码等,需要仔细填写。通过这些步骤,我们可以既熟悉MySQL源码的编译与安装,同时也能更好地对MySQL进行深入了解。
ubuntu php 如何安装 curl
Ubuntu系统下安装PHP cURL具体步骤如下:
首先进入命令行模式,执行安装命令:
# sudo apt-get install curl libcurl3 libcurl3-dev php7.0-curl
此步骤用于安装cURL相关组件,确保PHP环境支持cURL功能。
安装完成后,重启Apache服务器以使更改生效:
# sudo /etc/init.d/apache2 restart
确保PHP环境正确配置,可执行以下步骤验证cURL是否成功安装:
1. 在web服务器目录(Ubuntu环境下通常位于/var/www)创建一个名为test.php的文件。
2. 编辑test.php文件,添加以下代码:
<php phpinfo(); ?>
3. 保存文件。
4. 使用浏览器访问该网页(例如: and TFTPã
curlåæ ·æ¯æSSLè¯ä¹¦,HTTP POST, HTTP
PUT,FTPä¸ä¼ ï¼åºäºè¡¨åçHTTPä¸ä¼ ï¼ä»£ç(proxies)ãcookiesãç¨æ·å/å¯ç 认è¯(Basic, Digest,
NTLMç)ãä¸è½½æ件æç¹ç»ä¼ ï¼ä¸è½½æ件æç¹ç»ä¼ (file transfer resume)ï¼ and TFTPçåè®®ã
åcurlä¸æ ·ï¼libcurlä¹æ¯æSSLè¯ä¹¦,HTTP POST, HTTP
PUT,FTPä¸ä¼ ï¼åºäºè¡¨åçHTTPä¸ä¼ ï¼ä»£ç(proxies)ãcookiesãç¨æ·å/å¯ç 认è¯(Basic, Digest,
NTLMç)ãä¸è½½æ件æç¹ç»ä¼ ï¼ä¸è½½æ件æç¹ç»ä¼ (file transfer resume)ï¼http代çæå¡å¨ç®¡éï¼proxy
tunneling)çã
libcurlæ¯é«åº¦å¯ç§»æ¤çï¼å¯ä»¥å·¥ä½å¨ä¸åçå¹³å°ä¸ï¼æ¯æWindowsï¼Unixï¼Linuxçã
libcurlæ¯å è´¹çï¼çº¿ç¨å®å ¨çï¼IPV6å ¼å®¹çï¼åäºå®è¿æå¾å¤å ¶ä»é常丰å¯çç¹æ§ãlibcurlå·²ç»è¢«å¾å¤ç¥åç大ä¼ä¸ä»¥ååºç¨ç¨åºæéç¨ã
å¯ä»¥å¨è¿éè·ålibcurlçæºç åç¸å ³ææ¡£ã
curlä¸libcurl对æ¯
ç¸åç¹
curlålibcurlé½å¯ä»¥å©ç¨å¤ç§å¤æ ·çåè®®æ¥ä¼ è¾æ件ï¼å æ¬HTTP, HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET and FILEçã
ä¸åç¹
curlæ¯å½ä»¤è¡å·¥å ·ï¼å¯ä»¥éè¿shellæèæ¬æ¥è¿è¡curlãcurlåºå±æ使ç¨çåºæ¯libcurlã
libcurlæ¯ä¸ä¸ªåºï¼é常ä¸å«çç¨åºç»å®å¨ä¸èµ·ä½¿ç¨ï¼å¦å½ä»¤è¡å·¥å ·curlå°±æ¯å°è£ äºlibcurlåºãæ以æ们ä¹å¯ä»¥å¨ä½ èªå·±çç¨åºæ项ç®ä¸ä½¿ç¨libcurl以è·å¾ç±»ä¼¼CURLç强大åè½ãæ¥ä¸æ¥å°è¦ä»ç»çPHPæ©å±å°±æ¯å¯¹curlçä¸ä¸ªå°è£ ã