Centos8 安装 MySQL8.0.26
下载
访问 https://dev.mysql.com/downloads/mysql/
- 选择 Red Hat Enterprise Linux / Oracle Linux
- 选择 Red Hat Enterprise Linux 8 / Oracle Linux (x86, 64-bit)
- 下载 RPM Bundle (mysql-8.0.26-1.el8.x86_64.rpm-bundle.tar) 这是多个rpm打包的文件
也可以直接在服务器上用wget
wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.26-1.el8.x86_64.rpm-bundle.tar
安装
安装手册 https://dev.mysql.com/doc/refman/8.0/en/linux-installation-rpm.html
yum update
tar xvf mysql-8.0.26-1.el8.x86_64.rpm-bundle.tar
# 按顺序执行
rpm -ivh mysql-community-common-8.0.26-1.el8.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.26-1.el8.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.26-1.el8.x86_64.rpm
rpm -ivh mysql-community-client-8.0.26-1.el8.x86_64.rpm
rpm -ivh mysql-community-server-8.0.26-1.el8.x86_64.rpm
安装server时会要求perl和libaio, 如果没有安装, 需要先用yum install perl libaio
安装一下.
上面的安装结束后会提示
[root@db backup]# rpm -ivh mysql-community-server-8.0.26-1.el8.x86_64.rpm
warning: mysql-community-server-8.0.26-1.el8.x86_64.rpm: Header V3 DSA/SHA256 Signature, key ID 5072e1f5: NOKEY
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-server-8.0.26-1.e################################# [100%]
[/usr/lib/tmpfiles.d/mysql.conf:23] Line references path below legacy directory /var/run/, updating /var/run/mysqld → /run/mysqld; please update the tmpfiles.d/ drop-in file accordingly.
参考
- https://access.redhat.com/solutions/4154291,
Due to the systemd change, any package using /var/run will need to be updated to attempt to remove the logs.
, 根据Systemd的修改, 任何使用 /var/run 这个目录的软件都需要更新路径来避免出现这个提示. - https://bugs.gentoo.org/768051
A workaround of this case is to edit /usr/lib/tmpfiles.d/mysql.conf
,Do not edit /usr/lib/tmpfiles.d/mysql.conf. Copy that file to /etc/tmpfiles.d and edit it there if you need to.
需要复制 /usr/lib/tmpfiles.d/mysql.conf 到 /etc/tmpfiles.d/,
cp /usr/lib/tmpfiles.d/mysql.conf /etc/tmpfiles.d/
vi /etc/tmpfiles.d/mysql.conf
将最后一行
d /var/run/mysqld 0755 mysql mysql -
改为
d /run/mysqld 0755 mysql mysql -
安装的过程中除了安装MySQL自身, 会对系统做以下修改
- 添加group:mysql, user:mysql
可以通过more /etc/passwd
,more /etc/group
查看 - 添加服务mysqld, 并被设为enabled
可以通过more /usr/lib/systemd/system/mysqld.service
查看 - 安装过程中如果产生错误, 会被记录到 /var/log/mysqld.log
文件打开数量限制
- 通过
ulimit -n
检查 - 查看 https://dev.mysql.com/doc/refman/8.0/en/not-enough-file-handles.html
- 查看 https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_open_files_limit
- 对于部分系统, 需要加大文件打开数量限制
- 对于REHL和Centos, 因为使用了Systemd, 所以没有mysql_safe, 而是直接用mysqld启动, 所以
open_files_limit
如果要配置, 应该配置到my.cnf - 对于MySQL 8.0.19及更高版本, 参数
open_files_limit
已自动设置为当前操作系统的文件打开数限制的最大值, 不需要单独配置.
如果使用Centos8官方的CloudImage镜像, 默认的打开文件数为1024, 可以修改 /etc/security/limits.conf , 增加两行
* soft nofile 10240
* hard nofile 10240
然后重启
运行
启动服务前, 修改数据目录
编辑 /etc/my.cnf , 修改
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
修改为
datadir=/data/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/run/mysqld/mysqld.pid
注意: 如果修改了socket=/var/lib/mysql/mysql.sock
, 那么需要增加client配置, 否则本地执行mysql -uroot -p
会提示无法连接socket
SELinux错误
如果出现这样的错误
SELinux is preventing /usr/sbin/mysqld from write access on the directory mysql
检查对比一下原目录和新目录的selinux权限
ls -Zl /var/lib/mysql
...
-rw-r-----. 1 mysql mysql system_u:object_r:mysqld_db_t:s0 16777216 Oct 18 16:09 undo_002
ls -Zl /data/mysql/
...
-rw-r-----. 1 mysql mysql system_u:object_r:default_t:s0 16777216 Oct 18 16:14 undo_002
可以看到差一个mysqld_db_t
, 用下面的命令将原目录的selinux权限赋给新的目录
semanage fcontext -a -e /var/lib/mysql /data/mysql
用chcon -R -t mysqld_db_t /data/mysql/
命令不行, 启动还会报错mysql Activating service name='org.fedoraproject.Setroubleshootd'
这样的错误, 参考这篇关于selinux和mysql的详细解释
之后重启就没问题了
初次启动时, 会产生的修改
第一次启动MySQL服务时, 如果发现data目录是空的, 会进行如下操作
- 初始化服务器
- 在data目录下创建 SSL certificate 和 key
- 安装并启用 validate_password
- 创建用户 'root'@'localhost', 随机口令写入到 error log 文件, 通过以下命令查看
# RHEL, Oracle Linux, CentOS, and Fedora systems:
sudo grep 'temporary password' /var/log/mysqld.log
# SLES systems:
sudo grep 'temporary password' /var/log/mysql/mysqld.log
注意
如果你初始化完改完密码, 又换了个新的数据目录, 那么mysqld会又进行一次初始化工作, 之前设置的密码是无效的, 要重新去日志里查一下.
初次登录
用安装程序产生的随机口令登录后, 创建新口令
$ mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
注意 因为默认安装并启用了validate_password
, 所以口令必须满足以下全部条件: 至少一个大写字母
+至少一个小写字母
+至少一个数字
+至少一个符号
+总长度不低于8
.
开启远程访问
如果要从远程访问, 或者用mysql-shell管理, 需要开放用户的远程访问
方法一
创建另一个 root 用户 (因为存在的是 'root@localhost')
CREATE USER 'root'@'%' IDENTIFIED BY '123';
Give the privileges:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
从 MySQL 8 开始, 不能在创建用户时带 GRANT 参数, 要分开执行:
mysql> CREATE USER 'admin'@'192.168.0.0/255.255.0.0' IDENTIFIED BY 'PASSWORD';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'192.168.0.0/255.255.0.0' WITH GRANT OPTION;
-- or
CREATE USER 'admin'@'192.168.12.0/24' IDENTIFIED BY 'PASSWORD';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'192.168.12.0/24' WITH GRANT OPTION;
-- or
mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'PASSWORD';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
最后
mysql> FLUSH PRIVILEGES;
方法二
修改原 root 用户
UPDATE mysql.user SET host='%' WHERE user='root';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
配置优化和调整
sql_mode
MySQL8默认的服务器模式 The default SQL mode in MySQL 8.0 includes these modes:
ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_ENGINE_SUBSTITUTION
NO_AUTO_CREATE_USER
在MySQL8中已经被移除.
模式的说明
- ONLY_FULL_GROUP_BY
没有在Group By中的字段, 将被禁止出现在select中, 对于有些项目, 这个选项需要关闭. Reject queries for which the select list, HAVING condition, or ORDER BY list refer to nonaggregated columns that are neither named in the GROUP BY clause nor are functionally dependent on (uniquely determined by) GROUP BY columns. A MySQL extension to standard SQL permits references in the HAVING clause to aliased expressions in the select list. The HAVING clause can refer to aliases regardless of whether ONLY_FULL_GROUP_BY is enabled. - STRICT_TRANS_TABLES
对事务型存储引擎, 启用严格SQL模式, 对非事务型则能启用就启用, 这个选项是一定要开的. Enable strict SQL mode for transactional storage engines, and when possible for nontransactional storage engines. For details, see Strict SQL Mode. - NO_ZERO_IN_DATE,
这个选项是要开的, 这个选项已经是deprecated了, 在将来的版本这个选项会被合并到严格SQL模式中默认开启.
NO_ZERO_IN_DATE: 是否允许时间数据出现年份非0但是月份或天为0的记录. 像'2010-00-01'和'2010-01-00'是不允许的, 但是'0000-00-00'不受这个选项影响. NO_ZERO_IN_DATE也受是否启用严格SQL模式影响:- 如果未设置 NO_ZERO_IN_DATE, 那么为0的字段都是可以写入的也不会报warning
- 如果设置了 NO_ZERO_IN_DATE, 那么带0的字段的日期, 会被记为'0000-00-00'同时报一个warning.
- 如果设置了 NO_ZERO_IN_DATE, 同时还开启了严格SQL模式, 带0字段的日期就不能写入了, 会报错(除非带IGNORE). 对于 INSERT IGNORE 和 UPDATE IGNORE, 带0字段的日期会被记为'0000-00-00'并产生一个warning.
- NO_ZERO_DATE
这个选项也要开, NO_ZERO_DATE 这个选项是用来禁止'0000-00-00'的, 这个选项也deprecated了, 在将来的版本这个选项会被合并到严格SQL模式中默认开启. - ERROR_FOR_DIVISION_BY_ZERO
就是字面的意思, 是否允许0除, 也要开. 这个选项也deprecated了, 在将来的版本这个选项会被合并到严格SQL模式中默认开启. - NO_ENGINE_SUBSTITUTION
是否自动用默认的存储引起代替, 如果CREATE TABLE 或 ALTER TABLE 指定的存储引擎不存在(未编译)或被禁用了. 默认启用.
在项目中可以关闭的只有ONLY_FULL_GROUP_BY
, 用于兼容一些GROUP BY语句.
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_
ZERO,NO_ENGINE_SUBSTITUTION
其它变量
根据服务器内存大小自行调整
join_buffer_size = 128M
sort_buffer_size = 8M
read_rnd_buffer_size = 8M
key_buffer_size=32M
max_allowed_packet=16M
read_buffer_size = 4M
tmp_table_size = 128M
max_connections = 256
max_heap_table_size = 256M
对应Java项目的修改
依赖修改为
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
<version>8.0.13</version>
</dependency>
spring boot连接参数变为
spring:
...
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
参考
- selinux和mysql https://www.percona.com/doc/percona-server/8.0/security/selinux.html
- https://programmer.group/springboot-2.1.7-integrates-mybati-3.5.2-with-mysql-8.0.13.html
Centos8 安装 MySQL8.0.26的更多相关文章
- CentOS8 安装MySQL8.0
2019/11/25, CentOS 8,MySQL 8.0 摘要: CentOS 8 安装MySQL 8.0 并配置远程登录 安装MySQL8.0 使用最新的包管理器安装MySQL sudo dnf ...
- CentOS8 安装 MySQL8.0(yum)
1.Mysql 官网下载 RPM 包wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm2.检查是否已安装 ...
- CentOS8安装mysql8.0具体步骤
操作系统:CentOS Linux release 8.0及以上 Mysql版本:Mysql 8.0.22 x86_64 (MySQL Community Server - GPL) Mysql8下载 ...
- centos8安装mysql8.0
官网下载rpm地址 https://dev.mysql.com/downloads/repo/yum/ wget下载 wget https://repo.mysql.com//mysql80-comm ...
- CentOS8.1操作系下使用通用二进制包安装MySQL8.0(实践整理自MySQL官方)
写在前的的话: 在IT技术日新月异的今天,老司机也可能在看似熟悉的道路上翻车,甚至是大型翻车现场!自己一个人开车过去翻个车不可怕,可怕的是带着整个团队甚至是整个公司一起翻车山崖下,解决办法就是:新出现 ...
- Linux(CentOS-8)安装MySQL8.0.11
CentOS安装MySQL8.0.11 总的思路就是:安装MySQL,编写配置文件,配置环境变量,成功开启服务,登陆并修改ROOT密码 开启远程访问的思路就是:授权用户所有IP都可以访问,系统的数据库 ...
- Centos7安装MySQL8.0
请到这个地址看:https://www.cnblogs.com/kevingrace/p/10482469.html Centos7安装MySQL8.0 - 操作手册 一.yum安装方式: 卸载之前版 ...
- CentOS7安装MySQL8.0小计
之前讲配置文件和权限的时候有很多MySQL8的知识,有同志说安装不太一样,希望发个文,我这边简单演示一下 1.环境安装 下载MySQL提供的CentOS7的yum源 官方文档:<https:// ...
- CentOS7.4 源码安装MySQL8.0
MySQL 8 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 以下为本人2018.4.23日安装过程的记录.整个过程大 ...
- centos 7下安装mysql-8.0
本篇文章主要介绍在centos7 环境下安装mysql8.0并设置为开机自启. 安装步骤 1.配置yum源 首先在 https://dev.mysql.com/downloads/repo/yum/ ...
随机推荐
- [转帖]PG Exporter
http://v0.pigsty.cc/zh/docs/reference/kernel-optimize/ Exporter https://github.com/Vonng/pg_exporter ...
- [转帖]SSH交互式脚本StrictHostKeyChecking选项 benchmode=yes
https://www.cnblogs.com/klb561/p/11013774.html SSH 公钥检查是一个重要的安全机制,可以防范中间人劫持等黑客攻击.但是在特定情况下,严格的 SSH 公钥 ...
- 申威下单盘SSD与四块盘RAID5的性能测试结果
申威下单盘SSD与四块盘RAID5的性能测试结果 背景 背景不在说了 申威服务器.. 结论 天坑 做了raid写入性能下降明显. 充分怀疑驱动不行. 四快盘的raid5 跟单盘的读几乎没区别. 感觉这 ...
- [转帖]使用JAYDEBEAPI同时连接两个不同数据库(ORACLE+MYSQL)的问题
jaydebeapi 同时连接两种数据库 在使用jaydebeapi只连接一种数据库时,是没问题的,但是如果需要同时连接两种数据库,比如同时连接oracle和mysql 例如以下测试代码: imp ...
- [转帖]Redis子进程开销与优化
Redis子进程开销与优化 文章系转载,便于分类和归纳,源文地址:https://blog.csdn.net/y532798113/article/details/106870299 1.CPU 开销 ...
- [转帖]Linux性能测试之LTP
https://www.modb.pro/db/487946 hello,大家好,今天为大家更新一篇关于Linux性能测试的文章,大家都知道在Windows下测试计算机的性能,我们可以使用鲁大师等软件 ...
- [转载]关于NSA的EternalBlue(永恒之蓝) ms17-010漏洞利用
2017年5月19日 感谢原作者:http://www.cnblogs.com/cnbluerain/ 好久没有用这个日志了,最近WannaCry横行,媒体铺天盖地的报道,我这 ...
- vue启动报错_interopRequireDefault is not a function
起因 今天接触一个项目vue. 在安装好环境之后,启动的时候报错_interopRequireDefault is not a function 解决的办法:我觉得可能是因为node_modules安 ...
- vue中使用Object.assign导致视图不响应
可以正常响应的 <template> <div> <ul> <li class="li-item" v-for="(item,i ...
- Seata分布式事务 (理论与部署相结合)
分布式事务--Seata 分布式事务 1. 本地事务与分布式事务 1.1 本地事务 本地事务,也就是传统的单机事务.在传统数据库事务中,必须要满足四个原则: 1.2 分布式事务问题 分布式事务,就是指 ...