Centos7用yum安装MySQL

Centos7用yum安装MySQL5.7

参考:https://blog.csdn.net/qq_45732782/article/details/117221897
环境声明:
OS Version Centos7.9 x64
MySQL Version 5.7.43


检查机器上有无MySQL

# 查看是否已经有mysql:
rpm -qa|grep mysql

#如果linux上已经安装过mysql删除mysql:
yum remove mysql*   
# 或
rpm -e mysql*

下载repo并安装MySQL5.7

mysql5.7的官方repo:https://repo.mysql.com/

#!/usr/bin/bash

# 安装repo
yum install -y https://repo.mysql.com/mysql57-community-release-el7.rpm

# 刷新源
yum clean all && yum makecache

# 安装mysql-server社区版
yum -y install mysql-community-server

# 设置mysql开机自启服务并现在启动mysqld服务
systemctl enable --now mysqld

# 查看启动的服务有无报错
systemctl status mysqld

在这里插入图片描述


修改配置

使用utf8mb4而不是utf8https://blog.csdn.net/omaidb/article/details/106481406

https://blog.csdn.net/fdipzone/article/details/52705507

# 查看mysql启动时读取配置文件的默认目录
mysql --help|grep 'my.cnf'

在这里插入图片描述
优先级顺序:

  • /etc/my.cnf
  • /etc/mysql/my.cnf
  • /usr/local/etc/my.cnf
  • ~/.my.cnf

注意将mysql5.7的默认配置文件中的log-errorpid-file的值为maridb目录,修改为mysql
在这里插入图片描述
注意修改字符集
https://blog.csdn.net/omaidb/article/details/106481406
在这里插入图片描述

# 服务端配置
[mysqld]
# 数据保存路径
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# 初始化连接时的字符集
#init_connect='SET NAMES utf8mb4'

# 客户端握手字符集
character-set-client-handshake=FALSE
# 服务端使用的默认字符集
character_set_server=utf8mb4

# 服务端使用的字符序
# https://www.cnblogs.com/chyingp/p/mysql-character-set-collation.html
collation-server=utf8mb4_unicode_cli

# 创建新表时使用的默认存储引擎
## https://www.runoob.com/w3cnote/mysql-different-nnodb-myisam.html
default-storage-engine=INNODB

# 创建新表时使用的默认字符集
default-character-set=utf8mb4

# 建议禁用符号链接以防止各种安全风险
symbolic-links=0

# 错误日志路径--默认参数
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


# 对本地的mysql客户端的配置
[client]
default-character-set = utf8mb4

# 对其他远程连接的mysql客户端的配置
[mysql]
default-character-set = utf8mb4

MYSQL初始化

生成MYSQL默认的数据文件初始化密码
在 MySQL 数据目录中创建系统表数据文件,并为 mysql的root 用户生成一个随机密码

# 初始化数据库
## --initialize 初始化MySQL服务器的数据目录。
### 它会创建必要的系统表来管理数据库,并设置初始授权表。
## --user=mysql 指定mysql用户运行
### 不指定--user,将以当前用户执行,数据文件会有属主权限问题
## --console:将日志信息输出到控制台。
mysqld --initialize --user=mysql --console

# 查看默认密码
grep 'temporary password' /var/log/mysqld.log

指定初始化密码
-- 新建一个文本/tmp/tmp.sql
ALTER USER 'root' @'localhost' IDENTIFIED BY '指定的初始化密码';

指定初始化sql脚本,实现指定初始化密码。

# 初始化数据库
## --initialize:初始化 MySQL 数据库。
## --console:将日志信息输出到控制台。
## --init-file:执行指定的 SQL 脚本。
mysqld --initialize --console =/tmp/tmp.sql

重新初始化—生产环境禁止执行

https://blog.csdn.net/omaidb/article/details/106481406
https://www.cnblogs.com/jmxx/p/16268434.html

# 先停止mysqld服务
systemctl stop mysqld

# 删除原来的数据文件
rm -rf /var/lib/mysql/*

# 清空原日志
> /var/log/mysqld.log

# 执行mysql初始化
## 在 MySQL 数据目录中创建系统表和数据文件,并为 root 用户生成一个随机密码。
mysqld --initialize --user=mysql --console

# 查看默认密码
grep 'temporary password' /var/log/mysqld.log

# 重启mysqld服务
systemctl restart mysqld

# 如果重启报错,一般都是目录权限的问题
## 以root执行来mysql初始化而非mysql用户
## 一般是/var/lib/mysql/auto.cnf权限的问题
ls -alh /var/lib/mysql/auto.cnf

# 查看权限--正常的
ls -ld /var/lib/mysql

# 重新赋予datadir 属主和属组
## 给予权限后重启正常了
chown -R mysql:mysql /var/lib/mysql

会重新生成MYSQL默认的数据文件初始化密码


查看MySQL的初始化密码

# 查看MySQL的初始化密码
grep "password" /var/log/mysqld.log
# 或
cat ~/.mysql_secret

在这里插入图片描述


修改mysql初始化密码


修改mysql初始化密码–方法1—不建议

这种方法history会留下明文密码,不建议使用

# 方法1: 修改初始化密码
## -u后面没有空格,紧跟用户名root
## -p后面没有空格,紧跟密码
mysqladmin -uroot -p初始化密码 password 新密码

在这里插入图片描述


修改mysql初始化密码–方法2

在这里插入图片描述

# root登录数据库
mysql -uroot -p
## 提示输入密码,输入刚才查询到的mysql初始密码即可

# 修改密码
## 修改完后是保存在内存里,并未落盘
mysql> update mysql.user set password=password('新密码') where user='root';

# 应用权限
## 将内存中的配置保存到磁盘中
mysql> flush privileges;

Centos7安装MySql8

https://www.jianshu.com/p/224a891932d8
Mysql官方repohttps://repo.mysql.com/

# 安装mysql8的repo
yum install -y https://repo.mysql.com/mysql80-community-release-el7.rpm

在这里插入图片描述

# 列出repo
yum repolist

在这里插入图片描述

# 安装服务端
yum install -y mysql-server

# 设置开机自启动
systemctl enable --now mysqld.service

# 查看服务状态
systemctl status mysqld

在这里插入图片描述


安装msyql-shell和mysql-router

MySQL Shell是一个交互式命令行工具,用于连接到MySQL服务器并执行SQL语句、管理实例等数据库管理操作;
MySQL Router是一个中间件工具,用于分流负载均衡多个MySQL服务器,并提供高可用性高性能的应用程序运行环境。

# 安装mysql-shell
yum install -y mysql-shell

# 安装mysql-router
yum install -y mysql-router

修改my.cnf配置–配置持久化键(persistence key)

MySQL8初始化数据库之前配置好这些变量值,初始化数据库之后可能无法修改这个值。

# 服务端配置
[mysqld]
# mysql服务绑定的本机哪个IP地址
# bind-address=0.0.0.0

# 禁用 DNS 查询结果缓存,这对于高负载的 MySQL 服务器来说是很重要的,因为它可以减少 DNS 延迟和负载。
## skip-host-cache已在mysql8中弃用
# skip-host-cache
host_cache_size=0
# 禁用主机名解析,这也可以提高 MySQL 服务器的性能,因为当客户端连接到服务器时,会先进行主机名解析,而禁用它可以加速连接进程。
# 只能用IP地址检查客户端的登录,不用主机名
skip-name-resolve

# 指定mysql安装目录
basedir=/usr/local/mysql

# 数据库文件存储目录。
datadir=/var/lib/mysql

# MySQL 进程监听的 Unix 套接字文件路径。
socket=/var/run/mysqld/mysqld.sock

# 指定默认时区
default-time-zone='+8:00'
# 执行SQL语句时所应该遵守的规则
## STRICT_TRANS_TABLES:当插入数据时,如果出现字段类型不匹配、值超出范围等情况,将产生严格的警告或错误。
## NO_ZERO_IN_DATE:防止在日期或日期时间字段中使用0作为数值的填充。
## NO_ZERO_DATE:防止在日期或日期时间字段中插入'0000-00-00'的空白日期格式。
## ERROR_FOR_DIVISION_BY_ZERO:禁用除数为零的操作,并将其视为错误。
## NO_ENGINE_SUBSTITUTION:如果需要连接的存储引擎不存在或不可用,则不自动替换为其他存储引擎。
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

# 事务隔离级别设为读已提交
## mysql默认可重复读级别repeatable read(此级别下可能参数很多间隙锁,影响性能)
transaction_isolation=READ-COMMITTED

# 最大连接数
max_connections=400

# 最大错误连接数
max_connect_errors=1000

# TIMESTAMP如果没有显示声明NOT NULL,允许NULL值
explicit_defaults_for_timestamp=true

# 指定安全文件目录,只有在该目录下的文件才可被导入/导出。
secure-file-priv=/var/lib/mysql-files

# 指定运行 MySQL 进程的用户身份。
user=mysql

# MySql8不用配置
# 防止 MySQL 软链接攻击。
symbolic-links=0

# 指定MySQL服务进程ID文件的路径
pid-file=/var/run/mysqld/mysqld.pid

# 服务端指定字符集
character-set-server=utf8mb4
# 服务端使用的字符序
# https://www.cnblogs.com/chyingp/p/mysql-character-set-collation.html
collation-server=utf8mb4_unicode_cli

# 创建新表时使用的默认存储引擎
## https://www.runoob.com/w3cnote/mysql-different-nnodb-myisam.html
default-storage-engine=INNODB

# 指定InnoDB缓冲池大小,单位为字节
innodb_buffer_pool_size=200M

# SQL数据包发送的大小,如果有BLOB(二进制大对象)建议修改成1G
## BLOB用来存图像、音频和视频等文件
# max_allowed_packet=1G
# 指定单个MySQL包的最大大小,单位为字节
max_allowed_packet=16M

# 指定是否启用严格模式下的时间戳
explicit_defaults_for_timestamp=1

# 指定日志输出方式,可以为FILE、TABLE等。
log-output=FILE
# 指定是否启用常规查询日志。
general_log=0
# 指定常规查询日志文件的路径
general_log_file=/var/log/general.err

# 指定是否启用慢查询日志:ON开启
show_query_log=ON
# 指定慢查询日志文件的路径
show_query_log_file=/var/log/query.err
# 指定慢查询的最小时间
long_query_time=10

# 错误日志路径
log-error=/var/log/mysqld.log

# 使用旧版mysql5的密码认证插件,支持简单密码
default-authentication-plugin=mysql_nativa_password

# 初始化连接时的字符集
#init_connect='SET NAMES utf8mb4'

# 指定客户端握手字符集
character-set-client-handshake=FALSE

# 指定是否启用符号链接,建议禁用符号链接以防止各种安全风险
symbolic-links=0

# 对其他远程连接的mysql客户端的配置
[mysql]
# 远程连接的客户端指定字符集
default-character-set=utf8mb4

# 对localhost的mysql客户端的配置
[client]
# 客户端连接 MySQL 的套接字文件路径。
socket=/var/run/mysqld/mysqld.sock
# 指定MySQL客户端使用的字符集
default-character-set=utf8mb4


# 导入其他配置文件。
# !includedir /etc/mysql/conf.d/
# !includedir /etc/mysql/mysql.conf.d/

配置表名不区分大小写

SQL语句和列名不区分大小写,SQL的表名是默认区分大小写的。

可以修改变量来不区分表名大小写;

0:表示表名区分大小写;
1:表示表名不区分大小写,但在存储和比较时仍保留原始名称的大小写形式;
2:表示表名不区分大小写,并将所有表名转换为小写。

# 表名不区分大小写
lower_case_table_names=1

MYSQL初始化

# MySQL数据库初始化
## --initialize 初始化MySQL服务器的数据目录。
### 它会创建必要的系统表来管理数据库,并设置初始授权表。
## --user=mysql 指定mysql用户运行
### 不指定--user,将以当前用户执行,数据文件会有属主权限问题
mysqld --initalize --user=mysql

# 查看默认密码
grep 'temporary password' /var/log/mysqld.log

在这里插入图片描述


修改初始化密码

# 使用初始化密码登录mysql
mysql -uroot -p
# 输入初始化密码后登录

在这里插入图片描述

# 修改初始化密码
## 第一次修改必须要设置成强密码:4中字符以上
alter user root identified '强密码';

# 修改成强密码后才可以调低密码强度为0
set global validate_password.policy=0;

修改root账户远程登录权限

# 进入mysql库
use mysql;

# 修改root账号的密码
ALTER USER 'root' @'localhost' IDENTIFIED WITH mysql_native_password BY '<new-password>';

# 修改root账户远程登录权限
## %表示允许远程登录,localhost表示仅允许本地登录
update user set host = '%' where user = 'root';

#刷新权限
flush privileges;

Docker运行MySql

mysql容器变量:https://hub.docker.com/_/mysql

# 拉取镜像
docker pull mysql:5.7.41
docker pull mysql:8.0.33-oracle


# 启动一个mysql5.7的容器
## -v 挂载mysql的数据目录
## 最后两个参数:将所有表的默认编码和排序规则更改为使用 UTF-8 ( utf8mb4)
docker run --name mysql \
    -dti -e MYSQL_ROOT_PASSWORD=mysql密码 \
    -p 3306:3306 \
    -v /my/own/datadir:/var/lib/mysql \
    --restart always mysql:5.7.41 \
    --character-set-server=utf8mb4 \
    --collation-server=utf8mb4_unicode_ci

# 进入容器
docker exec -ti msyql bash

# 查看密码变量
echo $MYSQL_ROOT_PASSWORD

Docker运行MySql8

# Mysql8建议指定一个强密码,否则可能无法登录
## 如果还是无法登录,就检查下客户端的/etc/my.cnf配置
docker run --name mysql8 \
	-dti -e MYSQL_ROOT_PASSWORD='密码' \
	-p 3306:3306 \
    -v /my/own/datadir:/var/lib/mysql \
	--restart always mysql:oracle \
	--character-set-server=utf8mb4 \
	--collation-server=utf8mb4_unicode_ci

查看镜像支持的选项

# 查看可用选项的完整列表
docker run -it --rm mysql:tag --verbose --help

-e MYSQL_DATABASE=数据库名
在这里插入图片描述


k8s安装mysql8常用的配置

https://segmentfault.com/a/1190000041699942

[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
# 禁用 DNS 查询结果缓存,这对于高负载的 MySQL 服务器来说是很重要的,因为它可以减少 DNS 延迟和负载。
host_cache_size=0
# 只能用IP地址检查客户端的登录,不用主机名
skip-name-resolve
# 指定默认时区
default-time-zone='+8:00'
max_connections = 2000
# 服务端指定字符集
character-set-server=utf8mb4
# 服务端使用的字符序
# https://www.cnblogs.com/chyingp/p/mysql-character-set-collation.html
collation-server=utf8mb4_unicode_cli
secure_file_priv=/var/lib/mysql
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 指定客户端握手字符集
character-set-client-handshake=FALSE
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

识途老码

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值