Centos7安装和配置Mysql8
一、yum方式安装
1.由于centOS7中默认安装了MariaDB,需要先进行卸载
rpm -qa | grep -i mariadb
rpm -e --nodeps mariadb-libs-5.5.64-1.el7.x86_64
新增:经实践在使用yum方式安装MySQL时不用卸载也可以,会被自动替代 通过rpm方式安装需要卸载,否则会出现依赖问题
查询下本机mysql是否卸载干净
rpm -qa | grep mysql
若有残留也需要卸载
2.下载MySQL仓库并安装
进入mysql官网获取RPM包下载地址
https://dev.mysql.com/downloads/repo/yum/
获取到下载地址。然后wget下载安装包
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
yum -y install mysql80-community-release-el7-7.noarch.rpm
2022年5月2日更新:
安装过程中可能遇到如下报错无法安装,原因是Mysql的GPG升级了,需要重新获取
执行以下命令再安装即可
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
3.默认安装MySQL8.0,如果需要安装MySQL5.7的话需要修改/etc/yum.repos.d/mysql-community.repo配置文件
将mysql80中enabled属性改为0,并添加图中红框内代码(安装MySQL8.0跳过该步骤)
4.安装MySQL数据库
yum -y install mysql-community-server
5.开启mysql服务
systemctl start mysqld.service
6.查看mysql默认密码并登陆
cat /var/log/mysqld.log | grep password
mysql -uroot -p
二、rpm方式安装
首先去官网下载完整rpm包
下载mysql5.7的话点击这里跳转至下载页面
解压tar包
依次安装所需要的rpm包即可
rpm-ivhmysql-community-common-8.0.23-1.el7.x86_64.rpm
rpm-ivhmysql-community-libs-8.0.23-1.el7.x86_64.rpm--force--nodeps
rpm-ivhmysql-community-libs-compat-8.0.23-1.el7.x86_64.rpm
rpm-ivhmysql-community-client-plugins-8.0.23-1.el7.x86_64.rpm
rpm-ivhmysql-community-client-8.0.23-1.el7.x86_64.rpm
rpm-ivhmysql-community-server-8.0.23-1.el7.x86_64.rpm
安装完成后可以查看下已安装的组件
rpm -qa | grep mysql
之后mysql的配置同上所述
相关软件包(根据需要安装即可)
mysql-community-client-5.7.18-1.el7.x86_64.rpm 客户端
mysql-community-devel-5.7.18-1.el7.x86_64.rpm 开发库
mysql-community-embedded-5.7.18-1.el7.x86_64.rpm 嵌入式
mysql-community-server-5.7.18-1.el7.x86_64.rpm 服务端
mysql-community-libs-5.7.18-1.el7.x86_64.rpm 共享库
mysql-community-test-5.7.18-1.el7.x86_64.rpm 测试组件
三、MySQL相关配置修改
1.修改初始密码(若想改为弱密码)
SHOW variables LIKE 'validate_password%';
注:有可能遇到如下图情况,此时先修改密码为强密码,便可以继续进行修改密码验证策略操作
将密码验证策略改为LOW,密码长度4位以上
1 set global validate_password.policy=0; #有的MySQL版本为validate_password_policy,此处请以上一步查询到的字段名称为准
2 set global validate_password.length=4; #重启MySQL后失效
此时再进行修改密码操作,可以修改为弱密码了
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your password';
以后便可以使用你自己设置的密码登陆
按照上述步骤你可以修改密码为123456之类的密码。但是有时候我们为了方便记忆,可能想要把密码改为root之类的。这时候只操作上面步骤改不了。百度了很多文章都是修改上述两个策略。
这时候可以关闭检查
set global validate_password.check_user_name = 0;
其实一开始就可以直接关闭。不用设置set global validate_password.policy=0;set global validate_password.length=4;这俩。直接给检查关闭了。但是受5.7安装影响。首先想到的是更改这两个策略
2.设置远程连接(前提:关闭防火墙或开放3306端口)
先查看防火墙状态
firewall-cmd --state
状态结果。running为开启,not running为关闭
查看开放的端口号
firewall-cmd --list-all
设置开放的端口号
firewall-cmd --zone=public --add-port=3306/tcp --permanent
重启防火墙并查看是否生效
firewall-cmd --reload
firewall-cmd --list-all
在实际工作中,经常会用到诸如DBeaver等的数据库管理工具进行远程连接mysql数据库,需要设置允许远程连接。
在mysql数据库的user表中查看host,默认只允许localhost访问
只需将localhost改为%允许任意地址访问即可
update user set host = '%' where user = 'root';
flush privileges; # 刷新权限 权限更新后刷新才会起作用
注:如果使用客户端连接提示了plugin caching_sha2_password错误,这是因为MySQL8.0的密码策略默认为caching_sha2_password(MySQL5.7无此问题)
update user set plugin = 'mysql_native_password' where user = 'root';
flush privileges; # 刷新权限 权限更新后刷新才会起作用
3.测试连接
4.my.cnf配置文件简介
前言:若使用rpm方式安装,可能无/etc/my.cnf配置文件,需将/usr/share/mysql目录下配置文件复制至/etc目录下
cp /usr/share/mysql/my-large.cnf /etc/my.cnf
[client]
port = 3306
socket = /var/run/mysql/mysql.sock
[mysqldump]
quick
max_allowed_packet = 16M
以上参数会被 MySQL 客户端应用读取,参数说明如下:
port:MySQL 客户端连接服务器端时使用的端口号,默认为 3306
socket:套接字文件所在目录
quick:支持较大的数据库转储,导出非常巨大的表时需要此项。
max_allowed_packet:服务所能处理的请求包的最大大小以及服务所能处理的最大的请求大小(当与大的BLOB字段一起工作时相当必要),每个连接独立的大小,大小动态增加。
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /mydata/mysql/data
port = 3306
server-id = 1
socket = /var/run/mysql/mysql.sock
上述参数说明如下:
user:mysqld 程序在启动后将在给定 UNIX/Linux 账户下执行。mysqld 必须从 root 账户启动才能在启动后切换到另一个账户下执行。mysqld_safe 脚本将默认使用 user=mysql 选项来启动 mysqld 程序。
basedir:指定 MySQL 安装的绝对路径;
datadir:指定 MySQL 数据存放的绝对路径;
port:服务端口号,默认为 3306
server-id:MySQL 服务的唯一编号,每个 MySQL 服务的 id 需唯一。
socket:socket 文件所在目录
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'
lower_case_table_names = 1
key_buffer_size = 16M
max_allowed_packet = 8M
no-auto-rehash
sql_mode=TRADITIONAL
skip-grant-tables
character-set-server:数据库默认字符集
collation-server:数据库字符集对应一些排序等规则,注意要和character-set-server对应
init_connect:设置client连接mysql时的字符集,防止乱码
lower_case_table_names:是否对sql语句大小写敏感,1表示不敏感(MySQL8.0+需要初始化之前设置)
key_buffer_size:用于指定索引缓冲区的大小
max_allowed_packet:设置一次消息传输的最大值
no-auto-rehash:仅仅允许使用键值的UPDATES和DELETES
sql_mode:表示 SQL 模式的参数,通过这个参数可以设置检验 SQL 语句的严格程度
skip-grant-tables:跳过密码验证 (平时不要开启,忘记root密码时再使用)
忘记root密码时:
重置root密码为空(开启skip-grant-tables)
UPDATE mysql.user SET authentication_string = '' WHERE user = 'root';