本文以MySQL5.7为例介绍五种MySQL安装方式:
yum/dnf
rpm包
源码编译安装
tar包开箱即用
shell脚本一键安装
无论用哪种方式安装,我们要做的第一件事就是先卸载之前安装的残留: 卸载安装的MySQL和Mariadb:
rpm -qa|grep mysql|xargs rpm -e
rpm -qa|grep mariadb|xargs rpm -e
YUM——从仓库安装
安装MySQL Yum仓库:
rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
这个存储库中包含了MySQL各个版本的repo,接下来禁用默认存储库mysql80并启用mysql57的存储库:
yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community
如果系统提示没有yum-config-manager 这个命令,先安装这个工具,yum install yum-utils -y,然后使用yum命令安装MySQL:
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
yum install mysql-community-server -y
注意:不能直接
yum install mysql,这个命令只会安装MySQL客户端及其依赖,不会安装server.
查看MySQL版本:
[root@budong ~]# mysql -V
mysql Ver 14.14 Distrib 5.7.44, for Linux (x86_64) using EditLine wrapper
登录验证,首先找到MySQL分配的临时密码:
[root@budong ~]# cat /var/log/mysqld.log |grep password
2024-07-08T16:53:34.763692Z 1 [Note] A temporary password is generated for root@localhost: iK!2Io-+upva
用mysql命令登录,由于时临时密码,所以必须修改密码才能对数据库进行操作,yum安装的MySQL默认是严格模式,密码必须满足复杂度要求,至少八位且包含大小写字母,数字和符号:
[root@budong opt]# mysql -uroot -p
Enter password:
mysql> alter user root@localhost identified by "Mysql@Hank3306";
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.44 |
+-----------+
RPM——二进制安装
通过在MySQL官网下载的rpm包来安装MySQL:
现在安装的mysql相关的包:
[root@budong ~]# rpm -qa|grep mysql
mysql80-community-release-el7-3.noarch
mysql-community-libs-5.7.44-1.el7.x86_64
mysql-community-common-5.7.44-1.el7.x86_64
mysql-community-libs-compat-5.7.44-1.el7.x86_64
mysql-community-client-5.7.44-1.el7.x86_64
mysql-community-server-5.7.44-1.el7.x86_64
在浏览器打开MySQL官方下载地址选择自己想要的版本,复制下载链接,使用wget命令下载文件直接下载BUNDLE,这个包里包含所有安装mysql相关的包,但会有用不到的:
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44-1.el7.x86_64.rpm-bundle.tar
这里我用第二种方法,逐一下载,只需要下列四个:server、client、commen、libs:
[root@budong opt]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-community-server-5.7.44-1.el7.x86_64.rpm https://downloads.mysql.com/archives/get/p/23/file/mysql-community-client-5.7.44-1.el7.x86_64.rpm https://downloads.mysql.com/archives/get/p/23/file/mysql-community-common-5.7.44-1.el7.x86_64.rpm https://downloads.mysql.com/archives/get/p/23/file/mysql-community-libs-5.7.44-1.el7.x86_64.rpm
查看下载的rpm包:
[root@budong opt]# ll
total 223800
-rw-r--r--. 1 root root 32675564 Oct 12 2023 mysql-community-client-5.7.44-1.el7.x86_64.rpm
-rw-r--r--. 1 root root 320884 Oct 12 2023 mysql-community-common-5.7.44-1.el7.x86_64.rpm
-rw-r--r--. 1 root root 3093304 Oct 12 2023 mysql-community-libs-5.7.44-1.el7.x86_64.rpm
-rw-r--r--. 1 root root 193071528 Oct 12 2023 mysql-community-server-5.7.44-1.el7.x86_64.rpm
在逐个安装这些包时,由于包之间存在依赖关系,要严格按照commen>libs>client>server的顺序进行安装:
[root@budong opt]# rpm -ivh mysql-community-common-5.7.44-1.el7.x86_64.rpm
[root@budong opt]# rpm -ivh mysql-community-libs-5.7.44-1.el7.x86_64.rpm
[root@budong opt]# rpm -ivh mysql-community-client-5.7.44-1.el7.x86_64.rpm
[root@budong opt]# rpm -ivh mysql-community-server-5.7.44-1.el7.x86_64.rpm
也有更简单的办法,下面这个命令会自动识别安装顺序,不需要再纠结包之间的依赖关系:
[root@budong opt]# rpm -ivh mysql*
查看安装的MySQL及其版本:
[root@budong opt]# rpm -qa|grep mysql
mysql-community-common-5.7.44-1.el7.x86_64
mysql-community-client-5.7.44-1.el7.x86_64
mysql-community-libs-5.7.44-1.el7.x86_64
mysql-community-server-5.7.44-1.el7.x86_64
[root@budong opt]# mysql -V
mysql Ver 14.14 Distrib 5.7.44, for Linux (x86_64) using EditLine wrapper
编译——定制安装
通过yum安装和rpm安装非常方便,因为这些包都是编译好的,但这两种安装方式有一定的局限性,比如无法指定安装目,有时会遇到缺少脚本的问题,如mysqld_safe,mysqld_multi等。如果想”定制“的安装MySQL,那么就需要通过编译源码的方式进行安装。
MySQL5.7.44源码包下载:
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz
解压并进入解压好的文件夹:
[root@budong opt]# tar -zxf mysql-boost-5.7.44.tar.gz
[root@budong opt]# cd mysql-5.7.44
创建运行MySQL的用户和组:
[root@budong mysql-5.7.44]# groupadd mysql
[root@budong mysql-5.7.44]# useradd -r -g mysql -s /bin/false mysql
安装编译所需要的环境和依赖
[root@budong mysql-5.7.44]# yum install cmake gcc gcc-c++ openssl openssl-devel ncurses ncurses-devel libarchive libtirpc libtirpc-devel bison bison-devel perl perl-devel -y
编译参数配置:
[root@budong mysql-5.7.44]# cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/db \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_BOOST=boost \
-DWITH_EMBEDDED_SERVER=1
这些编译参数可以灵活选择进行编辑,安装完成后还可以修改,如果只想进行简单的配置,下面这条命令是个不错的选择,它将会把所有参数置为默认值:
cmake -DWITH_BOOST=boost
编译并安装:
[root@budong mysql-5.7.44]# make -j$(nproc) && make install
等待几分钟,具体时间取决于系统cpu核数和性能,100%完成后,开始初始化数据库:
[root@budong mysql-5.7.44]# mkdir -p /data/db
[root@budong mysql-5.7.44]# /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/db
在上面的初始化参数中:
- --initialize-insecure:初始化时不生成mysql管理员root的密码,后续可以直接使用mysql命令进行登录。
- --initialize:初始化时生成一个随机密码,这个密码默认会显示在mysql的日志文件中(/var/log/mysql.log),并且密码将启用严格模式,对密码复杂度有严格的要求,后续修改密码必须包含大写字母、小写字母、数字、符号中三种或三种以上的类型。
- --user:指定初始化数据库的用户。
- --basedir:指定mysql主程序的安装目录。
- --datadir:指定mysql数据文件的安装目录,初始化前此目录必须为空,否则会报错。
编辑MySQL的配置文件 /etc/my.cnf,mysql的配置文件名为my.cnf,mysql启动时,会自动寻找/etc/my.cnf文件,如果找不到,就会去安装目录找,如果还是找不到,就自动搜索~/.my.cnf。如果mysql安装完成后,没有这个文件,需要自己手动创建:
[root@budong mysql-5.7.44]# cat >/etc/my.cnf<<EOF
basedir=/usr/local/mysql
datadir=/data/db
socket=/tmp/mysql.sock
log-error=/var/log/mysqld.log
EOF
设置启动脚本,复制service文件到/etc/init.d/,方便后面用systemd管理MySQL:
[root@budong mysql-5.7.44]# cp mysql.server /etc/init.d/mysqld
[root@budong mysql-5.7.44]# systemctl deamon-reload
[root@budong mysql-5.7.44]# systemctl start mysqld
配置环境变量:
[root@budong mysql-5.7.44]# echo "PATH=/usr/local/mysql/bin:#PATH" >> /etc/profile
[root@budong mysql-5.7.44]# source /etc/profile
登录验证:
[root@budong mysql-5.7.44]# mysql -uroot
mysql> select version();
+------------+
| version() |
+------------+
| 5.7.44-log |
+------------+
压缩包-开箱即用
除此之外官网还提供了解压即用的MySQL,解压后只需要进行简单的配置即可使用,不再需要编译安装,这里我直接贴上所有操作步骤:
[root@budong opt]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44-el7-x86_64.tar
[root@budong opt]# tar -xf mysql-5.7.44-el7-x86_64.tar
[root@budong opt]# tar -zxf mysql-5.7.44-el7-x86_64.tar.gz
[root@budong opt]# groupadd mysql
[root@budong opt]# useradd -r -g mysql -s /bin/false mysql
[root@budong opt]# mv ./mysql-5.7.44-el7-x86_64 /usr/local/mysql
[root@budong opt]# chown -R mysql:mysql /usr/local/mysql
[root@budong opt]# /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/db
[root@budong opt]# chown -R root /usr/local/mysql
[root@budong opt]# echo "PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile
[root@budong opt]# source /etc/profile
[root@budong opt]# cat >/etc/my.cnf<<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/db
socket=/tmp/mysqld.sock
log-error=/var/log/mysqld.log
EOF
[root@budong opt]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@budong opt]# systemctl deamon-reload
[root@budong opt]# systemctl start mysqld
shell脚本一键安装
下面是安装MySQL的脚本,本质上是通过tar包安装,也就是把上面的命令写成了脚本:
!/bin/bash
# author budong
echo "[info] Start installing..."
yum install wget libaio -y >/dev/null 2>&1
rpm -qa|grep mysql|xargs rpm -e >/dev/null 2>&1
rpm -qa|grep mariadb|xargs rpm -e >/dev/null 2>&1
echo "[info] Downloading MySQL tarball file..."
wget -O /opt/mysql.tar.xz https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
if [ $? == 0 ];then
echo "[info] Download complete,unpacking tartball file"
else
echo "[error] Download failed,please cheak your network! process exit."
exit 1
fi
[ -d /usr/local/mysql ] || mkdir -p /usr/local/mysql
echo "[info] unpacking tarball file... "
tar -xf /opt/mysql.tar.xz -C /usr/local/mysql --strip-components=1
echo "[info] create user and group for mysql "
id -g mysql >/dev/null 2>&1|| groupadd mysql
id -u mysql >/dev/null 2>&1|| useradd -r -g mysql -s /bin/false mysql
[ -d /data ] || mkdir -p /data
chown -R mysql.mysql /usr/local/mysql
echo "export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql80/lib" >>/etc/profile && source /etc/profile
echo "[info] Edit /etc/my.cnf "
cat >/etc/my.cnf<<EOF
[mysqld]
basedir = /usr/local/mysql
datadir = /data/db
port = 3306
socket = /tmp/mysql.sock
log-error = mysqld.log
# charset
character-set-server = utf8mb4
EOF
echo "[info] Initializing MYSQL"
mysqld --initialize-insecure --user=mysql
if [ $? == 0 ];then
echo "[info] Initialize successful,starting mysql-server"
else
echo "[error] Initialize failed,please try again"
exit 1
fi
chown -R mysql.mysql /data/db
chown -R root /usr/local/mysql
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql.server
systemctl daemon-reload
systemctl start mysql
把这个脚本写入到一个脚本文件,如mysql-install.sh,通过source命令或者 . mysql-install.sh,注意中间必须有空格,如果使用bash直接执行脚本,会发现mysql命令找不到,这是因为把社会创建一个子进程,MySQL会被成功按住哪个,但是需要重新再执行一次source /etc/profile,所以我推荐使用source命令直接在当前shell执行。另外由于使用--initialize-insecure参数初始化,首次登录是不需要密码的。
结语
上面写的过程难免会有纰漏之处,各位看官如有发现还望不吝赐教,我也写过一些自动安装mysql的教程,如果你是第一次安装,还是自己亲自动手试试比较好,感谢。