大家好,今天小编来为大家解答小黄油游戏网站源码分享下载这个问题,小黄油手游下载网址很多人还不知道,现在让我们一起来看看吧!
很长一段时间以来,安装LAMP时都是编译安装其数据库(MySQL,MariaDB,PerconaServer)的。这是一个非常耗时的过程,而且编译安装的版本,很多插件默认是不会被编译安装的。
偶然间在MariaDB的下载列表里,看到有适用于Linux下的二进制安装包。于是就研究了一下,发现其二进制包分为2个版本:GLIBC_2.14及GLIBC_2.14+,解压其安装包后,稍微设置一下就可以直接使用了。
这大大提高了安装效率,安装速度只取决于从服务器下载二进制包的速度。
于是我在脚本里先做判断系统里安装的GNU_LIBC_VERSION是多少,2.14是一道分界线,这也决定着下载链接是怎样的。
一、
MariaDB5.5,MariaDB10.0,MariaDB10.1一直都是这么安装的,直到MariaDB10.2的出现,让我头疼的一件事出现了。
本来以为只要安装好了MariaDB10.2,后面编译PHP会非常顺利,结果一开始configure的时候就出错了。
checkingformysql_set_server_optionin-lmysqlclient…no\nconfigure:error:wrongmysqllibraryversionorlibnotfound.Checkconfig.logformoreinformation.\n
这个错误提示太熟悉了,缺少了libmysqlclient.so,libmysqlclient.a,于是我就去MariaDB安装目录下的lib里一看,发现果然跟PerconaServer一样改名了。
看起来libmariadbclient.a,libmariadb.so.3这两个文件最相似。
做了symboliclink后,将libmysqlclient.a指向为libmariadbclient.a,libmysqlclient.so指向为libmariadb.so.3,继续编译PHP。
果然configure没问题了,喜滋滋地等待编译完成。当编译到mysqli模块时,异常退出。
mysqli.c:Infunction’zm_info_mysqli’:\nmysqli.c:990:error:’MYSQL_SERVER_VERSION’undeclared(firstuseinthisfunction)\nmysqli.c:990:error:(Eachundeclaredidentifierisreportedonlyonce\nmysqli.c:990:error:foreachfunctionitappearsin.)\n
What?这难道是MariaDB的头文件里未定义MYSQL_SERVER_VERSION变量?
去MariaDB安装目录下的include/mysql里grep一下所有的.h文件,发现MYSQL_SERVER_VERSION被定义在mysql_version.h里。
扒了一下PHP源代码里的ext/mysqli下的mysqli.c,一路找到php_mysqli_structs.h文件里include了my_global.h,又在my_global.h里看到include了my_config.h。
最后我在my_config.h里确实没有看到MYSQL_SERVER_VERSION变量被定义。
然后,我手动修改了一下my_global.h,在原来include。然后继续编译PHP。
果然,不再出现MYSQL_SERVER_VERSION变量的问题,然而,结果还是boom,错误提示如下:
mysqli_nonapi.c:Infunction’mysqli_common_connect’:\nmysqli_nonapi.c:266:error:’MYSQL’hasnomembernamed’reconnect’\nmysqli_nonapi.c:Infunction’zif_mysqli_error_list’:\nmysqli_nonapi.c:448:warning:passingargument4of’add_assoc_string_ex’discardsqualifiersfrompointertargettype\n
然后,我就发现我搞不定这个问题。
于是我从LAMP脚本里去掉了安装MariaDB10.2这个选项。
2017年7月18日更新
MariaDB10.2.7恢复了libmysqlclient.so,与Percona一样是symboliclink,同时也在头文件里加入了MYSQL_VERSION_ID定义。然而我测试了一下,还是会出现configure:error:wrongmysqllibraryversionorlibnotfound.Checkconfig.logformoreinformation.
PHP的编译选项只能从
–with-mysqli=/usr/local/mariadb/bin/mysql_config–with-pdo-mysql=/usr/local/mariadb\n
改为
–with-mysqli=mysqlnd–with-pdo-mysql=mysqlnd\n
即MySQLnativedriver。
二、
有了二进制安装MariaDB的经验,直觉告诉我MySQL肯定也有二进制包,去官网一看,果然有的。
Oracle将MySQL的二进制安装包命名为Linux–Generic。对于GNU_LIBC_VERSION,只要求GLIBC_2.5即可安装(正在开发的MySQL8.0则需GLIBC_2.12)
安装过程与MariaDB类似,唯一的区别是MySQL5.7开始,不再使用mysql_install_db来初始化安装数据库,而是使用mysqld–initialize-insecure来安装。
与此同时,MySQL5.7的默认数据库mysql中的user表结构也发生了若干变化,去掉了Password列,将密码hash保存在authentication_string列等等。而这又导致了低版本的phpMyAdmin如4.4无法正确识别数据库里的所有用户。
基本上,PerconaServer遵循着和MySQL一样的节奏,比如5.7开始使用mysqld–initialize-insecure来初始化,除了版本号。
PerconaServer有着自己独特的版本号。在主版本号之外,还有个rel版本号。5.5和5.6使用的rel版本号带小数点,比如5.6.36-82.0。而5.7则没有,比如5.7.18-15。
没错,PerconaServer也提供了二进制安装包。但是它也有自己的风格,是不一样的烟火。
PerconaServer对二进制包的openssl版本作了严格的区分。比如文件名含ssl100适用于所有的Debian/Ubuntu版本,而ssl101只适用于CentOS6和CentOS7。
PerconaServer的个性远不止于此。
你以为解压了这个二进制包就万事大吉了吗?它的安装目录和压缩包名一样长!
安装目录下的bin/mysqld_safe和bin/mysql_config里也包含了和文件名一样的路径名,而且是hardpath,这就意味着如果直接解压到某个安装文件夹下,是无法初始化和启动的。
必须要先将这两个文件里的路径替换为实际安装路径才可以。
与此同时,安装目录的lib目录下,并没有libmysqlclient.so和libmysqlclient.a,而是叫libperconaserverclient.so和libperconaserverclient.a。
因此需要创建symboliclink后才能被PHP识别和编译。
三、
通过二进制安装数据库后,再通过phpMyAdmin登录,你会发现多了一个PluginsTab,点进去会显示很多插件,大体上分为3类:AUTHENTICATION,INFORMATIONSCHEMA,STORAGEENGINE。而通过编译安装的数据库就没有这些。
这让我想起了一个比喻:微软的Windows会直接给你一个蛋糕,你直接吃就好了,没得挑;而Linux会给你面粉,鸡蛋,黄油,水,苏打粉等,好了,你去编译一个自定义的蛋糕吧。
事实上,为什么不多提供一个选项,让喜欢吃蛋糕的人,既可以选成品,也可以选用原材料来自己做一个?
二进制包就是这样的一个成品。如果可以的话,其实我也想选择Apache,PHP最新版的二进制包,然而并没有,所以只好自己编译了。各个操作系统发行版自带的版本往往都是其中的某个大版本,然后不断更新也不会变,少了很多选择的乐趣。
关于小黄油游戏网站源码分享下载的内容到此结束,希望对大家有所帮助。
