Linux 安装MySQL 步骤
通过包管理器安装 MySQL
ubuntu安装 MySQL
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安装 MySQL
以为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卸载 MySQL
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卸载 MySQL
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、解压到指定目录
将上传到服务器的软件包解压后,重命名移动到/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、相关环境准备
(1)配置PATH变量
echo 'PATH=/opt/mysql_5.6/bin:$PATH' > /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
(2)创建mysql用户
通过使用专门的用户运行服务,可以确保该服务仅具有执行其所需任务所必需的权限,从而降低了系统遭受恶意攻击的风险。
sudo groupadd -r -g 306 mysql
sudo useradd -r -g 306 -u 306 mysql
(3)创建配置文件
官方提供了模板配置文件,所以可以直接基于这个模板文件进行配置。在 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
需要提前创建好相关目录和改变权限:
sudo chown -R mysql:mysql /opt/mysql_5.6
sudo mkdir /mysql_data; sudo chown -R mysql:mysql /mysql_data
sudo mkdir /var/log/mysql; sudo chown mysql:mysql /var/log
说明:
basedir指定mysql应用程序的存放位置;datadir指定mysql的数据目录。因为后面我们会用mysql5.6自带的一个管理脚本来管理mysql,如果不指定这些参数,就会使用mysql.service脚本的默认配置来生成相关文件。
(4)基础数据初始化
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
(5)编写service文件
在mysql5.6的二进制安装包中,提供了一个叫作mysql.server的文件。
如果当前系统的初始进程是 system V init进程。将这个脚本移动到/etc/init.d/目录下,然后使用service命令即可对mysql进行管理
cp -a mysql.service /etc/init.d/
chkconfig --add mysqld
service mysqld start
如果当前系统的初始进程是systemd 进程,就需要要手动编写一个systemd的service文件,用于将mysql进程交给systemd进行托管
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
(6)启动测试
sudo systemctl daemon-reload
sudo systemctl start mysql.service
二进制安装 MySQL 5.7
1、下载程序包
下载地址:https://downloads.mysql.com/archives/community/
2、解压到指定目录
上传到服务器解压后,重命名并且移动到/opt目录下
sudotar -xzf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
sudomv mysql-5.7.44-linux-glibc2.12-x86_64 mysql-5.7
sudomv mysql-5.7 /opt/
sudo chown -R /opt/mysql-5.7
3、相关环境配置
(1)配置PATH变量
echo "PATH=/opt/mysql-5.7/bin:$PATH" > /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
(2)创建mysql用户
sudo groupadd -r -g 306 mysql
sudo useradd -r -g 306 -u 306 mysql
(3)创建配置文件
mysql5.7的二进制包里面好像没提供配置文件的模板,我们就自己在/etc下创建一个名为my.cnf的配制文件
sudo vim /etc/my.cnf
[mysqld]
# 运行mysql服务的用户
user = mysql
# 相关目录指定
datadir = /data
basedir = /opt/mysql-5.7
tmpdir = /tmp
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
bind-address = 0.0.0.0
skip_name_resolve = ON
log_error = /var/log/mysql/err.log
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 客户端配置
[client]
socket=/var/run/mysqld/mysqld.sock
default-character-set=utf8mb4
说明:
数据目录和存放日志文件的目录要提前创建好,并更改权限
sudo mkdir /data; sudo chown mysql:mysql /data;
sudo mkdir /var/log/mysql; sudo chown mysql:mysql /var/log/mysq;
(4)初始化基本数据
初始化过程可能需要对数据目录进行写入操作,而这通常需要较高的权限,所以一般需要以root用户身份来执行这个操作。
如果不指定user和datadir参数,MySQL 会尝试使用配置文件中的相应配置选项。
root@ubuntu:~# mysqld --initialize-insecure --user=mysql --datadir=/data/
说明:
如果配置文件已经指定了这些参数,再进行初始化的时候可以忽略。从mysql5.7.6开始就是使用 mysqld --initialize或 --initialize-insecure 来初始化mysql的基本数据。
(5)创建service文件
在mysql的二进制安装包中,位于support-files目录下有一个名为 mysql.server 的脚本文件,这个脚本文件是SysV init 系统中用来管理MySQL的脚本。
如果当前系统的初始进程是 system V init进程。将这个脚本移动到/etc/init.d/目录下,然后使用service命令即可对mysql进行管理
cp -a mysql.service /etc/init.d/
chkconfig --add mysqld
service mysqld start
如果当前系统的初始进程是systemd进程,就需要手动编写mysql的service文件:
方案一:
按照上面给MySQL5.6编写service脚本一样,service脚本中调用提供的脚本文件来实现对mysql服务的管理。这里略过,操作方法和上面一样的。
方案二:
自己手动写一个管理mysql的service,其实就是运行mysqld进程,然后加上一些必要的参数就行了。
sudo vim /lib/systemd/system/mysql.service
[Unit]
Description=MySQL Community Server
After=network.target
[Install]
WantedBy=multi-user.target
[Service]
Type=forking
User=mysql
Group=mysql
PIDFile=/var/run/mysqld/mysqld.pid
PermissionsStartOnly=true
ExecStart=/opt/mysql-5.7/bin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
TimeoutSec=infinity
Restart=on-failure
RuntimeDirectory=mysqld
RuntimeDirectoryMode=755
LimitNOFILE=5000
(6)启动测试
二进制安装 MySQL 8.0
1、下载二进制包
下载地址:https://dev.mysql.com/downloads/mysql
2、解压到指定目录
tar -xf mysql-8.0.35-linux-glibc2.12-x86_64.tar.xz
mv mysql-8.0.35-linux-glibc2.12-x86_64 mysql-8.0
sudo mv mysql-8.0 /opt/
3、完善相关配置
(1)配置PATH变量
echo "PATH=/opt/mysql-8.0/bin:$PATH" > /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
(2)创建mysql用户
sudo groupadd -r -g 306 mysql
sudo useradd -r -g 306 -u 306 mysql
(3)编写配置文件
sudo vim /etc/my.cnf
[mysqld]
user = mysql
port = 3306
bind-address = 0.0.0.0
socket = /var/run/mysqld/mysqld.sock
pid-file = /var/run/mysqld/mysqld.pid
basedir = /opt/mysql-8.0
datadir = /data
tmpdir = /tmp
log_error = /var/log/mysql/error.log
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
max_connections = 1024
[client]
socket=/var/run/mysqld/mysqld.sock
default-character-set=utf8mb4
需要创建好相关目录:
sudo chown -R mysql:mysql /opt/mysql-8.0
sudo mkdir /data; sudo chworn mysql:mysql /data
sudo mkdir /var/log/mysql; sudo chown -R mysql:mysql /var/log/mysql
(4)初始化基础数据
初始化过程可能需要对数据目录进行写入操作,而这通常需要较高的权限,所以一般需要以root用户身份来执行这个操作。
如果不指定user和datadir参数,MySQL 会尝试使用配置文件中的相应配置选项。
root@ubuntu:~# mysqld --initialize-insecure --user=mysql --datadir=/data/
(5)编写service文件
和其它mysql的二进制安装包一样,support-files目录下提供了一个mysql.server脚本,如果是使用init作为初始化进程的系统,直接移动到/etc/init.d/下即可。
cp -a mysql.service /etc/init.d/
chkconfig --add mysqld
service mysqld start
如果是使用systemd作为初始化进程,就需要我们自己手动编写一个service文件了。
这个配置文件是我拷贝的使用包管理工具安装的mysql的service配置文件。如果需要自己写一个配置文件,通过调用mysql.service脚本实现mysql服务的管理。参考上面的操作。
[Unit]
Description=MySQL Community Server
After=network.target
[Install]
WantedBy=multi-user.target
[Service]
Type=notify
User=mysql
Group=mysql
PIDFile=/var/run/mysqld/mysqld.pid
PermissionsStartOnly=true
ExecStart=/opt/mysql-8.0/bin/mysqld
TimeoutSec=infinity
Restart=on-failure
RuntimeDirectory=mysqld
RuntimeDirectoryMode=755
LimitNOFILE=10000
# Set enviroment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1
(6)启动测试
sudo systemctl daemon-reload
sudo systemctl start mysql.service
编译安装MySQL
编译安装 MySQL5.6
1、下载源码包
下载地址:https://downloads.mysql.com/archives/community/
将tar包上传到服务器后解压,可以看到里面有几个文件:
-
LICENSE:包含了MySQL的许可证信息
-
INSTALL:包含了编译安装指南
-
README:提供了关于源码包的概览信息,源码使用指南
-
VERSION:当前MySQL的版本信息
说明:
OS Version: All Operating Systems (Generic) (Architecture Independent):表示这个源码是通用的,适用于任何操作系统和硬件架构。
2、安装编译工具
根据官网文档所说,“MySQL使用CMake作为所有平台上的构建框架”。所以安装编译工具的时候除了make和gcc,还需要安装cmake
sudo apt install cmake make gcc -y
3、生成 Makefile
默认情况下编译后的所有文件会放在 /usr/local/mysql 这个目录中,如果没有其它要求,直接用它默认的选项就行了。
mkdir mysql-5.6.51/build
# 会检查当前的环境是否满足,生成Makefile文件
sudo cmake ..
如果相关依赖没有安装的话,不会正常生成MakeFile文件,常见的错误有这些。
(1)缺少OpenSSL依赖
sudo apt install libssl-dev
(2)缺少Curses库
# ubuntu
sudo apt-get install libncurses5-dev
# redhat系列
sudo yum install ncurses-devel。
如果检查环境没问题,就会生成Makefile文件和其它一些相关文件
如果想要自定义一些编译参数,可以查看MySQL提供的官方文档,里面提供了源码安装的注意点以及方法:
MySQL说明手册上说了:
1、可以从github上下载开发版本源码或者使用官网提供的标准发行版构建版本
2、MySQL在任何平台上都是使用Cmake作为构建工具
3、编译过程中,需要SSL库和curses 库,以及其他要求。
4、源码编译后,默认安装在/usr/local/mysql目录,并且组件位置和二进制包里面的组件位置是一样的
5、如果不想使用默认的值,可以在执行cmake生成makefile文件的时候指定一些参数来指定对应的设置
-
CMAKE_INSTALL_PREFIX=/path:指定应用程序安装位置,默认是/usr/local/mysql
-
-DSYSCONFDIR=/path:配置文件位置,可以在mysqld进程启动的时候使用 --defaults-file 选项指定特定的位置
-
-DWITH_SYSTEMD=1:使用systemd管理mysql服务
- 其它一些配置其实不指定都行,因为在mysql服务(mysqld进程)启动的时候,可以通过手动指定选项或者在配置文件里面指定对应的选项来完成配置,这些配置会默认覆盖编译过程中指定的相同配置。
4、编译
使用root用户身份进行编译链接,会生成对应的二进制文件。使用make 的 -j 参数可以指定使用多少个CPU进行编译。
sudo make -j 4
5、安装
因为全部使用的是MySQL默认的选项,所以会将相关文件放到/usr/local/mysql目录下,使用 make install 即可完成对应的二进制文件移动到指定位置。
sudo make install
6、环境准备
(1)修改PATH变量
echo "PATH=/usr/locl/mysql/bin:$PATH" > /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
(2)创建mysql用户
sudo groupadd -r -g 306 mysql
sudo useradd -r -g 306 -u 306 mysql
(3)编写配置文件
[mysqld]
user = mysql
port = 3306
bind-address = 0.0.0.0
socket = /var/run/mysqld/mysqld.sock
pid-file = /var/run/mysqld/mysqld.pid
basedir = /usr/local/mysql
datadir = /data
tmpdir = /tmp
log_error = /var/log/mysql/error.log
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
max_connections = 1024
[client]
socket=/var/run/mysqld/mysqld.sock
default-character-set=utf8mb4
说明:
因为是编译安装,所以相关目录需要自己手动创建
sudo mkdir /data; sudo chown mysql:mysql /data
sudo mkdir /var/log/mysql; sudo chown mysql:mysql /var/log/mysql;
sudo mkdir /var/run/mysql; sudo chown mysql:mysql /var/run/mysql;
Linux中/run和/var/run区别:
-
相同点:都是用于存放自系统启动以来所需要的运行时数据,它通常包括运行中的服务的PID文件和套接字文件,该目录中的内容在系统重启时会被清除
-
不同点:/run是一个较新的目录,而/var/run在早期的Linux系统中就有了,在现代系统中,/var/run 实际上是一个到 /run 的符号链接
(4)初始化基础数据
sudo ./scripts/mysql_install_db --datadir=/data --user=mysql --basedir=/usr/local/mysql/
(5)编写service文件
如果是init进程作为系统的初始化进程,可以手动编写service文件来管理mysql服务。
cp -a support-files/mysql.server /etc/init.d/mysqld
编写systemd的配置文件:
[Unit]
Description=MySQL Server 5.6.51
After=network.target
[Service]
Type=forking
User=mysql
Group=mysql
Nice=0
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
说明:
User=mysql 和 Group=mysql 这两个参数在systemd服务文件中是针对 ExecStart 指定的主进程。(仅影响由 ExecStart 指定的主服务进程。)
(6)启动测试
sudo systemctl restart mysql.service
编译安装 MySQL5.7
配置步骤和二进制安装一样,就是多了编译这个步骤
说明:
(1)boost库支持
从MySQL 5.7 版本开始,MySQL 引入了对 Boost 库的依赖,Boost是一个C++库集合。这是因为 MySQL 从 5.7 版本开始引入了一些新特性,如新的 JSON 数据类型和地理空间数据处理,这些特性需要 Boost 库中的某些组件来支持。
手册链接:https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html
所以编译安装的时候需要使用 WITH_BOOST 参数来指定boost的位置,下载源码的时候可以直接下载带boost库的源码,如果没下载带boost的源码,使用cmake进行编译的时候,会有报错提示的,根据要求下载就行了。
如果下载的是不带boost库的头文件,使用cmake的时候会提示这个错误,按照这个要求下载,然后指定就可以了。
(2)systemd环境
从mysql5.7版本开始,如果Linux操作系统的初始化进程是systemd,提供了一个参数 WITH_SYSTEMD,默认这个参数的值是OFF,启用这个参数后,会生成systemd对应的service文件。
cmake .. -DWITH_SYSTEMD=1 -DWITH_BOOST=./boost_1_77_0
编译完成后,对应的systemd相关文件是位于mysql/lib/systemd/system这个位置。这样就不用自己手动去编写service文件了,方便了很多。
编译安装 MySQL8.0
配置步骤和二进制安装一样,就是多了编译这个步骤,编译和mysql5.7编译差不多。