源码编译mysql及所需插件
原文链接:http://blog.51cto.com/linuxshengyu/1703398
大家都知道mysql版本更新到5.6之后和之前的版本有一些区别,编译的时候不是直接使用./configure --来直接进行预编译,而是先使用cmake,直入正题:
准备安装,安装之前先安装所需要的插件和依赖包
这里可以使用yum方式来一次性安装,简单、快捷
yum -y install make cmake gcc-c++ bison ncurses ncurses-devel!必须安装的插件
当然也会有许多朋友喜欢用源码包来安装,下面提供链接和安装方法
1.安装make
make编译器下载链接:http://ftp.gnu.org/gnu/make/
tar -zxvf make-4.2.tar.gz
cd make-4.2
./configure --prefix=/home/hxj/local/make
make
make install
2.安装bison
bison下载地址:http://ftp.gnu.org/gnu/bison/
tar -zxvf bison-3.0.tar.gz
cd bison-3.0
./configure --prefix=/home/hxj/local/bison
make
make install
3.安装gcc-c++
3.1、升级gcc依赖的:mpfr-4.0.1、gmp-6.1.2、mpc-1.1.0
gcc升级需要升级这三个软件的版本,上面的版本是可以支持我现在使用的gcc 4.4.1的升级,三个软件链接如下:
3.1.1、xz安装
注意,mpfr那个软件下载下来是个tar.xz的压缩格式,需要先解压成tar,需要使用xz软件,这个机器系统目录里没有也需要下载,软件链接如下:
首先解压:
tar -zxvf xz-5.2.4.tar.gz
cd xz-5.2.4
./configure --prefix=/home/hxj/local/xz && make && make install
alias xz='/home/hxj/local/xz/'
然后就可以解压tar.xz后缀的压缩包文件
3.1.2、安装mpfr-4.0.1、gmp-6.1.2、mpc-1.1.0
下面开始安装这三个依赖;
必须先安装gmp,因为后面两个的安装需要依赖它,还需要指定安装目录,
xz -d gmp-6.1.2.tar.xz 解压为.tar文件
tar xvf gmp-6.1.2.tar
cd gmp-6.1.2
./configure --prefix=/home/hxj/local/gmp && make && make install
然后是mpfr,它依赖gmp,同样指定安装目录,
tar zxvf mpfr-4.0.1.tar.gz
cd mpfr-4.0.1
./configure --prefix=/home/hxj/local/mpfr --with-gmp=/home/hxj/local/gmp/ && make && make install
最后是mpc,它依赖前面两个,同样指定安装目录,
tar zxvf mpc-1.1.0.tar.gz
cd mpc-1.1.0
./configure --prefix=/home/hxj/local/mpc --with-gmp=/home/hxj/local/gmp/ --with-mpfr=/home/hxj/local/mpfr/ && make && make install
安装gcc-8.2.0:
tar zxvf gcc-8.2.0.tar.gz
cd gcc-8.2.0
./configure --prefix=/home/hxj/local/gcc --enable-threads=posix --disable-multilib --enable-language=c,c++ --with-gmp=/home/hxj/local/gmp/ --with-mpfr=/home/hxj/local/mpfr/ --with-mpc=/home/hxj/local/mpc/
指定安装目录、依赖的那三个软件的目录
此时需要改自己的环境变量,修改~/.bash_profile:
export PATH=/home/hxj/local/gcc/bin:/home/hxj/local/gcc/lib64:$PATH
export LD_LIBRARY_PATH=/home/hxj/local/gcc/lib/:/home/hxj/local/gmp/lib:/home/hxj/local/mpc/lib:/home/hxj/local/mpfr/lib:$LD_LIBRARY_PATH
注:一定把新的gcc目录的bin、lib64放在$PATH的前面,这样调用gcc会优先找到我们的新的gcc,而不是系统目录的旧gcc
另外运行时库的环境变量LD_LIBRARY_PATH也一定要改,方式也是一定放在原先变量$LD_LIBRARY_PATH前面
保存退出
应用修改后的环境变量:source ~/.bash_profile
然后是make,make前提是本身要有一个gcc,另外make时注意存储空间得够,否则半截可能出现因为空间不够而编译中止;
最后是make install,将是很长的一段时间,我感觉得两三个小时貌似
下面两步用于出现libstdc++.so.6问题,使用root用户操作:
cd /usr/lib64/
strings libstdc++.so.6 | grep GLIBC
ln -s /home/hxj/local/gcc/lib64/libstdc++.so.6.0.25 libstdc++.so.6
这时,gcc -v,就可以看到新安装的gcc
4.安装cmake
cmake下载地址:http://distfiles.macports.org/cmake/
tar zxvf cmake-3.12.0.tar.gz
cd cmake-3.12.0
./configure --prefix=/home/hxj/local/cmake
make
make install
5.安装ncurses,ncurses-devel
没有找到ncurses-devel源码包,故使用rpm -ivh的方法进行安装,要求ncurses-devel和ncurses的版本一致,所以都使用rpm -ivh的方式安装
ncurses-devel下载地址:https://pkgs.org/download/ncurses-devel
ncurses-base 下载地址: http://rpmfind.net/linux/rpm2html/search.php?query=ncurses-base
ncurses-base 下载地址: http://rpmfind.net/linux/rpm2html/search.php?query=ncurses-libs
使用root用户rpm -ivh 安装:
rpm -ivh ncurses-base-5.7-4.20090207.el6.x86_64.rpm
rpm -ivh ncurses-libs-5.7-4.20090207.el6.x86_64.rpm
rpm -ivh ncurses-devel-5.7-4.20090207.el6.x86_64.rpm
rpm -ivh ncurses-5.7-4.20090207.el6.x86_64.rpm
安装完成后查看是否安装到服务器上
rpm -qa | grep ncurses
6.安装mysql
mysql5.6.41下载链接:http://ftp.ntu.edu.tw/MySQL/Downloads/MySQL-5.6/
useradd mysql
groupadd mysql
解压并安装:
tar zxvf mysql-5.6.41.tar.gz
mv mysql-5.6.41 mysql
cd mysql
/home/hxj/local/cmake/bin/cmake
-DCMAKE_INSTALL_PREFIX=/home/hxj/local/mysql \ #安装路径
-DMYSQL_DATADIR=/home/hxj/local/mysql/data \ #数据文件存放位置
-DMYSQL_UNIX_ADDR=/home/hxj/local/mysql/mysql.sock \ #mysql.sock文件位置
-DSYSCONFDIR=/home/hxj/local/mysql/etc \ #my.cnf路径
-DWITH_MYISAM_STORAGE_ENGINE=1 \ #支持MyIASM引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ #支持InnoDB引擎
-DWITH_MEMORY_STORAGE_ENGINE=1 \ #支持Memory引擎
-DWITH_READLINE=1 \ #快捷键功能(我没用过)
-DMYSQL_TCP_PORT=3306 \ #端口
-DENABLED_LOCAL_INFILE=1 \ #允许从本地导入数据
-DWITH_PARTITION_STORAGE_ENGINE=1 \ #安装支持数据库分区
-DEXTRA_CHARSETS=all \ #安装所有的字符集
-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
完成之后,可以用echo $?来查看返回值,如果是0表示成功,非0值就是出错,请根据报错信息来排查。
make
make install
7.完成后,继续下面的操作
# cd mysql
# scripts/mysql_install_db --user=mysql
下面的命令是将mysql的配置文件拷贝到/etc
# cp support-files/my-default.cnf /etc/my.cnf
修改my.cnf配置;
# vi /etc/my.cnf
#[mysqld] 下面添加:
user=mysql
basedir = /home/hxj/local/mysql/
datadir = /home/hxj/local/mysql/data
[mysqld_safe]
log-error= /home/hxj/local/mysql/var/log/mysql.log
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
保存退出
cd mysql
mkdir -p var/log
scripts/mysql_install_db --defaults-file=./my.cnf --user=mysql
./support-files/mysql.server start
cat var/log/mysql.log (查看mysql启动有无报错)
做实验室遇到如下问题:
180729 02:25:08 mysqld_safe Logging to '/home/hxj/mysql/var/log/mysqld.log'.
180729 02:25:08 mysqld_safe Starting mysqld daemon with databases from /home/hxj/mysql/data
2018-07-29 02:25:08 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-07-29 02:25:08 0 [Note] --secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled
2018-07-29 02:25:08 0 [Note] /home/hxj/mysql/bin/mysqld (mysqld 5.6.40) starting as process 24747 ...
2018-07-29 02:25:08 24747 [Warning] Buffered warning: Changed limits: max_open_files: 1024 (requested 5000)
2018-07-29 02:25:08 24747 [Warning] Buffered warning: Changed limits: table_open_cache: 431 (requested 2000)
2018-07-29 02:25:08 24747 [Note] Plugin 'FEDERATED' is disabled.
2018-07-29 02:25:08 24747 [Note] InnoDB: Using atomics to ref count buffer pool pages
2018-07-29 02:25:08 24747 [Note] InnoDB: The InnoDB memory heap is disabled
2018-07-29 02:25:08 24747 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2018-07-29 02:25:08 24747 [Note] InnoDB: Memory barrier is not used
2018-07-29 02:25:08 24747 [Note] InnoDB: Compressed tables use zlib 1.2.3
2018-07-29 02:25:08 24747 [Note] InnoDB: Using CPU crc32 instructions
2018-07-29 02:25:08 24747 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2018-07-29 02:25:08 24747 [Note] InnoDB: Completed initialization of buffer pool
2018-07-29 02:25:08 24747 [Note] InnoDB: Highest supported file format is Barracuda.
2018-07-29 02:25:08 24747 [Note] InnoDB: The log sequence numbers 1625987 and 1625987 in ibdata files do not match the log sequence number 1625997 in the ib_logfiles!
2018-07-29 02:25:08 24747 [Note] InnoDB: Database was not shutdown normally!
2018-07-29 02:25:08 24747 [Note] InnoDB: Starting crash recovery.
2018-07-29 02:25:08 24747 [Note] InnoDB: Reading tablespace information from the .ibd files...
2018-07-29 02:25:08 24747 [Note] InnoDB: Restoring possible half-written data pages
2018-07-29 02:25:08 24747 [Note] InnoDB: from the doublewrite buffer...
2018-07-29 02:25:09 24747 [Note] InnoDB: 128 rollback segment(s) are active.
2018-07-29 02:25:09 24747 [Note] InnoDB: Waiting for purge to start
2018-07-29 02:25:09 24747 [Note] InnoDB: 5.6.40 started; log sequence number 1625997
2018-07-29 02:25:09 24747 [Note] Server hostname (bind-address): '*'; port: 3306
2018-07-29 02:25:09 24747 [Note] IPv6 is available.
2018-07-29 02:25:09 24747 [Note] - '::' resolves to '::';
2018-07-29 02:25:09 24747 [Note] Server socket created on IP: '::'.
2018-07-29 02:25:09 24747 [Note] Event Scheduler: Loaded 0 events
2018-07-29 02:25:09 24747 [Note] /home/hxj/mysql/bin/mysqld: ready for connections.
Version: '5.6.40' socket: '/home/hxj/mysql/mysql.sock' port: 3306 Source distribution
第一个warnning解决办法:
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
(中文大意:强烈建议不要使用带有隐式默认值的TIMESTAMP。请使用explicit_defaults_for_timestamp选项)
解决方案:
打开my.cnf,找到“[mysqld]”设置项,添加代码:
#开启查询缓存
explicit_defaults_for_timestamp=true
重启mysql
第2,3个warnning解决办法:
使用root
vi /etc/security/limits.conf
在最后加入如下四行
# End of file
* soft nproc 10240
* hard nproc 10240
* soft nofile 200000
* hard nofile 200000
保存退出
[root@localhost ~]# source /etc/security/limits.conf
重新启动数据库
给root用户设置密码,搭建好后默认没有密码,回车即可
[hxj@localhost ~]$ mysql -uroot -p
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 7
Server version: 5.6.41 Source distribution
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
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>SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
mysql> exit
Bye
[hxj@localhost ~]$
再次使用root登录mysql时,则需要输入密码了
[hxj@localhost ~]$ mysql -uroot -p
Enter password:
8.启动mysql
cd mysql
./support-files/mysql.server start
--------------------------------------------------------好好学习,天天向上---------------------------------------------------------------