【MySQL】二进制安装MySQL
一、基于Ubuntu 二进制安装MySQL8.0 (5.7+适用)
1、创建用户
[root@Node-Ubuntu1804-20:~]# groupadd mysql [root@Node-Ubuntu1804-20:~]# useradd -r -g mysql -s /usr/sbin/nologin mysql
2、创建目录
[root@Node-Ubuntu1804-20:~]# mkdir /data/mysql -p [root@Node-Ubuntu1804-20:~]# chown -R mysql.mysql /data/mysql/
3、准备二进制程序
下载链接:https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.32-linux-glibc2.12-x86_64.tar
[root@Node-Ubuntu1804-20:~]# wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.32-linux-glibc2.12-x86_64.tar [root@Node-Ubuntu1804-20:~]# tar xvf mysql-8.0.32-linux-glibc2.12-x86_64.tar mysql-test-8.0.32-linux-glibc2.12-x86_64.tar.xz mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz mysql-router-8.0.32-linux-glibc2.12-x86_64.tar.xz [root@Node-Ubuntu1804-20:~]# tar xf mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz -C /usr/local/ [root@Node-Ubuntu1804-20:~]# cd /usr/local/ [root@Node-Ubuntu1804-20:/usr/local]# ln -sv mysql-8.0.32-linux-glibc2.12-x86_64 mysql 'mysql' -> 'mysql-8.0.32-linux-glibc2.12-x86_64'
4、安装依赖包
[root@Node-Ubuntu1804-20:~]# apt install -y libaio1 libaio-dev libncurses5-dev Reading package lists... Done Building dependency tree Reading state information... Done The following packages were automatically installed and are no longer required: linux-headers-4.15.0-151 linux-headers-4.15.0-151-generic linux-image-4.15.0-151-generic linux-modules-4.15.0-151-generic linux-modules-extra-4.15.0-151-generic Use 'apt autoremove' to remove them. The following additional packages will be installed: libtinfo-dev Suggested packages: ncurses-doc The following NEW packages will be installed: libaio-dev libaio1 libncurses5-dev libtinfo-dev 0 upgraded, 4 newly installed, 0 to remove and 71 not upgraded. Need to get 275 kB of archives. After this operation, 1510 kB of additional disk space will be used. Get:1 http://cn.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libaio1 amd64 0.3.110-5ubuntu0.1 [6476 B] Get:2 http://cn.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libaio-dev amd64 0.3.110-5ubuntu0.1 [12.8 kB] Get:3 http://cn.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libtinfo-dev amd64 6.1-1ubuntu1.18.04.1 [81.4 kB] Get:4 http://cn.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libncurses5-dev amd64 6.1-1ubuntu1.18.04.1 [174 kB] Fetched 275 kB in 2s (123 kB/s) Selecting previously unselected package libaio1:amd64. (Reading database ... 144068 files and directories currently installed.) Preparing to unpack .../libaio1_0.3.110-5ubuntu0.1_amd64.deb ... Unpacking libaio1:amd64 (0.3.110-5ubuntu0.1) ... Selecting previously unselected package libaio-dev:amd64. Preparing to unpack .../libaio-dev_0.3.110-5ubuntu0.1_amd64.deb ... Unpacking libaio-dev:amd64 (0.3.110-5ubuntu0.1) ... Selecting previously unselected package libtinfo-dev:amd64. Preparing to unpack .../libtinfo-dev_6.1-1ubuntu1.18.04.1_amd64.deb ... Unpacking libtinfo-dev:amd64 (6.1-1ubuntu1.18.04.1) ... Selecting previously unselected package libncurses5-dev:amd64. Preparing to unpack .../libncurses5-dev_6.1-1ubuntu1.18.04.1_amd64.deb ... Unpacking libncurses5-dev:amd64 (6.1-1ubuntu1.18.04.1) ... Setting up libtinfo-dev:amd64 (6.1-1ubuntu1.18.04.1) ... Setting up libncurses5-dev:amd64 (6.1-1ubuntu1.18.04.1) ... Setting up libaio1:amd64 (0.3.110-5ubuntu0.1) ... Setting up libaio-dev:amd64 (0.3.110-5ubuntu0.1) ... Processing triggers for man-db (2.8.3-2ubuntu0.1) ... Processing triggers for libc-bin (2.27-3ubuntu1.5) ...
5、设置PATH环境变量
[root@Node-Ubuntu1804-20:~]# echo "PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh [root@Node-Ubuntu1804-20:~]# . /etc/profile.d/mysql.sh
6、创建配置文件
[root@Node-Ubuntu1804-20:~]# vim /etc/my.cnf [root@Node-Ubuntu1804-20:~]# cat /etc/my.cnf [mysqld] datadir=/data/mysql socket=/data/mysql/mysql.sock pid-file=/data/mysql/mysql.pid log-error=/data/mysql/mysql.log [client] socket=/data/mysql/mysql.sock
7、创建数据库文件,并提取root密码
[root@Node-Ubuntu1804-20:~]# mysqld --initialize --user=mysql --datadir=/data/mysql
[root@Node-Ubuntu1804-20:~]# grep password /data/mysql/mysql.log 2023-06-07T02:05:13.924955Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: k.k/j&XuT7uF [root@Node-Ubuntu1804-20:~]# awk '/temporary password/{print $NF}' /data/mysql/mysql.log k.k/j&XuT7uF
8、创建服务脚本,并启动服务
[root@Node-Ubuntu1804-20:~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld [root@Node-Ubuntu1804-20:~]# /etc/init.d/mysqld start [ ok ] Starting mysqld (via systemctl): mysqld.service.
9、修改初始密码,测试访问数据库
[root@Node-Ubuntu1804-20:~]# mysqladmin -uroot -p'k.k/j&XuT7uF' password 'mysql' mysqladmin: [Warning] Using a password on the command line interface can be insecure. Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety. [root@Node-Ubuntu1804-20:~]# mysql -uroot -pmysql mysql: [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 12 Server version: 8.0.32 MySQL Community Server - GPL Copyright (c) 2000, 2023, Oracle and/or its affiliates. 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> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec) mysql>
二、基于CentOS7 二进制安装MySQL8.0(5.7+适用)
1、创建用户
[root@node-centos7-70 ~]# groupadd mysql [root@node-centos7-70 ~]# useradd -r -g mysql -s /usr/sbin/nologin mysql
2、创建目录
[root@node-centos7-70 ~]# mkdir /data/mysql -p [root@node-centos7-70 ~]# chown -R mysql.mysql /data/mysql
3、准备二进制程序
[root@node-centos7-70 ~]# wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.32-linux-glibc2.12-x86_64.tar --2023-06-07 10:54:29-- https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.32-linux-glibc2.12-x86_64.tar 正在解析主机 cdn.mysql.com (cdn.mysql.com)... 104.70.237.54 正在连接 cdn.mysql.com (cdn.mysql.com)|104.70.237.54|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:1005660160 (959M) [application/x-tar] 正在保存至: “mysql-8.0.32-linux-glibc2.12-x86_64.tar” 100%[====================================================================================================>] 1,005,660,160 26.6MB/s 用时 29s 2023-06-07 10:54:58 (32.8 MB/s) - 已保存 “mysql-8.0.32-linux-glibc2.12-x86_64.tar” [1005660160/1005660160]) [root@node-centos7-70 ~]# tar xvf mysql-8.0.32-linux-glibc2.12-x86_64.tar mysql-test-8.0.32-linux-glibc2.12-x86_64.tar.xz mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz mysql-router-8.0.32-linux-glibc2.12-x86_64.tar.xz [root@node-centos7-70 ~]# tar xf mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz -C /usr/local/ [root@node-centos7-70 ~]# cd /usr/local [root@node-centos7-70 local]# ln -sv mysql-8.0.32-linux-glibc2.12-x86_64 mysql "mysql" -> "mysql-8.0.32-linux-glibc2.12-x86_64"
4、安装依赖包
[root@node-centos7-70 ~]# yum install -y libaio numactl-libs
5、设置PATH环境变量
[root@node-centos7-70 ~]# echo "PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh [root@node-centos7-70 ~]# . /etc/profile.d/mysql.sh
6、创建配置文件
[root@node-centos7-70 ~]# tee > /etc/my.cnf << EOF [mysqld] datadir=/data/mysql socket=/data/mysql/mysql.sock pid-file=/data/mysql/mysql.pid log-error=/data/mysql/mysql.log [client] socket=/data/mysql/mysql.sock EOF
7、创建数据库文件,并提取root密码
[root@node-centos7-70 ~]# mysqld --initialize --user=mysql --datadir=/data/mysql [root@node-centos7-70 ~]# grep password /data/mysql/mysql.log 2023-06-07T03:20:09.342795Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ,*9LyAr6wrr# [root@node-centos7-70 ~]# awk '/temporary password/{print $NF}' /data/mysql/mysql.log ,*9LyAr6wrr#
8、创建服务脚本,并启动服务
[root@node-centos7-70 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld [root@node-centos7-70 ~]# chkconfig --add mysqld [root@node-centos7-70 ~]# service mysqld start Starting MySQL... SUCCESS!
9、修改初始密码,测试访问数据库
[root@node-centos7-70 ~]# mysqladmin -uroot -p',*9LyAr6wrr#' password 'mysql' mysqladmin: [Warning] Using a password on the command line interface can be insecure. Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety. [root@node-centos7-70 ~]# mysql -uroot -pmysql mysql: [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 9 Server version: 8.0.32 MySQL Community Server - GPL Copyright (c) 2000, 2023, Oracle and/or its affiliates. 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> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec) mysql>
三、shell 二进制一键安装 Mysql => 5.7+
#!/bin/bash
#
#********************************************************************
#Author: janzen
#Date: 2023-06-07
#FileName: mysql_install.sh
#Description: The test script
#Copyright (C): 2023 All rights reserved
#********************************************************************
ERR="echo -e \033[1;31m"
SUC="echo -e \033[1;32m"
WAR="echo -e \033[1;33m"
RED="\033[1;31m"
GRE="\033[1;32m"
YEL="\033[1;33m"
END="\033[m"
VERSION=$1
VERSION=${VERSION:-'8.0.32'}
MAIN_VERSION=`echo ${VERSION: 0:3}`
MYSQL="mysql-$VERSION-linux-glibc2.12-x86_64.tar"
URL="https://cdn.mysql.com/archives/mysql-$MAIN_VERSION/"
SRC='/tmp/'
MYSQL_DATA=/data/mysql
PASSWD='mysql'
os_type(){
grep centos /etc/os-release &> /dev/null && { echo "centos";return 0;} || grep ubuntu /etc/os-release &> /dev/null && { echo ubuntu; return 0;} || grep "Red Hat" /etc/os-release &> /dev/null && { echo "rhel";return 0; } || { echo "";return 1;}
}
wait_sec(){
local ERR=${ERR:-"echo -e \e[1;31m"}
local SUC=${SUC:-"echo -e \e[1;32m"}
local WAR=${WAR:-"echo -e \e[1;33m"}
local RED=${RED:-"\e[1;31m"}
local GRE=${GRE:-"\e[1;32m"}
local YEL=${YEL:-"\e[1;33m"}
local END=${END:-"\e[m"}
local sec=$1
local STR=$2
local STR=${STR:-"Waiting for "}
local sec=${sec:-10}
local mark='>'
$WAR"$STR($sec s) ......"$END
for i in `eval echo {1..$sec}`;do
printf "$YEL Waiting: [%-${sec}s]%ds\r $END" "${mark}" "${i}"
mark=">${mark}"
sleep 1
done
echo
}
check() {
mysql -V &> /dev/null || mysqld -V &> /dev/null && { $ERR"Mysql 已安装,程序退出"$END; exit 1;}
[ $UID -ne 0 ] && { $ERR"当前用户非root用户,请切换用户后重试"$END; exit 1;}
[ -e /usr/local/mysql ] && { $ERR"Mysql 已存在,程序退出"$END; exit 1;}
[ -e "$SRC$MYSQL.xz" ] || [ -e "$SRC$MYSQL.gz" ] && $WAR"检测到程序包已存在 `ls $SRC$MYSQL*`"$END || DOWNLOAD=1
$SUC"初始环境检查完成"$END
echo
}
install_mysql() {
wait_sec $1 $2
if [ $DOWNLOAD ]; then
$WAR"本地安装程序不存在,开始联网下载程序包"$END
wget -P $SRC "$URL$MYSQL.xz" || wget -P $SRC "$URL$MYSQL.gz" || { $ERR"无法连接目标地址"$END;exit 1; }
fi
tar xf "$SRC$MYSQL.xz" -C /usr/local/ &> /dev/null || tar xf "$SRC$MYSQL.gz" -C /usr/local/ &> /dev/null || { $ERR"未找到目标安装包"$END;exit 1; }
MYSQL_DIR=`echo -e "$MYSQL" | sed -nr 's/(^.*)\.tar*/\1/p'`
cd /usr/local
[ -e $MYSQL_DIR ] && ln -sv $MYSQL_DIR mysql || { $ERR$MYSQL_DIR" not exists"$END;exit 1; }
id mysql > /dev/null || useradd -s /sbin/nologin -r mysql
mkdir -p $MYSQL_DATA
chown mysql.mysql $MYSQL_DATA
echo "PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh
chmod a+x /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
export "PATH=/usr/local/mysql/bin:$PATH"
if [ `os_type` == 'centos' ]; then
yum install -y libaio numactl-libs
elif [ `os_type` == 'ubuntu' ]; then
apt install -y libaio1 libaio-dev libncurses5-dev || { rm -f {/var/lib/apt/lists/lock,/var/cache/apt/archives/lock,/var/lib/dpkg/lock*}; dpkg --configure -a; sleep 5; apt install -y libaio1 libaio-dev libncurses5-dev; } && $SUC"安装依赖包成功"$END || { $ERR"安装依赖包失败"$END; exit 1;}
fi
tee > /etc/my.cnf << EOF
[mysqld]
datadir=$MYSQL_DATA
socket=$MYSQL_DATA/mysql.sock
pid-file=$MYSQL_DATA/mysql.pid
log-error=$MYSQL_DATA/mysql.log
[client]
socket=$MYSQL_DATA/mysql.sock
auto-rehash
[mysqladmin]
socket=$MYSQL_DATA/mysql.sock
EOF
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
mysqld --initialize --user=mysql --datadir=$MYSQL_DATA
DEFT_PASSWD=`awk '/temporary password/{print $NF}' $MYSQL_DATA/mysql.log`
/etc/init.d/mysqld start
if [ `os_type` == 'centos' ]; then
chkconfig --add mysqld
chkconfig on
elif [ `os_type` == 'ubuntu' ]; then
tee >> /lib/systemd/system/rc-local.service << EOF
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
EOF
tee > '/etc/rc.local' << EOF
#!/bin/bash
/etc/init.d/mysqld start
EOF
chmod a+x /etc/rc.local
ln -sf /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service
systemctl daemon-reload
systemctl restart rc-local.service
fi
mysqladmin -uroot -p"$DEFT_PASSWD" password "$PASSWD"
mysql -uroot -p"$PASSWD" -e "show databases;" &> /dev/null && $SUC"MySQL数据库运行成功"$END || { $ERR"MySQL数据库运行失败"$END;return 1; }
}
check
install_mysql 10 "即将开始安装数据库"