系统环境
系统:CentOS7.4-1708-Mini
源码路径:/usr/local/src
安装路径:/usr/local
依赖软件:cmake, ncurses, m4, bison
优化:jemalloc(内存分配器)
准备工作
基础环境
yum -y install gcc gcc-c++ wget bzip2 vim ntpdate
修改时区
rm -f /etc/localtime
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
关闭selinux
setenforce 0
sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
时间同步
ntpdate ntp.aliyun.com && hwclock -w
echo "*/20 * * * * $(which ntpdate) pool.ntp.org > /dev/null 2>&1 && $(which hwclock) -w" >> /var/spool/cron/root
chmod 600 /var/spool/cron/root
安装依赖环境
官方文档源码安装Mysql
Cmake: mysql使用cmake跨平台工具预编译源码,用于设置mysql的编译参数. 下载源
cd
wget -c https://cmake.org/files/v3.11/cmake-3.11.1.tar.gz
tar xvf cmake-3.11.1.tar.gz -C /usr/local/src/
cd /usr/local/src/cmake-3.11.1
./bootstrap && make && make install
Ncurses: 字符终端处理库 下载源
cd
wget -c http://ftp.gnu.org/gnu/ncurses/ncurses-6.0.tar.gz
tar xvf ncurses-6.0.tar.gz -C /usr/local/src/
cd /usr/local/src/ncurses-6.0
./configure --with-shared --without-debug --without-ada --enable-overwrite
make && make install
M4: GNU M4是传统Unix宏处理器的一个实现 下载源
cd
wget -c http://ftp.gnu.org/gnu/m4/m4-1.4.18.tar.gz
tar xvf m4-1.4.18.tar.gz -C /usr/local/src/
cd /usr/local/src/m4-1.4.18
./configure --prefix=/usr/local/m4
make && make install
ln -sf /usr/local/m4/bin/m4 /usr/bin/
Bison: Linux下C/C++语法分析器 下载源
cd
wget -c http://ftp.gnu.org/gnu/bison/bison-3.0.4.tar.gz
tar xvf bison-3.0.4.tar.gz -C /usr/local/src/
cd /usr/local/src/bison-3.0.4
./configure --prefix=/usr/local/bison
make && make install
ln -sf /usr/local/bison/bin/* /usr/bin/
echo '/usr/local/bison/lib/' > /etc/ld.so.conf.d/bison.conf
ldconfig
Jemalloc 下载源
cd
wget -c https://github.com/jemalloc/jemalloc/releases/download/5.0.1/jemalloc-5.0.1.tar.bz2
tar xvf jemalloc-5.0.1.tar.bz2 -C /usr/local/src/
cd /usr/local/src/jemalloc-5.0.1
./configure --prefix=/usr/local
make && make install
ln -s /usr/local/lib/libjemalloc.so.2 /usr/lib64/libjemalloc.so.1
[ -z "`grep /usr/local/lib /etc/ld.so.conf.d/*.conf`" ] && echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
ldconfig
编译安装mysql
准备工作
创建用户
useradd -M -s /sbin/nologin mysql
定义数据路径及密码
dbrootpwd=root
mkdir -p /data/mysql
mysql_data_dir=/data/mysql
mysql_install_dir=/usr/local/mysql
编译安装
mysql源码中用到了C++的Boost库,要求必须安装boost1.59.0或以上版本.
cd
# 下载Boost C++
wget -c http://mirrors.linuxeye.com/oneinstack/src/boost_1_59_0.tar.gz
tar xvf boost_1_59_0.tar.gz -C /usr/local/src/
# 下载 mysql
wget -c https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22.tar.gz
tar xvf mysql-5.7.22.tar.gz -C /usr/local/src/
cd /usr/local/src/mysql-5.7.22/
# 编译
cmake . -DCMAKE_INSTALL_PREFIX=${mysql_install_dir} \
-DMYSQL_DATADIR=${mysql_data_dir} \
-DSYSCONFDIR=/etc \
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/src/boost_1_59_0 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DTRACE=0 \
-DENABLED_LOCAL_INFILE=1 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DEXTRA_CHARSETS=all \
-DCMAKE_EXE_LINKER_FLAGS='-ljemalloc'
make -j $(grep processor /proc/cpuinfo | wc -l)
make install
配置服务
/bin/cp ${mysql_install_dir}/support-files/mysql.server /etc/init.d/mysqld
sed -i "s@^basedir=.*@basedir=${mysql_install_dir}@" /etc/init.d/mysqld
sed -i "s@^datadir=.*@datadir=${mysql_data_dir}@" /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
配置文件
1 | cat <<EOF >/etc/my.cnf |
数据库配置优化
1 | Mem=`free -m | awk '/Mem:/{print $2}'` |
初始化数据库
${mysql_install_dir}/bin/mysqld --initialize-insecure --user=mysql --basedir=${mysql_install_dir} --datadir=${mysql_data_dir}
chmod 600 /etc/my.cnf
chown mysql.mysql -R ${mysql_data_dir}
配置环境变量
[ -z "$(grep ^'export PATH=' /etc/profile)" ] && echo "export PATH=${mysql_install_dir}/bin:\$PATH" >> /etc/profile
[ -n "$(grep ^'export PATH=' /etc/profile)" -a -z "$(grep ${mysql_install_dir} /etc/profile)" ] && sed -i "s@^export PATH=\(.*\)@export PATH=${mysql_install_dir}/bin:\1@" /etc/profile
source /etc/profile
授权root
root仅本地登陆权限
${mysql_install_dir}/bin/mysql -e "grant all privileges on *.* to root@'127.0.0.1' identified by \"${dbrootpwd}\" with grant option;"
${mysql_install_dir}/bin/mysql -e "grant all privileges on *.* to root@'localhost' identified by \"${dbrootpwd}\" with grant option;"
${mysql_install_dir}/bin/mysql -uroot -p${dbrootpwd} -e "reset master;"
链接库
echo "${mysql_install_dir}/lib" > /etc/ld.so.conf.d/mysql.conf
ldconfig
启动服务
service mysqld start
配置防火墙
放行端口(–permanent永久生效,没有此参数重启后失效)
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --zone=public --add-port=3306/tcp --permanent
重新载入
firewall-cmd --reload
查看
firewall-cmd --zone= public --query-port=22/tcp
firewall-cmd --zone= public --query-port=3306/tcp
删除
firewall-cmd --zone= public --remove-port=3306/tcp --permanent
启用防火墙
systemctl start firewalld
systemctl enable firewalld