编译安装Mysql

编译安装Mysql

1.准备工作

首先需要准备mysql的源码包,最新版本是5.7.20

下载地址为:

https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20.tar.gz

 

同时,mysql 5.7需要boost 1.59以及以上版本,需要在sourceforge上下载。地址为:

http://www.boost.org/users/download/

 

  1. 安装之前最好检查一下是否已安装了mysql和boost
rpm -qa | grep mysql //查看系统自带mysql
yum -y remove mysql-* //卸载mysql
rpm -e --nodeps mysql-5.1.73-3.el6_5.x86_64 //卸载mysql
rpm -qa | grep boost //查看系统自带boost
yum -y remove boost-* //卸载boost
rpm -e --nodeps boost-filesystem-1.41.0-11.el6_1.2.x86_64 //卸载boost

 

  1. 然后安装其它得依赖包:
yum install gcc gcc-c++ ncurses ncurses-devel bison libgcrypt perl cmake

 

2.准备安装

  1. 首先将boost库解压出来
wget https://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
tar -zxvf boost_1_59_0.tar.gz

 

  1. 然后拷贝到一个目录中
mv boost_1_59_0 /usr/local/boost

 

  1. 然后创建用户组以及用户
cat /etc/group | grep mysql //查看是否存在mysql用户组
cat /etc/passwd | grep mysql //查看是否存在mysql用户
groupadd mysql //创建用户组
useradd -r -g mysql mysql //创建用户

上面得工作完成以后,就可以开始编译mysql了,当然,先将mysql的源码解压出来:

3.开始编译安装

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20.tar.gz
tar xzvf mysql-5.7.20.tar.gz
cd mysql-5.7.20/

 

使用cmake和make命令来进行编译

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_TCP_PORT=3306 -DMYSQL_USER=mysql -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DENABLE_DOWNLOADS=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost

 

关于参数的一些解释:

CMAKE_INSTALL_PREFIX:指定MySQL程序的安装目录,默认/usr/local/mysql
DEFAULT_CHARSET:指定服务器默认字符集,默认latin1
DEFAULT_COLLATION:指定服务器默认的校对规则,默认latin1_general_ci
ENABLED_LOCAL_INFILE:指定是否允许本地执行LOAD DATA INFILE,默认OFF
WITH_COMMENT:指定编译备注信息
WITH_xxx_STORAGE_ENGINE:指定静态编译到mysql的存储引擎,MyISAM,MERGE,MEMBER以及CSV四种引擎默认即被编译至服务器,不需要特别指定。
WITHOUT_xxx_STORAGE_ENGINE:指定不编译的存储引擎
SYSCONFDIR:初始化参数文件目录
MYSQL_DATADIR:数据文件目录
MYSQL_TCP_PORT:服务端口号,默认3306
MYSQL_UNIX_ADDR:socket文件路径,默认/tmp/mysql.sock
DDOWNLOAD_BOOST=1 :下载boost库
DWITH_BOOST=/usr/local/boost 安装boost库

 

编译:make

======================================================================

mysql编译安装过程,执行make命令时报错:

c++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See http://bugzilla.redhat.com/bugzilla for instructions.
make[2]: * [sql/CMakeFiles/sql.dir/item_geofunc.cc.o] Error 4
make[1]: * [sql/CMakeFiles/sql.dir/all] Error 2
make: * [all] Error 2

原因解析:

内存不足,mysql5.9以上的版本,编译安装需要1G内存,而我的云主机刚好1G内存。

解决方案

内存不足当然加内存,加内存太贵?那就把硬盘当内存来用把

dd if=/dev/zero of=/data/swap_add bs=1M count=2048
mkswap /data/swap_add
swapon /data/swap_add
swapon -s

======================================================================

编译时间非常长,我都困了,我先创建几个目录,因为我们指定编译参数得时候,指定了mysql得数据存储的目录,因此,这个时候可以先把目录都创建出来:

mkdir /usr/local/mysql
mkdir /usr/local/mysql/data
mkdir /usr/local/mysql/logs
mkdir /usr/local/mysql/pids

最后还有重要得一步,需要将目录得所有权交给mysql用户

chown -R mysql:mysql /usr/local/mysql //需要root权限

编译完成后执行make install 安装即可

随后,我们需要配置/etc/my.cnf文件:

vim /etc/my.cnf

然后写入参数,最终如下;

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/usr/local/mysql/pids/mysqld.pid

 

3.性能调优

由于编译的时间是在太长了,这个地方的性能调优不涉及任何的sql优化,只针对一点:使用jemalloc来替换默认的内存管理

首先我们需要从网站上下载jemalloc,官网地址:

http://www.canonware.com/jemalloc/

从github上可以下载最新的源码:

https://github.com/jemalloc/jemalloc/releases

编译jemalloc:

./configure --libdir=/usr/local/lib
make
make install

为了保证能够找到jemalloc库,我们需要设置一下库路径,

echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf

ldconfig //执行这个命令可以刷新库路径

我们有两种方式来使用jemalloc来优化mysql

在编译的时候加入参数:

-DCMAKE_EXE_LINKER_FLAGS="-ljemalloc" -DWITH_SAFEMALLOC=OFF

然后重新编译一遍。

也可以修改 /usr/local/mysql/bin/mysqld_safe

在# executing mysqld_safe 下面加上

LD_PRELOAD=/usr/local/lib/libjemalloc.so

4.其它配置

通常我们需要重启服务器,最好在重启服务器的时候就启动mysql

cp support-files/mysql.server /etc/init.d/mysqld
chmod a+x /etc/init.d/mysqld //需要root权限

然后将mysql添加到环境变量,修改/etc/profile文件

vim /etc/profile //需要root

//在文件的最后面加入

#mysql path
export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH

最后执行 source /etc/profile

随后我们也需要多数据库进行初始化操作。自 mysql5.7 开始,初始化系统表不再使用 mysql_install_db 工具, 而是使用 mysqld –initialize-insecure –user=mysql , 其中 –initialize 表示默认生成一个安全的密码, –initialize-insecure 表示不生成密码, 密码为空

mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

现在可以启动mysql 服务器:

chkconfig mysqld on

最后我们将root密码修改一下:

mysql -u root
mysql> use mysql;
mysql>update user set authentication_string=password('123456') where user='root' and Host = 'localhost';
mysql> FLUSH PRIVILEGES;

特别提醒注意的一点是,新版的mysql数据库下的user表中已经没有Password字段了

而是将加密后的用户密码存储于authentication_string字段

完成,真实很困的一场编译啊。

 

 

 

 

 

 

 

 

未经允许不得转载:老汪的博客 » 编译安装Mysql

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

什么?你想更了解我?

点击联系点击联系