一.二进制包安装mysql
1.mysql二进制包介绍
1.1 二进制包获取途径
https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/mysql-5.7.26-el7-x86_64.tar.gz https://downloads.mariadb.org/interstitial/mariadb-10.2.29/bintar-linux-x86_64/mariadb-10.2.29-linux-x86_64.tar.gz/from/http%3A//mirrors.tuna.tsinghua.edu.cn/mariadb/
1.2 包名指明了安装包的类型(二进制包|源码包|rpm包|deb包)
| 包名 | 说明 |
|---|---|
| mariadb-10.2.29.tar.gz | 未指明平台和安装包后缀rpm或者deb,为源码包,用于编译安装 |
| mariadb-10.2.29-linux-x86_64.tar.gz | 指明了已经为linux平台编译,为通用二进制程序包(centos6-8) |
| mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz | 指明为linux平台编译好的二进制包,也指明安装时依赖glibc2.12库,没有该库需要手动安装该库 |
| mariadb-10.2.29-linux-systemd-x86_64.tar.gz | 适用于dentos7及以上的二进制包,依赖于systemd服务来管理 |
2.安装mysql二进制包的一般步骤
2.1 准备用户
groupadd -r -g GNUM mysql useradd -r -g GNUM -d /data/mysql mysql
2.2 准备数据目录
- 使用LV
1.创建LV df -Th fdisk /dev/sdb pvcreate /dev/sdb3 vgcreate vg_mysql /dev/sdb3 lvcreate -l 100%free -n mysql vg_mysql 2.使之开机挂载 mkdir /data/mysql -p vim /etc/fstab ... /dev/vg_mysql/mysql /data/mysql ext4 defaults 0 0 ... 3.更改属主 chown mysql:mysql /data/mysql
- 不使用LV
mkdir /data/mysql -p chown mysql:mysql /data/mysql
2.3 准备二进制程序
tar -zxf mysql-VERSION-linux-[deps-]x86_64.tar.gz -C /usr/local # 源码文件解压至/usr/local/src
cd /usr/local
ln -sv mysql-VERSION-linux-[deps-]x86_64 mysql
chown -R root:mysql /usr/local/mysql
2.4 准备配置文件
mkdir /etc/mysql
cdp /usr/local/mysql/support-files/my-large.cnf /etc/mysql/my.cnf
vim /etc/mysql/my.cnf
...
[mysqld]
datadir = /data/mysql
innodb_file_per_table = on
skip_name_resolve = on
...
2.5 创建数据库文件
mysql 5.7
/usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/data/mysql
mysql 其它版
cd /usr/local/mysql
./scripts/mysql_install_db --datadir=/data/mysql --user=mysql
2.6 准备服务脚本
cd /usr/local/mysql
cp ./support-files/mysql.server /etc/rc.d/ini.d/mysqld # centos6
chkconfig --add mysqld # centos6
service mysqld start # centos6
cp ./support-files/systemd/mariadb.service /usr/lib/systemd/system/ # centos7|8
systemctl daemon-reload
systemctl enable --now mariadb
2.7 配置PATH路径
echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
2.8 安全初始化
/usr/local/mysql/bin/mysql_secur_installation
3.Trouble shooting
- 无法启动服务?
- /etc/my.cnf 配置文件有错误
- /data/mysql 文件夹未成功生成数据库文件
- 使用service或者systemctl命令启动时提示未找到命令?
- PATH环境变量设置有误或者没有启用(. /etc/profile.d/mysql.sh)
二.源码编译安装MariaDB
1.概述
- mariadb使用cmake编译工具编译安装,而不用传统的make工具。cmake的重要特性之一是其可以独立
于源码(out-of-source)编译,也即编译工作可以在另一个指定的目录中而不用像make一定到进到源码
目录中进行编译,这可以保证源码目录不受任何一次编译的影响,因此在同一个源码树上可以进行多次
不同的编译 - 详细的编译选项见mysql官网表格
2.具体编译安装步骤
2.1 安装相关的依赖包
yum install bison bison-devel zlib-devel libcurl-devel libarchive-devel boostdevel gcc gcc-c++ cmake ncurses-devel gnutls-devel libxml2-devel openssldevel libevent-devel libaio-devel
2.2 准备用户
useradd -r -s /sbin/nologin -d /data/mysql/ mysql
2.3 准备数据目录
mkdir /data/mysql -p chown mysql:mysql /data/mysql
2.4 下载并解压源码包
wget https://downloads.mariadb.org/interstitial/mariadb-10.2.29/bintar-linux-x86_64/mariadb-10.2.29-linux-x86_64.tar.gz/from/http%3A//mirrors.tuna.tsinghua.edu.cn/mariadb/
tar -zxf mariadb-10.2.29-linux-x86_64.tar.gz -C /usr/local/
2.5 选取合适参数cmake编译
cd /usr/local/mariadb-10.2.29/
cd mariadb-10.2.18/
cmake . \
-DCMAKE_INSTALL_PREFIX=/app/mysql \
-DMYSQL_DATADIR=/data/mysql/ \
-DSYSCONFDIR=/etc/ \
-DMYSQL_USER=mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
- 编译出错,可以执行下面命令后重试:
rm -f CMakeCache.txt
2.6 配置环境变量
echo 'PATH=/app/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
2.7 生成数据库文件
cd /app/mysql
./scripts/mysql_install_db --datadir=/data/mysql --user=mysql
2.8 准备配置文件
cdp /app/mysql/support-files/my-huge.cnf /etc/my.cnf
2.9 准备启动脚本,启动服务
cd /app/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfgi -add mysql
service mysqld start
2.10 安全初始化
mysql_secure_installation
三.一键安装mysql二进制程序包脚本
#!/bin/bash
#
#*******************************************************************************
#Author: steveli
#QQ: 1049103823
#Data: 2019-11-18
#FileName: auto_install_mysql_v00.sh
#URL: http://suosuoli.cn
#URL: https://blog.csdn.net/YouOops
#Description: A simple script to install binary code of mysql .
#Copyright (C): 2019 All rights reserved
#******************************************************************************
#Fontcolor#red(31):green(32):yellow(33):blue(34):purple(35):cyan(36):white(37)#
#Backcolor#red(41):green(42):yellow(43):blue(44):purple(45):cyan(46):white(47)#
#******************************************************************************
#Update log:
#V00:install mysql5.6 mysql5.7 and mariadb10.2 on centos6
#V01:install mysql5.6 myaql5.7 and mariadb10.2 on centos6¢os7
# 若没有网络,将此脚本和mysql二进制包放同级目录即可使用
#######################
declare -a MYSQL_VER
WORKING_DIR=`pwd`
DATA_DIR="/data/mysql"
BASE_DIR="/usr/local"
SYS_VER=`cat /etc/redhat-release | sed -nr 's/.* ([0-9]+)\.[0-9]+\.?.*/\1/p'`
BINARY_NAME=
MYSQL_VER=( mysql-5.6.46 mysql-5.7.26 mariadb-10.2.29 )
#######################
#######################
. /etc/init.d/functions
# success
# passed
# warning
# failure
#######################
_test() {
#echo ${MYSQL_VER[@]}
#echo ${MYSQL_VER[0]}
#echo ${MYSQL_VER[1]}
#echo ${MYSQL_VER[2]}
#printf "%-255s\n" ${MYSQL_VER[0]} ${MYSQL_VER[1]} ${MYSQL_VER[2]}
:
}
pre_install() {
status=$(echo `getenforce`)
if [[ "$status" == "enforcing" ]]; then
sed -ir 's#SELINUX=enforcing#SELINUX=disabled#' /etc/sysconfig/selinux && echo "SElinux disabled."
else
echo "SElinux has been disabled.`success`"
fi
if [[ "$SYS_VER" -eq "6" ]]; then
iptables -F
else
systemctl stop firewalld
systemctl disable firewalld
fi
}
## cerate a system user for mysql.
user_add() {
if id mysql &> /etc/null; then
echo "User mysql exists.`passed`"
else
useradd -r mysql -s /sbin/nologin &> /etc/null
echo "User mysql added.`success`"
fi
}
determin_network(){
:
}
## install some dependencies and libs.
deps_install() {
echo "Installing some deps and libs..."
yum -y install bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel gcc gcc-c++ cmake ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel &> /etc/null
yum -y install wget vim curl irzsz lsof iotop net-tools perl perl-Data-Dumper libaio &> /etc/null
echo "Deps and libs installed.`success`"
}
## not yet complete the code...
#lv_create() {
# fdisk /dev/sdb
# pvcreate /dev/sdb3
# vgcreate vg_mysql /dev/sdb3
# lvcreate -l 100%free -n mysql vg_mysql
#}
## $1=1-->5.6|2-->5.7|3-->10,2
get_binary_ready() {
if [[ "$1" -eq "1" ]]; then
if [[ -e ${WORKING_DIR}/mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz ]]; then
echo "Extracting \"mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz\"..."
tar -zxf mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz -C ${BASE_DIR}
echo "Done, all files alocated in ${BASE_DIR}/mysql-5.6.46-linux-glibc2.12-x86_64`success`"
else
wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz
#wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.46.tar.gz
echo "Extracting \"mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz\"..."
tar -zxf mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz -C ${BASE_DIR}
echo "Done, all files alocated in ${BASE_DIR}/mysql-5.6.46-linux-glibc2.12-x86_64`success`"
fi
ln -s ${BASE_DIR}/mysql-5.6.46-linux-glibc2.12-x86_64 ${BASE_DIR}/mysql
chown -R mysql:mysql ${BASE_DIR}/mysql
elif [[ "$1" -eq "2" ]]; then
if [[ -e ${WORKING_DIR}/mysql-5.7.26-el7-x86_64.tar.gz ]]; then
echo "Extracting \"mysql-5.7.26-el7-x86_64.tar.gz\"..."
tar -zxf mysql-5.7.26-el7-x86_64.tar.gz -C ${BASE_DIR}
echo "Done, all files alocated in ${BASE_DIR}/mysql-5.7.26-el7-x86_64.tar.gz`success`"
else
#wget https://dev.mysql.com/get/Downloads/mysql-5.7.26-el7-x86_64.tar.gz
wget https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/mysql-5.7.26-el7-x86_64.tar.gz
echo "Extracting \"mysql-5.7.26-el7-x86_64.tar.gz\"..."
tar -zxf mysql-5.7.26-el7-x86_64.tar.gz -C ${BASE_DIR}
echo "Done, all files alocated in ${BASE_DIR}/mysql-5.7.26-el7-x86_64`success`"
fi
ln -s ${BASE_DIR}/mysql-5.7.26-el7-x86_64 ${BASE_DIR}/mysql
chown -R mysql:mysql ${BASE_DIR}/mysql
elif [[ "$1" -eq "3" ]]; then
if [[ -e ${WORKING_DIR}/mariadb-10.2.29-linux-x86_64.tar.gz ]]; then
echo "Extracting \"mariadb-10.2.29-linux-x86_64.tar.gz\"..."
tar -zxf mariadb-10.2.29-linux-x86_64.tar.gz -C ${BASE_DIR}
echo "Done, all files alocated in ${BASE_DIR}/mariadb-10.2.29-linux-x86_64.tar.gz`success`"
else
wget https://downloads.mariadb.org/interstitial/mariadb-10.2.29/bintar-linux-x86_64/mariadb-10.2.29-linux-x86_64.tar.gz/from/http%3A//mirrors.tuna.tsinghua.edu.cn/mariadb/
echo "Extracting \"mariadb-10.2.29-linux-x86_64.tar.gz\"..."
tar -zxf mariadb-10.2.29-linux-x86_64.tar.gz -C ${BASE_DIR}
echo "Done, all files alocated in ${BASE_DIR}/mariadb-10.2.29-linux-x86_64`success`"
fi
ln -s ${BASE_DIR}/mariadb-10.2.29-linux-x86_64 ${BASE_DIR}/mysql
chown -R mysql:mysql ${BASE_DIR}/mysql
fi
}
## modify /etc/my.conf
configure_cnf() {
if [[ -e /etc/my.cnf ]]; then
cp /etc/my.{cnf,cnf.backup}
fi
cat > /etc/my.cnf <<EOF
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysql.log
pid-file=/var/run/mysql/mysql.pid
[client]
port=3306
socket=/data/mysql/mysql.sock
EOF
echo "/etc/my.cnf configured.`success`"
}
path_ready() {
if [[ -e /etc/profile.d/mysql.sh ]]; then
cp /etc/profile.d/mysql.{sh,sh.backup}
fi
cat > /etc/profile.d/mysql.sh <<EOF
export PATH=/usr/local/mysql/bin:\$PATH
EOF
echo "PATH variable configured.`success`"
}
## grab the default passwd and change it for mysql 5.7 --> must run this after mysql started
change_default_passwd() {
DEFAULT_PSWD=`sed -nr 's#.*\[Note\].*root@.*: (.*)#\1#p' /tmp/mysql5.7_databases_install.log`
read -p "Please input the passwd you want to set:" SET_PSWD
${BASE_DIR}/mysql/bin/mysqladmin -uroot -p"${DEFAULT_PSWD}" password ${SET_PSWD}
echo "You password for mysql5.7 are now ${SET_PSWD}."
}
## initialize the databases that mysql need.
create_db() {
cd ${BASE_DIR}/mysql
if [[ "$1" -eq "1" ]]; then
scripts/mysql_install_db --datadir=/data/mysql --user=mysql
[[ "$?" -eq 0 ]] && echo "Databases installed.`success`" || echo "Something wrong when install databases.`failure`"
elif [[ "$1" -eq "2" ]]; then
bin/mysqld --initialize --user=mysql --datadir=/data/mysql &> /tmp/mysql5.7_databases_install.log
[[ "$?" -eq 0 ]] && echo "Databases installed.`success`" || echo "Something wrong when install databases.`failure`"
elif [[ "$1" -eq "3" ]]; then
scripts/mysql_install_db --datadir=/data/mysql --user=mysql &> /tmp/mariadb10.2_databases_install.log
[[ "$?" -eq 0 ]] && echo "Databases installed.`success`" || echo "Something wrong when install databases.`failure`"
fi
}
## make mysql controlable via system
get_service_script_ready() {
cp ${BASE_DIR}/mysql/support-files/mysql.server /etc/init.d/mysqld
}
if_mysql_running() {
service mysqld start
if lsof -i:3306; then
echo "mysqld started successfully.`success`"
chkconfig --add mysqld
ln -s ${DATA_DIR}/mysql.sock /tmp/mysql.sock &> /dev/null
else
echo "mysqld can't start.`failure`"
fi
}
## mysql5.7 need not to rum this.
secure_install() {
PASSWD="centos"
if rpm -q expect; then
:
else
yum install expect -y
fi
if [[ ! -e /tmp/mysql.sock ]]; then
ln -s ${DATA_DIR}/mysql.sock /tmp/mysql.sock
fi
expect <<EOF
set timeout 10
spawn /usr/local/mysql/bin/mysql_secure_installation
expect {
"(enter for none)" {send "\n";exp_continue}
"Set root password" {send "y\n";exp_continue}
"New password:" {send "${PASSWD}\n";exp_continue}
"Re-enter new password:" {send "${PASSWD}\n";exp_continue}
"users" {send "y\n";exp_continue}
"remotely" {send "y\n";exp_continue}
"access to it" {send "y\n";exp_continue}
"tables now" {send "y\n"}
}
expect eof
EOF
[[ $? -eq 0 ]] && echo "Secure_installation complete,password for root is \"centos\"`success`" || echo "Something wrong during secure_installation.`failure`"
}
main() {
#_test
printf "\n%-255s\n" 1.${MYSQL_VER[0]} 2.${MYSQL_VER[1]} 3.${MYSQL_VER[2]}
read -p "Select which version to install(1|2|3):" SELECT
pre_install
user_add
deps_install
get_binary_ready ${SELECT}
configure_cnf
path_ready
create_db ${SELECT}
get_service_script_ready
if_mysql_running
change_default_passwd
if [[ ${SELECT} -ne 2 ]]; then
secure_install
fi
}
main
四.一键编译安装mysql二进制程序包脚本
略
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




