MySQL基础3——二进制部署MySQL
本文最后更新于 523 天前,如有失效请评论区留言。

MySQL的安装方式

MySQL有很多安装方式,在不使用Docker的条件下,这里主要讲解YUM安装方式和二进制安装方式,其中的二进制部署方式也是最常用的部署方式。本章介绍MySQL的二进制部署方案。

  1. yum安装

    优点:这种方法操作非常简单,但需要服务器可以联网且yum源可用(国内可以选择163/阿里源)。

  2. 编译安装

    优点:可以定制自己想要的功能特性。

    5.1.x之前的版本是在tar包的解压路径,通过 ./configure,make,make install三个步骤进行安装;

    5.4.x到5.7.x的版本是在tar包的解压路径,通过 cmake,make,make install三个步骤进行安装。

  3. 二进制安装(常用)

    从官方下载二进制包,解压之后就可以使用,这也是我现在最常用的方式。

  4. rpm安装

    从官方下载rpm软件包,然后通过rpm或者yum命令直接安装。

MySQL版本号介绍

以MySQL 8.0.4 这个版本号为例说明每个数字含义。

  • 第一个数字(8):主版本号,是MySQL的大版本,不同版本之间有改动文件格式等修改;
  • 第二个数字(0):发行版本号,不同版本之间有新增特性或者改动不兼容项等修改;
  • 第三个数字(4):发行序列号,不同版本之间有bug修复,函数添加更改,配置参数等更改。

MySQl二进制部署

MySQL二进制安装包下载

首先,MySQL二进制版本运行依赖于glibc这个库,也许你的Linux系统并不自带glibc,不过没有关系,可以通过yum命令快捷下载。

# yum install -y glibc
# rpm -qa | grep glibc
glibc-devel-2.17-326.el7_9.3.x86_64
glibc-2.17-326.el7_9.3.x86_64
glibc-headers-2.17-326.el7_9.3.x86_64
glibc-common-2.17-326.el7_9.3.x86_64

# uname -a
Linux k8s-master 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

接下来从MySQL二进制安装包下载地址下载需要的二进制安装包:

  • Product Version:这里我选择部署最新版的MySQL8.4.0版本
  • Operating System:操作系统选择通用二进制Linux-Generic
  • OS Version:根据上面查询到的信息,我的系统安装了glibc-2.17版本的glibc库,系统是x86架构,所以选择Linux-Generic(glibc-2.17)(x86,64-bit)版本

recording

对确定版本的二进制包来说,官方提供了几种规格的包供选择。可以根据是否压缩,是否需要最小化安装来选择对应的包,为了避免缺少功能,这里选择下载Compressed TAR Archive这个完整的压缩包。

image-20240724131546752

复制下载链接,通过wget命令下载,并使用-O重命名(不重命名会报错404,不过我没去研究为什么)。

  • /data/software是我用来专门存放软件包的目录,以前我习惯把软件包存放在/root/下,然后总是不可避免的变得混乱,于是我在服务器上创建一个专门的目录来存放各类软件安装包。
# cd /data/software/
# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.4.0-linux-glibc2.17-x86_64.tar.xz -O mysql-8.4.0-linux-glibc2.17-x86_64.tar.xz

MySQL二进制部署

清理安装环境

因为CentOS系统默认安装了MariaDB,和MySQL会有冲突,所以需要先卸载MariaDB的相关项。

# yum erase mariadb mariadb-server mariadb-libs mariadb-devel -y
# userdel -r mysql
# rm -rf /etc/my*
# rm -rf /var/lib/mysql

准备MySQL部署环境

准备安装目录、数据目录、日志目录。

# mkdir -p /usr/local/appserver
# mkdir -p /data/database/{data,logs}

创建mysql用户来运行的程序(创建的mysql用户不能登录服务器,也不创建家目录)。

# useradd -s /sbin/nologin mysql -M
# chown mysql.mysql -R /data/database

二进制包部署

安装包解压缩(从官网下载的是xz包,用tar -xvf解压)。

# cd /data/software
# tar -xvf mysql-8.4.0-linux-glibc2.17-x86_64.tar.xz -C /usr/local/appserver/mysql

配置环境变量

# cat /etc/profile.d/mysql.sh 
export PATH=$PATH:/usr/local/appserver/mysql/bin
# source  /etc/profile

解压之后没有配置文件,我们自行创建my.cnf(这里涉及到一些基础的配置,以后我们也可以在此基础下增加其他的配置)。

  • 一般需要调整basedirdatadir其他log日志目录的配置;
  • 为了规范一些,我的软件总是部署在/usr/local/appserver/下,而数据文件总存放在/data目录下。
# cd /usr/local/appserver/mysql
# vim my.cnf
[mysqld]
user=mysql
basedir=/usr/local/appserver/mysql
datadir=/data/database/data
default-storage-engine = Innodb
character-set-server = UTF8MB4
collation-server=utf8mb4_general_ci
init_connect='SET NAMES utf8mb4'
performance_schema=ON
default-time_zone='+8:00'
log_timestamps = SYSTEM

#只能用IP地址检查客户端的登录,不用主机名,跳过域名解析
skip-name-resolve=1

#日志时间
log_timestamps=SYSTEM

#慢日志
long_query_time=3
slow_query_log=ON
slow_query_log_file=/data/database/logs/slow_query.log

#通用日志
general_log=1
general_log_file=/data/database/logs/mysql_general.log

#错误日志
log-error=/data/database/logs/mysql-error.log

# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

# 默认使用"mysql_native_password"插件认证
#default_authentication_plugin=mysql_native_password

port=3306
socket=/tmp/mysql.sock
max_connections=1000
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_allowed_packet=300M

[mysql]
socket=/tmp/mysql.sock

MySQL数据库初始化。

# =/usr/local/appserver/mysql/bin/mysqld --initialize-insecure --defaults-file=/usr/local/appserver/mysql/my.cnf --initialize --user=mysql
2024-07-24T09:21:54.090404Z 0 [System] [MY-015017] [Server] MySQL Server Initialization - start.
2024-07-24T09:21:54.092667Z 0 [System] [MY-013169] [Server] /usr/local/appserver/mysql/bin/mysqld (mysqld 8.4.0) initializing of server in progress as process 31978
2024-07-24T09:21:54.147169Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-07-24T09:21:56.678070Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-07-24T09:22:04.646918Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
2024-07-24T09:22:14.192079Z 0 [System] [MY-015018] [Server] MySQL Server Initialization - end.

看到MySQL Server Initialization - end,说明MySQL初始化已经完成了。这里通过--initialize-insecure参数在初始化MySQL过程中不设置密码。

在mysql程序目录创建启动脚本文件并启动。

# cd /usr/local/appserver/mysql
# cat << EOF >> start_mysql.sh
/usr/local/appserver/mysql/bin/mysqld_safe --defaults-file=/usr/local/appserver/mysql/my.cnf >/dev/null 2>&1 &
EOF
# chmod +x /usr/local/appserver/mysql/start_mysql.sh
MySQL启动时默认没有权限创建mysql-error.log文件,这里我手动创建即可。
# touch /data/database/logs/mysql-error.log
# /usr/local/appserver/mysql/start_mysql.sh
# ps -ef | grep mysql

创建关闭脚本,需要输入数据库密码才能停止

# cd /usr/local/appserver/mysql
# cat << EOF >> stop_mysql.sh
/usr/local/appserver/mysql/bin/mysqladmin shutdown –uroot -S /tmp/mysql.sock -p
EOF
# chmod +x /usr/local/appserver/mysql/stop_mysql.sh

为MySQL的管理员用户root设置密码。

# mysql -uroot -p
mysql> alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Cuckoo@123!';
Query OK, 0 rows affected (0.01 sec)
mysql>

接下来就可以用设置的新密码登录MySQL了。

mysql -uroot -p'Cuckoo@123!'

小结

本篇以MySQL8.4.0这个长期维护版本介绍了MySQL的二进制部署方式,这也是大多数公司常用的部署方式,若不针对容器部署而言,个人觉得二进制部署是最便捷且自定义化程度高的部署方案,在我工作过的公司当中,在不使用云运营商标准化产品的情况下,几乎所有的应用组件都会采用二进制部署方案。

版权声明:除特殊说明,博客文章均为cuckooyang原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。 | 博客订阅:RSS | 广告招租:留言板 | 博客VPS |

评论

  1. JOJO
    Windows Chrome 122.0.0.0
    1 年前
    2024-7-31 11:39:33

    太有用了 感谢博主!!!!!

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇