参考地址:
https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html
https://blog.csdn.net/weixin_52850476/article/details/122800696
MySQL的三种安装方式及区别:
【二进制软件包安装】
yum安装或rpm安装
命名:mysql-community-server-5.7.28-1.el7.x86_64.rpm,需要在特定Linux版本下安装
glibc版本安装
命名:mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz,依赖glibc库,可以安装在通用的Linux系统下
【源码包编译安装】
命名:mysql-5.7.27.tar.gz,通用的Linux下都可以编译安装
安装方式 | 优点 | 缺点 |
---|---|---|
yum rpm | 简单、方便 (平时测试可以简单使用) | 可定制性查 对环境依赖很大,要满足依赖关系,要和rpm编译完成时的环境要一致 |
glibc | MySQL 使用的 glibc 进行开发、glibc 库是一个底层 API、所以只要是 Linux,都会有glibc库、移植性很方便 二进制分发版和源码分发版,前者已经编译并经过优化了,后者没有 |
安装麻烦 |
源代码安装 | 针对自己的硬件平台选用合适的编译器来优化编译后的二进制代码; 根据不同的软件平台环境调整相关的编译参数; 针对我们特定应用场景选择需要什么组件不需要什么组件; 根据我们的所需要存储的数据内容选择只安装我们需要的字符集; 同一台主机上面可以安装多个MySQL; 其他一些可以根据特定应用场景所作的各种调整。 |
对编译参数的不够了解造成编译参数使用不当可能使编译出来的二进制代码不够稳定; 对自己的应用环境把握失误而使用的优化参数可能反而使系统性能更差; 就是源码编译安装将使安装部署过程更为复杂,所花费的时间更长 |
[root@master ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.68-1.el7.x86_64
[root@master ~]# rpm -e mariadb-libs-5.5.68-1.el7.x86_64
错误:依赖检测失败:
libmysqlclient.so.18()(64bit) 被 (已安裝) postfix-2:2.10.1-9.el7.x86_64 需要
libmysqlclient.so.18(libmysqlclient_18)(64bit) 被 (已安裝) postfix-2:2.10.1-9.el7.x86_64 需要
# 强制卸载
[root@master ~]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
这里使用国内“清华源”下载地址:https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/
wget https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz --no-check-certificate
# 或者下载到本地在上传
# 这里之前下载过就直接上传了
参考官网信息:
地址:https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html
# MySQL 依赖于该libaio 库。如果未在本地安装此库,则数据目录初始化和后续服务器启动步骤将失败
# linux下有aio封装,aio_*系列的调用是glibc提供的,是glibc用线程+阻塞调用来模拟的,性能很差,为了能更多的控制io行为,可以使用更为低级libaio。
# libaio是Linux内核异步I/O(AIO)。通过在一个系统调用中提供用于提交一个或多个I/O请求的接口,而无需等待完成,AIO甚至可以使单个应用程序线程将I/O操作与其他处理重叠,还可以通过单独的接口收获完成的I/O操作与给定的完成组相关联
yum search libaio # search for info
yum install libaio -y # install library
通用 Unix/Linux 二进制包的 MySQL 安装布局
要安装和使用 MySQL 二进制发行版,命令序列如下所示:
tar -zxvf mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz
# 官网建议将文件放在 /usr/local/
mv mysql-5.7.38-linux-glibc2.12-x86_64 /usr/local/mysql
如果想要自定义安装目录,可以参考章节 3.7 配置 /ect/init.d 中修改 mysql.server 配置文件说明
自定义安装目录在前几步对于安装没有影响,只需要将本文档 1~6 步 /usr/local 改为自定义目录即可
# 可以将/usr/local/mysql/bin 目录添加到PATH变量中:
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile
# 用户仅用于所有权目的,而不是登录目的,所以useradd命令使用 -r和-s /bin/false选项来创建对您的服务器主机没有登录权限的用户
[root@master ~]# groupadd mysql
[root@master ~]# useradd -r -g mysql -s /bin/false mysql
# 该mysql-files目录提供了一个方便的位置,可用作 secure_file_priv系统变量的值,它将导入和导出操作限制到特定目录
[root@master ~]# cd /usr/local/mysql
[root@master mysql]# ll
总用量 272
drwxr-xr-x 2 root root 4096 6月 9 16:57 bin
drwxr-xr-x 2 root root 55 6月 9 16:57 docs
drwxr-xr-x 3 root root 4096 6月 9 16:57 include
drwxr-xr-x 5 root root 230 6月 9 16:57 lib
-rw-r--r-- 1 7161 31415 259251 3月 22 01:30 LICENSE
drwxr-xr-x 4 root root 30 6月 9 16:57 man
-rw-r--r-- 1 7161 31415 566 3月 22 01:30 README
drwxr-xr-x 28 root root 4096 6月 9 16:57 share
drwxr-xr-x 2 root root 90 6月 9 16:57 support-files
[root@master mysql]# mkdir mysql-files
[root@master mysql]# chown mysql:mysql mysql-files
[root@master mysql]# chmod 750 mysql-files
[root@master mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql
解释说明:
--initialize 初始化
--user=mysql 以mysql用户的身份初始化数据库,产生的文件都是mysql用户作为拥有者
--basedir=xxx mysql其安装目录
# mysql5.7之前的版本是不提供ssl安全连接的,其在网络中数据都是以明文进行传输的。
# mysql_ssl_rsa_setup程序用于创建 SSL 证书和密钥文件以及 RSA 密钥对文件,以支持使用 SSL 的安全连接和使用 RSA 通过未加密连接的安全密码交换(如果这些文件丢失)。
# 如果现有的 SSL 文件已经过期,mysql_ssl_rsa_setup也可用于创建新的 SSL 文件。
# MySQL5.7默认是开启SSL连接,如果强制用户使用SSL连接,那么应用程序的配置也需要明确指定SSL相关参数,否则程序会报错。
[root@master mysql]# bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data
# 启动前,要把 support-files/mysql.server 复制到 /etc/init.d/ 下,并命名为mysql,启动时便可使用名mysql直接启动
[root@master mysql]# cp support-files/mysql.server /etc/init.d/mysql
注:
默认情况下,GLIBC版本的数据库要求安装到 /usr/local/mysql 目录下, 其 mysql.server 脚本中对应的目录也是 /usr/local/mysql ,如果数据库安装的目录不是 /usr/local/mysql ,则会导致mysql无法启动。
我们可以更改其mysql.server中basedir(值改为mysql程序的安装路径)和datadir(值改为mysql程序中data文件夹的路径)两个变量来解决此问题
# 测试将 mysql 安装在 /opt/tools 目录下,报错如下
[root@master mysql]# service mysql start
/etc/init.d/mysql: line 239: my_print_defaults: command not found
/etc/init.d/mysql: line 259: cd: /usr/local/mysql: No such file or directory
Starting MySQL ERROR! Couldn't find MySQL server (/usr/local/mysql/bin/mysqld_safe)
# 修改 mysql.server 文件,在66行左右,将默认目录 /usr/local 改成我们实际安装目录
# 修改完成将 mysql.server 拷贝到 /etc/init.d/mysql
[root@master mysql]# service mysql start
Starting MySQL.Logging to '/usr/local/mysql/data/master.err'.
SUCCESS!
特别说明:当MySQL启动成功后,其日志会自动写入到data数据目录中的 “主机名称”.err 文件中,这个文件一定要多看,涉及 MySQL 无法启动、启动报错,其详细的原因99%在 .err 文件中可以找到问题所在
[root@master ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.38
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'; #修改密码,这里注意 Host 的值是 "%" 还是 "localhost"
flush privileges;
[mysql]
# 是否自动补全
no-auto-rehash
# 修改命令行链接mysql时的提示符
prompt = '\\u@\\h:\\p \\R:\\m:\\s [\\d]> '
[mysqld]
# DO NOT MODIFY, Universe will generate this part
# 端口
port = 3306
# 主备 id
server_id = 1
# 软件目录
basedir = /usr/local/mysql
# 数据目录
datadir = /usr/local/mysql/data
# socket 目录
socket=/usr/local/mysql/data/mysql.sock
# 重启
service mysql restart