本节介绍如何在Unix/Linux平台上从压缩的tar文件二进制发行版安装MySQL。
Oracle提供了一组MySQL的二进制发行版。其中包括适用于许多平台的压缩tar文件(扩展名为 .tar.xz 的文件)形式的通用二进制发行版,以及适用于选定平台的特定于平台的软件包格式的二进制文件。
MySQL压缩的tar文件二进制发行版的名称格式为 mysql-VERSION-OS.tar.xz ,其中 VERSION 是一个数字(例如 8.4.0 ), OS 表示发行版所针对的操作系统类型(例如 pc-linux-i686 或 winx64 )。
MySQL8.4.0特性说明
以下整理了常用的功能变化,详细内容查阅官方文档,官方文档位置:https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html
新增功能
MySQL本地密码验证更改
从MySQL 8.4.0开始,默认情况下不再启用已弃用的 mysql_native_password 身份验证插件。要启用它,请使用 --mysql-native-password=ON (在MySQL 8.4.0中添加)启动服务器,或者在MySQL配置文件的 [mysqld] 部分中包含 mysql_native_password=ON (在MySQL 8.4.0中添加)。
InnoDB系统变量默认值更改
InnoDB系统变量默认值更改。在MySQL 8.4.0中,与 InnoDB 存储引擎相关的多个服务器系统变量的默认值发生了更改,如下表所示:
InnoDB System Variable Name | New Default Value (MySQL 8.4) | Previous Default Value (MySQL 8.0) |
OFF if MADV_DONTDUMP is supported, otherwise ON | ON | |
If innodb_buffer_pool_size <= 1 GiB, then innodb_buffer_pool_instances=1 If innodb_buffer_pool_size > 1 GiB, then this is the minimum value from the following two calculated hints in the range of 1-64:
| 8 (or 1 if innodb_buffer_pool_size < 1 GiB) | |
none | all | |
If ON[a] , the value of innodb_flush_method is no longer changed as in MySQL 8.0, but the calculation of innodb_redo_log_capacity is changed from memory-based to CPU-based. For more information, see Section 17.8.12, “Enabling Automatic Configuration for a Dedicated MySQL Server” . | OFF | |
OFF | ON | |
2 | * 2 | |
128 | , which meant a default of 4 | |
on Linux innodb_flush_method 在Linux上 | O_DIRECT if supported, otherwise fsync | fsync |
10000 | 200 | |
, with a minimum default value of 2000 | ||
67108864 (64 MiB) 67108864(64 MiB) | 16777216 (16 MiB) 16777216(16 MiB) | |
ON | OFF | |
4 | ||
available logical processors / 8, with a minimum default value of 4 | 4 | |
1 if available logical processors is <= 16, otherwise 4 | 4 | |
available logical processors / 2, with a minimum default value of 4 | 4 | |
ON | OFF | |
3% of total memory, with a default value within a range of 1-4 GiB | 1073741824 (1 GiB) 1073741824(1 GiB) | |
0, which means OFF 0,表示 OFF | 1073741824 (1 GiB) 1073741824(1 GiB) | |
OFF | ON |
克隆插件
克隆插件。克隆插件版本控制要求被放宽,允许在同一系列的不同版本之间进行克隆。换句话说,只有主版本号和次版本号必须匹配,而以前点版本号也必须匹配
例如,克隆功能现在允许将8.4.0克隆到8.4.14,反之亦然。
MySQL复制
SOURCE_RETRY_COUNT变化
MySQL复制:SOURCE_RETRY_COUNT更改。 CHANGE REPLICATION SOURCE TO 语句的 SOURCE_RETRY_COUNT 选项的默认值已更改为10。这意味着,如果使用此选项和 SOURCE_CONNECT_RETRY 的默认值(60),复制副本将在两次重新连接尝试之间等待60秒,并在超时和故障切换之前以此速率继续尝试重新连接10分钟。
此更改也适用于已弃用的 --master-retry-count 服务器选项的默认值。(You应该使用 SOURCE_RETRY_COUNT 代替。)
标记的GTID
MySQL复制:标记的GTID。MySQL复制和组复制中使用的全局事务标识符(GID)的格式已经扩展,可以识别事务组,从而可以为属于特定事务组的GTID分配唯一的名称。例如,包含数据操作的事务可以通过比较它们的GTID容易地与由管理操作产生的事务区分开。
新的GTID格式是 UUID:TAG:NUMBER ,其中 TAG 是最多8个字符的字符串,通过将 gtid_next 系统变量的值设置为 AUTOMATIC:TAG (在此版本中添加)来启用(有关标记格式和其他信息,请参见变量的描述)。此标记对于当前会话中发起的所有事务都保持不变(除非使用 SET gtid_next 进行了更改),并在此类事务的提交时应用,或者在使用组复制时在认证时应用。也可以将 gtid_next 设置为 UUID:TAG:NUMBER ,以将单个事务的UUID设置为任意值,同时沿着为其分配自定义标记。 UUID 和 NUMBER 的分配与以前的MySQL版本相比没有变化。在任何一种情况下,用户都有责任确保标记对于给定的复制拓扑是唯一的。
将 gtid_next 设置为 AUTOMATIC:TAG 或 UUID:TAG:NUMBER 需要一个新的 TRANSACTION_GTID_TAG 权限,该权限是在此版本中添加的;在原始服务器上以及副本应用程序线程的 PRIVILEGE_CHECKS_APPLIER 上都是如此。这也意味着管理员现在可以将 SET @gtid_next=AUTOMATIC:TAG 或 UUID:TAG:NUMBER 的使用限制为所需的MySQL用户或角色集,以便只有与给定数据或操作域相关的用户才能提交具有分配的标记的新事务。
从MySQL的早期版本升级到MySQL 8.4时,任何已经拥有 BINLOG_ADMIN 权限的用户帐户或角色都会自动获得 TRANSACTION_GTID_TAG 权限。
弃用的功能
expire_logs_days
expire_logs_days系统变量。MySQL 8.0中不推荐使用的 expire_logs_days server系统变量已被删除。尝试在运行时获取或设置此变量,或使用等效选项( --expire-logs-days )启动mysqld,现在会导致错误。
使用 binlog_expire_logs_seconds 来代替 expire_logs_days ,它允许您指定(仅)整数天以外的到期期限。
删除的功能
Replication SQL syntax
复制SQL语法。MySQL复制中使用的一些SQL语句在MySQL的早期版本中被弃用,在MySQL 8.4中不再支持。现在,尝试使用这些语句中的任何一个都会产生语法错误。这些语句可以分为两组:与源服务器相关的语句和与副本相关的语句,如下所示:
作为这项工作的一部分, CREATE EVENT 和 ALTER EVENT 的 DISABLE ON SLAVE 选项现在已被弃用,并被 DISABLE ON REPLICA 取代。相应的术语 SLAVESIDE_DISABLED 现在也被弃用,并且不再用于事件描述中,例如在信息架构 EVENTS 表中;现在显示的是 REPLICA_SIDE_DISABLED 。
下面列出了已删除的与复制源服务器相关的语句:
- CHANGE MASTER TO: Use CHANGE REPLICATION SOURCE TO.
- RESET MASTER: Use RESET BINARY LOGS AND GTIDS.
- SHOW MASTER STATUS: Use SHOW BINARY LOG STATUS.
- PURGE MASTER LOGS: Use PURGE BINARY LOGS.
- SHOW MASTER LOGS: Use SHOW BINARY LOGS.
此处列出了删除的与复制副本相关的SQL语句:
- START SLAVE: Use START REPLICA.
- STOP SLAVE: Use STOP REPLICA.
- SHOW SLAVE STATUS: Use SHOW REPLICA STATUS.
- SHOW SLAVE HOSTS: Use SHOW REPLICAS.
- RESET SLAVE: Use RESET REPLICA.
此处列出了从 CHANGE REPLICATION SOURCE TO 中删除的选项: - MASTER_AUTO_POSITION: Use SOURCE_AUTO_POSITION.
- MASTER_HOST: Use SOURCE_HOST.
- MASTER_BIND: Use SOURCE_BIND.
- MASTER_UseR: Use SOURCE_UseR.
- MASTER_PASSWORD: Use SOURCE_PASSWORD.
- MASTER_PORT: Use SOURCE_PORT.
- MASTER_CONNECT_RETRY: Use SOURCE_CONNECT_RETRY.
- MASTER_RETRY_COUNT: Use SOURCE_RETRY_COUNT.
- MASTER_DELAY: Use SOURCE_DELAY.
- MASTER_SSL: Use SOURCE_SSL.
- MASTER_SSL_CA: Use SOURCE_SSL_CA.
- MASTER_SSL_CAPATH: Use SOURCE_SSL_CAPATH.
- MASTER_SSL_CIPHER: Use SOURCE_SSL_CIPHER.
- MASTER_SSL_CRL: Use SOURCE_SSL_CRL.
- MASTER_SSL_CRLPATH: Use SOURCE_SSL_CRLPATH.
- MASTER_SSL_KEY: Use SOURCE_SSL_KEY.
- MASTER_SSL_VERIFY_SERVER_CERT: Use SOURCE_SSL_VERIFY_SERVER_CERT.
- MASTER_TLS_VERSION: Use SOURCE_TLS_VERSION.
- MASTER_TLS_CIPHERSUITES: Use SOURCE_TLS_CIPHERSUITES.
- MASTER_SSL_CERT: Use SOURCE_SSL_CERT.
- MASTER_PUBLIC_KEY_PATH: Use SOURCE_PUBLIC_KEY_PATH.
- GET_MASTER_PUBLIC_KEY: Use GET_SOURCE_PUBLIC_KEY.
- MASTER_HEARTBEAT_PERIOD: Use SOURCE_HEARTBEAT_PERIOD.
- MASTER_COMPRESSION_ALGORITHMS: Use SOURCE_COMPRESSION_ALGORITHMS.
- MASTER_ZSTD_COMPRESSION_LEVEL: Use SOURCE_ZSTD_COMPRESSION_LEVEL.
- MASTER_LOG_FILE: Use SOURCE_LOG_FILE.
- MASTER_LOG_POS: Use SOURCE_LOG_POS.
此处列出了从 START REPLICA 语句中删除的选项:
- MASTER_LOG_FILE: Use SOURCE_LOG_FILE.
- MASTER_LOG_POS: Use SOURCE_LOG_POS.
mysql_upgrade
mysql_upgrade实用程序,在MySQL 8.0.16中被弃用,已被删除。
mysqlpump
mysqlpump实用程序。mysqlpump实用程序沿着及其辅助实用程序lz4_blog和zlib_blog,在MySQL 8.0.34中已被删除。相反,使用mysqldump或MySQL Shell的转储实用程序。
参考链接:https://dev.mysql.com/doc/refm
安装前准备
查看操作系统版本
--查看操作系统版本
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
--查看glib版本
[root@localhost ~]# ldd --version
ldd (GNU libc) 2.17
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
--查看cpu x86_64架构
[root@localhost ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 166
Model name: Intel(R) Core(TM) i7-10710U CPU @ 1.10GHz
Stepping: 0
....MySQL8.4已不支持Linux7以下的操作系统,查看支持的平台,可查看官方文档,官方文档位置:https://www.mysql.com/support/supportedplatforms/database.html

选择要安装的MySQL版本
选择要安装的MySQL版本
在准备安装MySQL时,请决定使用哪个版本和分发格式(二进制或源代码)。
版本号了解:
MySQL 8.4中的命名方案使用由三个数字和一个可选后缀组成的版本名(例如,mysql—8.4.0)。版本名称中的数字解释如下:
第一个数字(8)是主版本号。
第二个数字(4)是次要版本号。LTS系列的次版本号不会更改,但Innovation系列的次版本号会更改。
第三个数字(0)是LTS系列中的版本号。对于每个新的LTS版本,此值递增,但对于创新版本,此值可能始终为0。
选择要安装的MySQL分发格式
选择安装哪个MySQL版本后,决定为您的操作系统安装哪个分发格式。
- 二进制发行版以原生格式提供给许多平台,例如用于Linux的RPM包或用于macOS的DMG包。
- 源代码发行版采用更通用的格式,如Zip存档或压缩的tar文件。
- 在Windows上,您可以使用MSI来安装二进制发行版。
获取MySQL
下载后上传至/opt目录下

https://dev.mysql.com/downloads/mysql/
安装过程
创建mysql用户和组
若系统还没有用于运行mysqld的用户和组,需要创建它们。以下命令添加 mysql 组和 mysql 用户。
由于用户仅用于所有权目的而非登录目的,因此useradd命令使用 -r 和 -s /bin/false 选项来创建一个没有服务器主机登录权限的用户。如果您的useradd不支持这些选项,请忽略它们。
检查是否有mysqld的用户和组
--检查是否有mysqld的用户和组
[root@localhost ~]# id mysql
id: mysql: no such user
[root@localhost ~]# cat /etc/group | grep mysql
无返回创建mysql用户和组
groupadd mysql
useradd -r -g mysql -s /bin/false mysql解压安装介质
假定您具有在 /usr/local 中创建文件和目录的权限。如果该目录受保护,则必须以 root 方式执行安装。
cd /usr/local
tar -xvf /opt/mysql-8.4.0-linux-glibc2.17-x86_64.tar.xz -C /usr/local/tar命令创建一个名为 mysql-VERSION-OS 的目录,如:mysql-8.4.0-linux-glibc2.17-x86_64。
补充:
如果您的tar不支持 xz 格式,请使用xz命令解压缩发行版,然后使用tar解压缩发行版。将前面的tar命令替换为以下替代命令
xz -dc /path/to/mysql-VERSION-OS.tar.xz | tar x创建符号链接
创建一个指向tar创建的安装目录的符号链接
语法:ln -s full-path-to-mysql-VERSION-OS mysql
cd /usr/local
ln -s /usr/local/mysql-8.4.0-linux-glibc2.17-x86_64 mysql配置环境变量
为了避免在使用MySQL时总是输入客户端程序的路径名,您可以将 /usr/local/mysql/bin 目录添加到 PATH 变量
vi /etc/profile
#add by mysql
export PATH=$PATH:/usr/local/mysql/bin
source /etc/profile创建目录
mysql-files 目录提供了一个方便的位置,可用作 secure_file_priv 系统变量的值,该变量将导入和导出操作限制到特定目录。
cd /usr/local/mysql
mkdir mysql-files目录授予权限
chown -R mysql:mysql /usr/local/mysql初始化实例
默认数据目录位置:/var/lib/mysql
务必记录临时密码:temporary password is generated for root@localhost: uus7,ruoAv.*
cd /usr/local/mysql
bin/mysqld --initialize --user=mysql以下是初始化实例的详细过程:
[root@localhost mysql]# cd /usr/local/mysql
[root@localhost mysql]# bin/mysqld --initialize --user=mysql
2024-05-06T11:41:57.401726Z 0 [System] [MY-015017] [Server] MySQL Server Initialization - start.
2024-05-06T11:41:57.404990Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a futurerelease.
2024-05-06T11:41:57.405398Z 0 [System] [MY-013169] [Server] /usr/local/mysql-8.4.0-linux-glibc2.17-x86_64/bin/mysqld (mysqld 8.4.0) initializing of server in progress as process 10447
2024-05-06T11:41:57.418368Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-05-06T11:41:58.725109Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-05-06T11:42:01.204080Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: uus7,ruoAv.*
2024-05-06T11:42:03.595866Z 0 [System] [MY-015018] [Server] MySQL Server Initialization - end.启动数据库
mysqld_safe具备后台运行的功能,关闭会话后进程不会中断。
cd /usr/local/mysql
bin/mysqld_safe --user=mysql &问题处理
启动数据库报错
--问题描述
[root@localhost mysql]# cd /usr/local/mysql
[root@localhost mysql]# bin/mysqld_safe --user=mysql &
[1] 10504
[root@localhost mysql]# 2024-05-06T11:43:19.842219Z mysqld_safe error: log-error set to '/var/log/mariadb/mariadb.log', however file don't exists. Create writable for user 'mysql'.
^C
[1]+ Exit 1 bin/mysqld_safe --user=mysql
--解决办法
创建日志文件并赋予权限
[root@localhost mysql]# touch /var/log/mariadb/mariadb.log
[root@localhost mysql]# chown -R mysql:mysql /var/log/mariadb/mariadb.log
启动MySQL数据库
[root@localhost mysql]# bin/mysqld_safe --user=mysql &启动数据库后无mysql进程
--问题描述
启动MySQL数据库
[root@localhost mysql]# bin/mysqld_safe --user=mysql &
[1] 10817
[root@localhost mysql]# 2024-05-06T11:46:51.500612Z mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
2024-05-06T11:46:51.526592Z mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
2024-05-06T11:46:54.193827Z mysqld_safe mysqld from pid file /var/run/mariadb/mariadb.pid ended
^C
查看进程 无MySQL进程,启动失败
[root@localhost mysql]# ps -ef | grep mysql
root 11197 10998 0 19:48 pts/3 00:00:00 grep --color=auto mysql
查看pid文件
[root@localhost mysql]# ls -l /var/run/mariadb/mariadb.pid
ls: cannot access /var/run/mariadb/mariadb.pid: No such file or directory
--解决办法
创建存放pid文件的目录并赋予权限
[root@localhost mysql]# mkdir -p /var/run/mariadb
[root@localhost mysql]# chown -R mysql:mysql /var/run/mariadb
启动MySQL数据库 启动成功
[root@localhost mysql]# bin/mysqld_safe --user=mysql &
[1] 11202
[root@localhost mysql]# 2024-05-06T11:49:59.184078Z mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
2024-05-06T11:49:59.206592Z mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql登录提示找不到sock文件
--问题描述
[root@localhost mysql]# mysql -uroot -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
--解决办法
查看进程 找到sock文件位置
[root@localhost mysql]# ps -ef | grep mysql
root 11202 2539 0 19:49 pts/1 00:00:00 /bin/sh bin/mysqld_safe --user=mysql
mysql 11337 11202 0 19:49 pts/1 00:00:08 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/var/lib/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
创建sock文件的软链接
[root@localhost mysql]# ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
登录成功配置启动文件(可选)
[root@localhost mysql]# cd /usr/local/mysql
[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld启动管理
#重启
service mysqld restart
#开启
service mysqld start
#关闭
service mysqld stop或执行运行服务脚本mysqld或者mysql.server
#启动
/etc/init.d/mysqld start
#关闭
/etc/init.d/mysqld stop
#重启
/etc/init.d/mysqld restart通用Unix/Linux二进制包的MySQL安装布局
Directory | Contents of Directory 目录内容 |
bin | mysqld server, client and utility programs |
docs | MySQL manual in Info format |
man | Unix manual pages Unix手册页 |
include | Include (header) files 包含(头)文件 |
lib | Libraries |
share | Error messages, dictionary, and SQL for database installation |
support-files | Miscellaneous support files |
日常维护
更改root用户密码
use mysql;
FLUSH PRIVILEGES;
alter user 'root'@'localhost' identified with mysql_native_password by 'tophn@123';
FLUSH PRIVILEGES;设置root用户密码永不过期
use mysql;
FLUSH PRIVILEGES;
alter user 'root'@'localhost' password expire never;
FLUSH PRIVILEGES;创建实现远程登录的root用户
use mysql;
create user 'root'@'%' identified with mysql_native_password by 'tophn@123';
alter user 'root'@'%' password expire never;
FLUSH PRIVILEGES;
grant all privileges on *.* to 'root'@'%' with grant option;
FLUSH PRIVILEGES;创建实现远程登录同时指定登录范围的root用户(可选)
use mysql;
FLUSH PRIVILEGES;
create user 'root'@'192.168.16.%' identified with mysql_native_password by 'tophn@123';
grant all privileges on *.* to 'root'@'192.168.16.%' with grant option;
alter user 'root'@'192.168.16.%' password expire never;
FLUSH PRIVILEGES;创建业务数据库及用户
create database operational_platform default charset utf8mb4 collate utf8mb4_general_ci;
flush privileges;
create user 'znfxpt'@'%' identified by 'tophn@123';
flush privileges;
grant all privileges on znfxpt_test.* to 'znfxpt'@'%' with grant option;
flush privileges;
alter user 'znfxpt'@'%' identified with mysql_native_password by 'tophn@123';
flush privileges;创建查询用户
create user 'query_user'@'%' identified by 'tophn@123';
flush privileges;
grant select on 'znfxpt'.* to query_user@'%';
flush privileges;



