文章目录
Centos 7 源码编译安装 mysql
参考地址:
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; 其他一些可以根据特定应用场景所作的各种调整。 | 对编译参数的不够了解造成编译参数使用不当可能使编译出来的二进制代码不够稳定; 对自己的应用环境把握失误而使用的优化参数可能反而使系统性能更差; 就是源码编译安装将使安装部署过程更为复杂,所花费的时间更长 |
1. 卸载 centos 自带的 mariadb
[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
2. 下载 mysql
这里使用国内“清华源”下载地址: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
# 或者下载到本地在上传
# 这里之前下载过就直接上传了
3. 安装 mysql
参考官网信息:
地址: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 二进制发行版,命令序列如下所示:
3.1 解压压缩包
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.1.1 自定义解压安装目录
如果想要自定义安装目录,可以参考章节
3.7 配置 /ect/init.d
中修改mysql.server
配置文件说明
自定义安装目录在前几步对于安装没有影响,只需要将本文档 1~6 步 /usr/local 改为自定义目录即可
3.2 配置PATH变量
# 可以将/usr/local/mysql/bin 目录添加到PATH变量中:
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile
3.3 创建一个mysql用户和组
# 用户仅用于所有权目的,而不是登录目的,所以useradd命令使用 -r和-s /bin/false选项来创建对您的服务器主机没有登录权限的用户
[root@master ~]# groupadd mysql
[root@master ~]# useradd -r -g mysql -s /bin/false mysql
3.4 创建一个mysql-file
# 该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
3.5 安装 mysql
[root@master mysql]# bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql --log_error=/usr/local/mysql/mysql-files/mysql.log
解释说明:
--initialize 初始化
--user=mysql 以mysql用户的身份初始化数据库,产生的文件都是mysql用户作为拥有者
--basedir=xxx mysql 安装目录
--datadir mysql 数据目录
--log_error mysql 日志文件,便于后期查找初始化密码
或者使用 --initialize-insecure 参数初始化,这时初始化mysql是没有密码的
示例:
[root@master mysql]# bin/mysqld --initialize-insecure --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql --log_error=/usr/local/mysql/mysql-files/mysql.log
3.6 SSL 加密
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
3.7 配置 /etc/init.d
# 启动前,要把 support-files/mysql.server 复制到 /etc/init.d/ 下,并命名为mysql,启动时便可使用名mysql直接启动
[root@master mysql]# cp support-files/mysql.server /etc/init.d/mysql
注:下面是错误演示
- 错误示例:
# 测试将 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)
❓ 解释说明:
默认情况下,
GLIBC
的数据库要求安装到/usr/local/mysql
目录下, 其mysql.server
脚本中对应的目录也是/usr/local/mysql
,如果数据库安装的目录不是/usr/local/mysql
,则会导致mysql
无法启动。
我们可以更改其mysql.server
中basedir
(值改为mysql程序实际的安装路径)和datadir
(值改为mysql程序中data文件夹的路径)两个变量来解决此问题
👉 解决方法
修改
mysql.server
文件,在 66 行左右,将默认目录/usr/local
改成我们实际安装目录
修改完成将mysql.server
拷贝到/etc/init.d/mysql
3.8 启动 mysql 数据库
[root@master mysql]# service mysql start
Starting MySQL.Logging to '/usr/local/mysql/data/master.err'.
SUCCESS!
特别说明:
- 当
MySQL
启动成功后,其日志会自动写入到data数据目录中的“主机名称”.err
文件中,这个文件一定要多看,涉及MySQL
无法启动、启动报错,其详细的原因99%在.err
文件中可以找到问题所在 。- 或者可以在配置文件中自定义日志文件路径
3.9 登陆数据库
[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>
3.10 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'; #修改密码,这里注意 Host 的值是 "%" 还是 "localhost"
flush privileges;
4. my.cnf 文件
- 这里简单配置,根据自己需求添加
[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 目录,这里自定义配置 sock 目录的情况下,前面在安装的时候最好是指定 --datadir=/usr/local/mysql/data mysql的安装目录,不然默认是 /tmp/mysql.sock
socket=/usr/local/mysql/data/mysql.sock
# 这里要手动去添加 log 文件并注意修改文件属主
log-error=/usr/local/mysql/log/mysqld.log
# 注意文件权限问题,不然会报错
pid-file=/usr/local/mysql/mysqld.pid
# 重启
service mysql restart
❓ 如果登陆时r仍然报 sock 错误
# 如果登陆时报错 sock 错误,可以使用 ln -s /usr/local/mysql/data/mysql.sock /tmp/mysql.sock 做软连接
ln -s /usr/local/mysql/data/mysql.sock /tmp/mysql.sock