史上最全,五种方式安装MySQL,总有一款适合你

316 阅读5分钟

本文以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的教程,如果你是第一次安装,还是自己亲自动手试试比较好,感谢。