在本文中,将为您详细介绍 MySQL 数据库的两种安装方式:编译安装和二进制安装。无论您是新手还是有一定经验的开发者,相信这篇文章都能为您提供有价值的参考。
一、MySQL 的编译安装
(一)准备工作
首先,如果您的系统中安装有 Mariadb,需要先进行卸载。可以通过以下命令检查并卸载
[root@www ~]# rpm -q mariadb
mariadb-5.5.52-1.el7.x86_64
[root@www ~]# yum remove mariadb
注意:CentOS 系统默认安装了 mariadb-libs
包,这个包会在 /etc
下生成 Mariadb 的配置文件 my.cnf
,所以系统中默认会存在一个 my.cnf
的配置文件。
接下来,安装 MySQL 所需的依赖包
[root@www ~]# yum -y install gcc gcc-c++ ncurses-devel openssl openssl-devel
这里的 ncurses
是字符终端下屏幕控制的基本库,在 TTY 下登录到主机上运行 MySQL 时需要用到。而 OpenSSL
是一个开放源代码的软件库包,能让应用程序进行安全通信,避免窃听,同时确认另一端连接者的身份。
然后,安装 cmake
编译工具:
[root@www ~]# tar zxf cmake-3.16.2.tar.gz
[root@www ~]# cd cmake-3.16.2
[root@www cmake-3.16.2]#./configure
[root@www cmake-3.16.2]# gmake && gmake install
最后,安装 boost
库:
[root@www ~]# tar zxvf boost_1_59_0.tar.gz
[root@www ~]# mv boost_1_59_0/ /usr/local/boost
要知道,Boost
库是为 C++
语言标准库提供扩展的一些 C++
程序库的总称,由 Boost
社区组织开发、维护。它能够与 C++
标准库完美协同工作,并且为其提供扩展功能。而 MySQL
正是使用 C
语言和 C++
语言编写的。
(二)源码编译及安装 MySQL
1.创建运行用户:
[root@www ~]# useradd -M -s /sbin/nologin mysql
2.解包:
[root@www ~]# tar zxvf mysql-5.7.28.tar.gz
[root@www ~]# cd mysql-5.7.28
3.配置:
[root@www mysql-5.7.28]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_BOOST=/usr/local/boost
这里的各个参数都有其特定的作用,比如 -DSYSCONFDIR
用于指定初始化配置文件目录,-DDEFAULT_CHARSET
用来指定默认使用的字符集编码,像 utf8
,而 -DDEFAULT_COLLATION
则指定默认使用的字符集校对规则,如 utf8_general_ci
适用于 UTF-8
字符集的通用规则。-DWITH_EXTRA_CHARSETS
用于指定额外支持的其他字符集编码,-DWITH_BOOST
是指定 boost
库的位置,要注意,MySQL5.7
版本编译安装时必须添加这个参数。
4.编译并安装:
[root@www mysql-5.7.28]# make
[root@www mysql-5.7.28]# make install
(三)安装后的调整
1.建立配置文件:
[root@www ~]# vim /etc/my.cnf
[client]
socket=/usr/local/mysql/data/mysql.sock [mysqld]
socket=/usr/local/mysql/data/mysql.sock
#绑定监听地址 0.0.0.0
bind-address = 0.0.0.0
skip-name-resolve
#设置 3306 端口
port = 3306
# 设置 mysql 的安装目录
basedir=/usr/local/mysql
# 设置 mysql 数据库的数据的存放目录
datadir=/usr/local/mysql/data
# 允许最大连接数
max_connections=2048
# 服务端使用的字符集默认为 utf8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#表名大小写不敏感
lower_case_table_names=1
#mysql服务允许接受的数据包最大值
max_allowed_packet=16M[mysqld_safe]
log-error=/usr/local/mysql/data/error.log
#pid-file=/var/run/mariadb/mariadb.pid
需要注意的是,[mysqld_safe]
部分的 log-error
只有在使用 mysqld_safe
启动时才会生成。如果希望在初始化 MySQL
后马上生成这个日志文件,可以将 log-error
写入到 [mysqld]
中。
2.初始化数据库:
[root@www mysql-5.7.28]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
请务必记下初始密码,并且要知道,如果想要重新初始化,需要删除数据目录。
3.设置环境变量:
[root@www mysql-5.7.28]#echo "export PATH=$PATH:/usr/local/mysql/bin">> /etc/profile
[root@www mysql-5.7.28]#. /etc/profile
(四)添加系统服务
[root@www mysql-5.7.28]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@www mysql-5.7.28]# chmod +x /etc/rc.d/init.d/mysqld将 MySQL 添加为 systemd 标准服务,之后方便使用“systemctl”命令进管理[root@www ~]# vim /lib/systemd/system/mysqld.service
[Unit]
Description=mysqld
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.d/init.d/mysqld start
ExecReload=/etc/rc.d/init.d/mysqld restart
ExecStop=/etc/rc.d/init.d/mysqld stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target [root@www ~]# systemctl daemon-reload
[root@www ~]# systemctl enable mysqld
[root@www ~]# systemctl start mysqld
[root@www ~]# systemctl status mysqld
[root@www ~]# netstat -anpt | grep mysqld
至此,源码包编译安装完成。
二、MySQL 的二进制安装
(一)基础环境准备
首先执行以下命令:
[root@www ~]# yum -y install gcc vim wget net-tools lrzsz libaio
备注:libaio
是 Linux 版本的 aio
库,aio
指的是异步 IO
。
(二)创建运行用户
[root@www ~]# useradd -M -s /sbin/nologin mysql
(三)关闭防火墙
执行以下命令关闭防火墙:
[root@www ~]# sed -i '/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
[root@www ~]# setenforce 0
[root@www ~]# systemctl disable firewalld
[root@www ~]# systemctl stop firewalld
(四)二进制安装
[root@www ~]# tar zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
[root@www ~]# mv mysql-5.7.28-linux-glibc2.12-x86_64 /usr/local/mysql
[root@www ~]# mkdir /usr/local/mysql/data
[root@www ~]# chown -R mysql.mysql /usr/local/mysql/data
[root@www ~]# cd /usr/local/mysql/bin
[root@www ~]#./mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize
(五)设定配置文件
[root@www ~]# vim /etc/my.cnf
[client]
socket=/usr/local/mysql/data/mysql.sock [mysqld]
socket=/usr/local/mysql/data/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
port = 3306
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
max_connections=2048
character-set-server=utf8
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M[mysqld_safe]
log-error=/usr/local/mysql/data/error.log
#pid-file=/var/run/mariadb/mariadb.pid
备注:skip-name-resolve
用于跳过名称解析。所谓反向解析是这样的:MySQL
接收到连接请求后,获得的是客户端的 ip
,为了更好地匹配 mysql.user
里的权限记录(某些是用 hostname
定义的)。如果 MySQL
服务器设置了 dns
服务器,并且客户端 ip
在 dns
上并没有相应的 hostname
,那么这个过程会很慢,导致连接等待。添加 skip-name-resolve
以后就可以跳过这个过程了。
然后执行以下命令:
[root@www ~]# echo "export PATH=$PATH:/usr/local/mysql/bin">> /etc/profile
[root@www ~]#. /etc/profile
(六)配置 systemctl 方式启动
[root@www ~]# cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@www ~]# chmod +x /etc/rc.d/init.d/mysqld[root@www ~]# vim /lib/systemd/system/mysqld.service
[Unit]
Description=mysqld
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.d/init.d/mysqld start
ExecReload=/etc/rc.d/init.d/mysqld restart
ExecStop=/etc/rc.d/init.d/mysqld stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
备注:Type
的不同取值有着不同的含义和适用场景。
Type=oneshot
适用于只执行一项任务、随后立即退出的服务。可能需要同时设置RemainAfterExit=yes
使得systemd
在服务进程退出之后仍然认为服务处于激活状态。Type=notify
与Type=simple
相同,但约定服务会在就绪后向systemd
发送一个信号。这一通知的实现由libsystemd-daemon.so
提供。Type=dbus
若以此方式启动,当指定的BusName
出现在DBus
系统总线上时,systemd
认为服务就绪。Type=idle
意味着systemd
会等待所有任务处理完成后,才开始执行idle
类型的单元。其他行为与Type=simple
类似。Type=forking
表示systemd
认为当该服务进程fork
,且父进程退出后服务启动成功。对于常规的守护进程(daemon
),除非您确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定PIDFile=
,以便systemd
能够跟踪服务的主进程。Type=simple
表示systemd
认为该服务将立即启动。服务进程不会fork
。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket
激活型。
备注:在 Linux 中,fork
函数是非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。当一个进程调用 fork()
函数后,系统先给新的进程分配资源,然后把原来的进程的所有值都复制到新的新进程中。这样就把新的进程创建了出来,在 fork
函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。当子进程创建好后,这个父进程就退出,也代表该服务创建成功。
接下来执行以下命令:
[root@www ~]# systemctl daemon-reload
[root@www ~]# systemctl enable mysqld
[root@www ~]# systemctl start mysqld
[root@www~]# netstat -tunlp|grep 3306
(七)访问 MySQL 数据库
[root@www ~]# mysql -u root -p
mysql>set password =password('pwd123');
希望通过上述详细的步骤和说明,能够帮助您顺利完成 MySQL 数据库的安装,并能够正常使用。祝您在数据库的世界中畅游无阻!