前言

环境:Centos 8.2
官方对mysql的安装提供了很多种安装方式
第1种是,yum安装;
第2种是,直接解压预编译过的二进制包安装;
第3种是,rpm包安装;
第4种是,使用cmake编译源码包安装;
下面分别对这4种生产环境最常用的安装方式来讲解,根据自己的linux操作系统版本已经自己所需的mysql版本,各个不同的mysql版本安装都是一样的。

yum安装mysql

Yum安装mysql是最方便的,yum安装有一个不好的地方,那就是没办法自定义安装路径;
首先去官网下载mysql最新的自己想要的版本的yum的镜像仓库rpm包;

[root@web03 ~]# wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm	#先下载mysql的镜像仓库
[root@web03 ~]# md5sum mysql80-community-release-el8-1.noarch.rpm							#MD5校验
[root@web03 ~]# ls /etc/yum.repos.d/mysql*													#查看yum仓库没有mysql源的
[root@web03 ~]#  yum install mysql80-community-release-el8-1.noarch.rpm						#安装刚才下载的mysql仓库包
[root@web03 ~]# ls /etc/yum.repos.d/mysql*													#查看yum仓库有了mysql镜像源
mysql-community.repo  mysql-community-source.repo

# 搜索mysql的版本,显示有这个mysql-community-server.x86_64 就行,我们要装的就是这个mysql-community-server.x86_64 ,如果显示没有
# mysql-community-server.x86_64 ,那就把原来的BaseOS和AppStream禁用
[root@web03 yum.repos.d]# yum search mysql| grep mysql-community-server									

[root@web03 yum.repos.d]# vim   CentOS-Linux-BaseOS.repo						#把原来的源先禁用enable=0
[root@web03 yum.repos.d]# vim  CentOS-Linux-AppStream.repo						#把原来的源先禁用enable=0

[root@web03 ~]# yum install mysql-community-server								#开始安装mysql-community-server																	

# 第一次启动mysql服务,会在/var/lib/mysql/目录下生产一堆文件,初始root登录密码也在里面
[root@web03 ~]# systemctl start mysqld.service									#启动mysql																		

[root@web03 mysql]# grep "password" /var/log/mysqld.log							#查看root初始登录密码														

预编译的glibc二进制包安装mysql

从官方网站https://dev.mysql.com/doc/refman/8.0/en/binary-installation.html(有空多读读官方文档)得知,mysql还发行了一种预编译过的二进制包,所以我们只需要解压包并初始化数据库即可使用mysql,那哪种才是二进制包呢?
在这里插入图片描述
由上图的官网可知,带有xxxx.xxx.tar.xz结尾的才是二进制包,下面我们去官方找一下二进制安装包:
在这里插入图片描述
可知,这种包需要用到glibc,查看自己的Linux服务器上glibc是多少版本的(rpm -qa | grep glibc),然后才去下载对应版本的mysql二进制包即可。
这里我下载了mysql-8.0.25-linux-glibc2.12-x86_64.tar.xz

下面是具体二进制安装mysql步骤如下:

[root@web02 ~]# rpm -qa | grep glibc 					#查看本机的glibc版本后下载对应的mysql二进制包
[root@web02 ~]# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.25-linux-glibc2.12-x86_64.tar.xz
[root@web02 ~]# yum install libaio						#官方说要安装这个libaio依赖包
[root@web02 ~]# yum install  ncurses-compat-libs		#官方说要安装ncurses-compat-libs依赖包(建议直接yum install ncurses*)

[root@web02 ~]# xz -d mysql-8.0.25-linux-glibc2.12-x86_64.tar.xz		#使用xz命令解压tar.xz包,解压后压缩包消失
[root@web02 ~]# tar -xvf mysql-8.0.25-linux-glibc2.12-x86_64.tar		#上一步解压得到了一个tar包,继续解包

# 下面我们参照官网的安装说明执行下面的目录
shell> groupadd mysql													#创建一个mysql组
shell> useradd -r -g mysql -s /bin/false mysql							#创建一个系统用户mysql,并且指定属组,以及不能登录			
shell> cd /usr/local
shell> tar xvf /path/to/mysql-VERSION-OS.tar.xz							#如果tar不支持直接解压tar.xz包,可以执行上面的那两条命令
shell> ln -s full-path-to-mysql-VERSION-OS mysql						#创建一个mysql软链接,这个mysql链接到实际mysql目录
shell> cd mysql
shell> mkdir mysql-files												#创建一个mysql-files目录
shell> chown mysql:mysql mysql-files									#改变mysql-files目录的属主属组
shell> chmod 750 mysql-files											#对mysql-files目录授权
shell> bin/mysqld --initialize --user=mysql								#初始化数据目录,会生成root初始登录密码
shell> bin/mysql_ssl_rsa_setup											#配置自动支持安全连接
shell> bin/mysqld_safe --user=mysql &									#启动mysql服务
shell> cp support-files/mysql.server /etc/init.d/mysql.server			#将mysql的启动文件复制到/etc/init.d目录下
shell>echo 'PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile			#配置环境变量
shell>echo 'export PATH' >> /etc/profile								#配置环境变量

[root@web02 share]# service mysql.server start							#启动数据库,未完,继续往下看
Shutting start MySQL.. SUCCESS!

成功开启mysql数据库,但是仔细观察的朋友就会发现,上面的步骤并没有复制或创建my.cnf文件,ls support-files/查看support-files目录发现并没有以.cnf结尾的配置文件,那么mysql是怎么启动的呢?一种说法是mysql采用了最小默认值的方式启动的,这里存疑,我们来看官网解释:

在这里插入图片描述
从上图得知,mysql8中已经不再提供默认的.cnf配置文件,所以 ls support-files/查看support-files目录发现并没有以.cnf结尾的配置文件,同时查看mysql.server文件,

[root@web02 support-files]# cat mysql.server
 28  # If you install MySQL on some other places than /usr/local/mysql, then you
    29  # have to do one of the following things for this script to work:
    30  #
    31  # - Run this script from within the MySQL installation directory
    32  # - Create a /etc/my.cnf file with the following information:
    33  #   [mysqld]
    34  #   basedir=<path-to-mysql-installation-directory>
    35  # - Add the above to any other configuration file (for example ~/.my.ini)
    36  #   and copy my_print_defaults to /usr/bin
    37  # - Add the path to the mysql-installation-directory to the basedir variable
    38  #   below.
    39  #
    40  # If you want to affect other MySQL variables, you should make your changes
    41  # in the /etc/my.cnf, ~/.my.cnf or other MySQL configuration files.
    42

第28行也说可以自己创建一个/etc/my.cnf文件,那这里从其他地方复制一个/etc/my.cnf文件过来。

#从其他安装有mysql的服务器上复制一个my.cnf配置文件过去之后需要改一下my.cnf的参数
shell>scp /etc/my.cnf root@192.168.43.229:/etc/		
shell> service mysql.server stop					#停止mysql服务
shell> service mysql.server start					#重新启动mysql服务,这样mysql就能读取/etc/my.cnf配置文件内容了

rpm包安装mysql

mysql官网还提供了rpm包来安装mysql服务,这种rpm包其实是一个Bundle包,其实捆绑了很多rpm包,所以很大,https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.38-1.el7.x86_64.rpm-bundle.tar

mkdir mysql
cd mysql/
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.38-1.el7.x86_64.rpm-bundle.tar
tar xf mysql-5.7.38-1.el7.x86_64.rpm-bundle.tar 
rpm -qa | grep mariadb
rpm -e --nodeps  mariadb-libs-5.5.68-1.el7.x86_64
ls /etc/my*
rpm -ivh mysql-community-common-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-embedded-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-embedded-compat-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-embedded-devel-5.7.38-1.el7.x86_64.rpm
which mysqld
id mysql
#开始初始化mysql
mysqld --initialize --user=mysql
systemctl start mysqld
systemctl status  mysqld
systemctl enable  mysqld
grep "password" /var/log/mysqld.log
which mysql
mysql -uroot -p#%b9oE67kaj4
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Aa123456';
use mysql;
update user set host='%' where user='root';
FLUSH PRIVILEGES;
exit;
systemctl  restart mysqld

源码包cmake编译安装mysql

使用cmake进行源码编译安装mysql,官网安装文档在https://dev.mysql.com/doc/refman/5.7/en/automatic-start.html,首先下载mysql的源码包,如下,本次安装mysql-5.7.38版本。
在这里插入图片描述

编译参数说明

参数说明
-DCMAKE_INSTALL_PREFIXmysql的安装目录
-DMYSQL_DATADIR数据文件存储路径
-DSYSCONFDIR配置文件路径(my.cnf)
-DENABLED_LOCAL_INFILE=1使用localmysql客户端的配置
-DWITH_PARTITION_STORAGE_ENGINE是mysql支持分表
-DEXTRA_CHARSETS安装支持的字符集
-DDEFAULT_CHARSET指定默认的字符集
-DDEFAULT_COLLATION连接字符集
-DWITH_SSL开启mysql的ssl的使用
--basedir  安装mysql的目录
--datadir  数据文件存储路径 
--user 		指定mysql使用的用户
yum install cmake
yum install  ncurses-devel
yum -y install openssl-devel
`id mysql` &> /dev/null
[ $? -ne 0 ] && groupadd mysql && useradd -r -g mysql -s /bin/false -M mysql

cd /opt/
#官网显示必须安装 Boost 1.59.0 ,说以下载Boost 1.59.0
wget https://udomain.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
tar -zxvf boost_1_59_0.tar.gz -C /usr/local/
ll /usr/local/boost_1_59_0
#下载mysql源码包,源码包解压之后有很多CMake字样的文件,千万不要下载错源码包了
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.38.tar.gz
tar -zxvf mysql-5.7.38.tar.gz
cd mysql-5.7.38
#使用cmake命令开始编译
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_BOOST=/usr/local/boost_1_59_0 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_SSL=system

#make 这步会耗时很久,如果依赖报错了,需要自己解决依赖,如果还是不行,那重新删除mysql-5.7.38目录重新解压看看吧(笔者
# 也是make 这一步报了很多编译错误,解决起来很麻烦,然后删除mysql-5.7.38目录重新解压重新make 就成功了,其实官网安装文档也提示,
#当你重新cmake之前,需要执行make clean、rm CMakeCache.txt来进行删除之前的缓存配置)
make -j 4
make install			
rm -rf /etc/my.cnf
#这个源码包没有提供my.cnf配置文件
# cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
chown -R mysql:mysql /usr/local/mysql
cd /usr/local/mysql/bin
./mysqld --initialize --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
service mysqld start 
chkconfig --add mysqld
echo 'PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile

#指定安全验证,进行删除匿名用户,删除测试数据库
cd /usr/local/mysql/bin && ./mysql_secure_installation
#登录验证
mysql -uroot -p
mysql> show database;

最后mysql已经安装完成
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐