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
而不是utf8
: https://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-error
和pid-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官方repo
:https://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