包管理器安装 MySQL
使用包管理器安装MySQL过程很简单,但是也存在一个问题,就是只能使用源里面提供的MySQL版本,相ubuntu2004的源就只提供了8.0版本的MySQL,如果要装5.7版本就没法装。
ubuntu
1、配置APT源
ubuntu自己的APT源里面就有MySQL,以ubuntu2004为例,可以直接用相关源就行了,也可以导入MySQL的官方源。
使用apt policy查看即可看到源中可以安装的版本信息,ubuntu2004默认安装的MySQL版本是 8.0.35 版本,ubuntu1804默认安装的是MySQL5.7.42版本。
apt policy mysql-server
2、安装MySQL
# 相关客户端工具会作为依赖被安装
sudo apt install mysql-server
说明: 安装过程中会有弹框提示输入本地使用socket登录mysql的密码信息。
centos
以为CentOS7为例,CentOS7的yum源中没有MySQL。因为在 MySQL 被甲骨文公司(Oracle)收购后,社区对 MySQL 的开源未来感到担忧。
由于这种担忧和对 Oracle 商业政策的不确定性,Red Hat(CentOS 的主要支持者之一)决定在其发行版中用 MariaDB 替换 MySQL。
Red Hat 做出这一决策是为了确保其发行版中提供的数据库解决方案能够继续保持开放和自由。所以要想让Centos7在线安装MySQL,需要配置官方的yum源才行。
1、配置yum源
下载地址:https://dev.mysql.com/downloads/repo/yum/
rpm -ivh mysql80-community-release-el7-11.noarch.rpm
yum clean all
yum makecache
2、安装 MySQL
yum源配置好后,直接安装就行了。这里有个问题就是 使用 yum --showduplicates list mysql-server 没法列出mysql的版本信息。
因为正确的名称是 mysql-community-server,但是使用yum install 的时候,这个软件包有一个别名叫作mysql-server。
# 相关客户端工具会作为依赖进行安装
yum install mysql-server
包管理器卸载 MySQL
ubuntu
1、删除软件包及相关文件
使用apt的puge选项,不仅会删除软件包,还会删除软件包的配置文件和数据
sudo apt purge mysql-server
这个步骤只是把mysql-server给删除了,但是APT 只会卸载 mysql-server 包本身及其配置文件。安装mysql-server自动安装的一些依赖包,不会在mysql-server删除的时候自动移除。
2、删除其它相关组件
现在主依赖包已被删除。为了移除这些不再需要的包,需要执行 sudo apt autoremove 命令。这个命令将自动删除所有不再被任何已安装软件包所需的软件包。
sudo apt autoremove
通过以上步骤就可以把mysql给全部移除,这样下载再安装mysql就不会有冲突了。
centos
centos和ubuntu就有所不同了,YUM 没有 purge 命令,所以需要使用 yum remove指令移除软件包,同时未被其他包依赖的依赖通常会一同被移除。
使用 yum remove指令不会移除配置文件还有数据目录,需要自己手动删除才行。
1、移除mysql
yum remove mysql-server
2、移除其它相关依赖
因为虽然使用 yum remove命令时,YUM 会自动移除指定的软件包以及由于依赖它而安装的包。
这意味着,如果其他软件包没有依赖这些额外安装的包,它们也会被移除。但是有些时候系统中安装了其他 MySQL 相关的软件包,例如mysql-common 等,这些包可能被看作独立的包,不直接依赖于 mysql-server,所以就不会被移除。
yum remove mysql*
3、删除相关文件
-
配置文件:一般是 /etc/mysql.cnf
-
数据文件:一般在/var/lib/mysql
二进制安装 MySQL
二进制安装可以理解为软件的可执行文件已经被提前编译好了,在二进制安装过程中,您不需要自己编译软件,只需进行简单的配置和安装步骤即可开始使用软件。这种安装方式省去了编译过程中的时间和潜在的复杂性。
MySQL 5.6
1、下载二进制包
官方网址:https://downloads.mysql.com/archives/community/
说明:
Linux - Generic意味着该软件包适用于所有基于 Linux 的发行版,包括但不限于 Red Hat, Ubuntu, Debian 等。
2、相关环境准备
(1)解压应用程序到指定目录
将上传到服务器的软件包解压后,重命名移动到/opt目录下:
mv mysql-5.6.51-linux-glibc2.12-x86_64 mysql-5.6
sudo mv mysql-5.6 /opt/
/opt 和 /usr/local区别:
-
/opt 目录:通常用于存放那些所有组件都在同一个目录中的完整应用程序。这些应用程序是自包含的,不会与系统的其他部分混合。
-
/usr/local 目录:用于存放按照 Unix 目录结构规则安装的应用程序组件。这些组件分布在不同的标准子目录中,例如可执行文件在 /usr/local/bin,库文件在 /usr/local/lib 等。
(2)配置PATH变量
root@ubuntu:~# echo 'PATH=/opt/mysql_5.6/bin:$PATH' > /etc/profile.d/mysql.sh
ehigh@ubuntu:/opt/mysql_5.6/bin$ source /etc/profile.d/mysql.sh
(3)创建mysql用户
通过使用专门的用户运行服务,可以确保该服务仅具有执行其所需任务所必需的权限,从而降低了系统遭受恶意攻击的风险。
groupadd -r -g 306 mysql
sudo useradd -r -g 306 -u 306 mysql
(4)创建配置文件
官方提供了模板配置文件,所以可以直接基于这个模板文件进行配置。在 support-files 子目录下有一个叫作 my-default.cnf的模板配置文件。
将文件模板拷贝一份到/etc下并重命名为my.cnf
sudo cp -a my-default.cnf /etc/my.cnf
编辑配置文件,指定相关信息
# mysqld服务端进程配置
[mysqld]
user = mysql
basedir = /opt/mysql_5.6
datadir = /mysql_data
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
server_id = 1
skip_name_resolve = ON
max_connections = 1024
# 需要指定为具体的文件名
log_error = /var/log/mysql/err.log
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# [mysql] # 仅影响 mysql 命令行客户端的行为
# 影响所有基于 MySQL 客户端库的应用程序,包括 mysql 命令行工具
[client]
socket=/var/run/mysqld/mysqld.sock
default-character-set=utf8mb4
说明:
basedir指定mysql应用程序的存放位置;datadir指定mysql的数据目录。因为后面我们会用mysql5.6自带的一个管理脚本来管理mysql,如果不指定这些参数,就会使用mysql.service脚本的默认配置来生成相关文件。
(5)mysql数据初始化
mysql5.6版本使用的是 mysql_install_db 这个脚本来实现基础数据的初始化。一般需要指定数据存放位置、运行 MySQL 服务器进程的系统用户名。
还有就是 MySQL 安装的根目录,指定安装位置的原因是该目录是MySQL 二进制文件、库、系统表和其他重要文件的所在位置。
sudo ./scripts/mysql_install_db --datadir=/mysql_data --user=mysql --basedir=/opt/mysql_5.6/
说明: 如果初始化过程中提示这个错误,需要安装libaio1这个库文件
nstalling MySQL system tables.../opt/mysql_5.6/bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
(6)编写服务文件
现在的Linux发行版系统用的都是Systemd作为init进程,所以可以直接编写一个systemd来管理MySQL。在mysql5.6的二进制安装包中,提供了一个叫作mysql.server的文件。可以通过systemd的service文件调用这个脚本实现mysql服务的管理。
sudo vim /lib/systemd/system/mysql.service
[Unit]
Description=MySQL Server 5.6.51
After=network.target
[Service]
Type=forking
User=mysql
Group=mysql
PIDFile=/var/run/mysqld/mysqld.pid
ExecStart=/etc/init.d/mysqld start
ExecStop=/etc/init.d/mysqld stop
ExecReload=/etc/init.d/mysqld reload
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
(8)启动测试
sudo systemctl daemon-reload
sudo systemctl start mysql.service