龙空技术网

推荐一篇最权威的mysql安装指南

Puwon 200

前言:

当前小伙伴们对“mysql的位置”大约比较关怀,朋友们都需要学习一些“mysql的位置”的相关文章。那么小编也在网络上汇集了一些关于“mysql的位置””的相关内容,希望各位老铁们能喜欢,你们快快来学习一下吧!

最近有网友私信,因疫情原因居家办公,想在家搭建数据库环境,但是网上零零散散的教程,新旧不一,所以今天更新一篇mysql安装相关的内容,如有不对的地方,还请指正。

mysql安装有很多种方式,比如 RPM、Tar或者Docker,但是Mysql属于内存型应用,生产环境不适合采用docker安装,所以本文主要针对前两种进行介绍。

首先卸载mariadb

众所周知,这个数据库是因为mysql被收购后担心收费而产生的分支,为了避免纠纷,centos内置了mariadb,而不是mysql,所以要首先卸载掉。

# 查找mariadb版本

rpm -qa|grep mariadb

# 卸载(根据本机的情况)

rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64

基于RPM的安装方式

直接看shell命令吧,内部添加了注解,这要比文字直观的(整个过程也同样来自官方手册)。

# 下载

cd /usr/local/src

wget

# 更换为正式文件

yum install mysql80-community-release-el7-{version-number}.noarch.rpm

# 切换安装版本

yum-config-manager --enable mysql57-community

yum-config-manager --disable mysql80-community

# 验证

yum repolist enabled | grep mysql

# 安装

yum install -y mysql-community-server

# 启动,启动前记得修改配置文件(/etc/my.conf),8.0版本启动后无法修改大小写敏感配置

service mysqld start

# 查找默认密码

grep 'temporary password' /var/log/mysqld.log

# 更换密码

mysql -uroot -p

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Wdy@123456';

# 添加用户和授权

# 这样数据库中会存在两个userroot,一个用于本地访问,一个用户远程访问

create user 'root'@'%' identified by 'Wdy@123456';

# 给远程root授予全部权限

grant all privileges on *.* to 'root'@'%';

按照上述步骤,正常是可以顺利安装成功的,如果遇到了问题,下文有各类问题的解决方案。

基于tar的安装方式

准备文件

上传tar文件并解压到 /usr/local/mysql,如下:

mysql tar 位置

配置环境

添加my.cnf文件,组和用户,以及修改权限。

# 添加组和用户

groupadd mysql

useradd -g mysql mysql

# 手动创建数据目录data

cd /usr/local/mysql

mkdir data

# 授权

chmod -R 777 /usr/local/mysql

chmod -R 777 /usr/local/mysql/data

chown -R mysql:mysql /usr/local/mysql

# 添加配置文件 my.cnf【文件内容见下文】

vim /etc/my.cnf

# 保存退出后,授权配置文件

chmod 644 /etc/my.cnf

初始化数据库

cd /usr/local/mysql/bin

# 该命令会打印初始化密码,把这个密码记录下来,密码一般是乱78糟的样子

./mysqld --initialize --console

启动数据库

cd /usr/local/mysql/support-files

./mysql.server start

# 如果发生ERROR!ERROR! The server quit without updating PID file

# 解决办法

chown -R mysql:mysql /usr/local/mysql/data

chmod -R 755 /usr/local/mysql/data

修改账户

mysql服务如果正常启动,那么接下来就是添加可远程访问mysql的用户了,自带的mysql用户root不允许远程访问mysql。

# 使用默认密码(乱78糟那堆),登录mysql

mysql -u root -p

# 把乱78糟的默认密码改为自己喜欢的,如123123

>> alter user 'root'@'localhost' identified by '123123';

添加用户

默认mysql自带root用户,但是该用户默认只允许本机登录mysql,不支持远程登录。

#切换数据库

>> use mysql;

# 获取root用户的host

>> select host,user from user where user='root';

# 更新mysql用户允许远程访问(不建议)

>> update user set host='%' where user='root' and host='localhost';

# 添加一个新用户(建议),这样数据库中会存在两个userroot,一个用于本地访问,一个用户远程访问

>> create user 'root'@'%' identified by 'password';

# 给新用户授权

>> grant all on *.* to 'root'@'%';

配置启动方式

cd /usr/local/mysql/support-files

# 把启动脚本复制到自启动目录

cp mysql.server /etc/init.d/mysqld

service mysqld restart

# 创建软连接

# 这样在任何目录都可以直接执行mysql

ln -s /usr/local/mysql/bin/mysql /usr/bin

# 加入开机启动

chkconfig --add mysqld

chkconfig mysqld on

配置防火墙,放行端口

还是直接上代码吧:

# 放行端口

>> firewall-cmd --zone=public --add-port=3306/tcp --permanent

# 防火墙重启

>> firewall-cmd --reload

# 查看是否已经放行

>> firewall-cmd --list-ports

# 如果采用navicat作为客户端,有时会无法连接,可采用以下方式解决

>> alter user 'root'@'%' identified with mysql_native_password by '123123';

安装中常见的问题及解决方案Public key for mysql-community-libs-compat-5.7.37-1.el7.x86_64.rpm is not installed

解决办法:执行:rpm --import

1044-Access denied for user 'root'@'localhost' to database

授权时遇到该问题:打开 mysql 数据库的 user 表,把当前用户的所有配置都改成Y,重启mysql即可

如果出现跨VM链接数据库(如nacos)无法链接的情况,出现:public key retrieval is not allowed

在连接配置中添加 allowPublicKeyRetrieval=true:

如:jdbc:mysql://192.168.10.101:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true

GPG key retrieval failed: [Errno 14] curl#37 - "Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022"

rpm --import

mysql-community-server-8.0.29-1.el7.x86_64: [Errno 256] No more mirrors to try.

yum clean all

yum makecache

yum install -y mysql-community-server

如何修改密码策略看看默认的密码策略,执行 show variables like 'validate_password%';

+--------------------------------------+--------+

| Variable_name | Value |

+--------------------------------------+--------+

| validate_password.check_user_name | ON |

| validate_password.dictionary_file | |

| validate_password.length | 8 | -- 长度至少8位

| validate_password.mixed_case_count | 1 | -- 至少一个大写字母

| validate_password.number_count | 1 | -- 至少一个数字

| validate_password.policy | MEDIUM | -- 校验规则

| validate_password.special_char_count | 1 | -- 至少一个特殊符号

+--------------------------------------+--------+

修改策略

set global validate_password.policy=0set global validate_password.length=6

# 这样就可以设置密码=123456了。Mysql常用配置文件内容

[mysqld]

# 设置3306端口

port=3306

# 设置mysql的安装目录

basedir=/usr/local/mysql

# 设置mysql数据库的数据的存放目录

datadir=/usr/local/mysql/data

# 允许最大连接数

max_connections=10000

# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统

max_connect_errors=10

# 服务端使用的字符集默认为UTF8

character-set-server=utf8

# 创建新表时将使用的默认存储引擎

default-storage-engine=INNODB

# 配置数据库不区分大小写

lower_case_table_names=1

# 默认使用“mysql_native_password”插件认证

default_authentication_plugin=mysql_native_password

#sql_model 去掉ONLY_FULL_GROUP_BY

sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

[mysql]

# 设置mysql客户端默认字符集

default-character-set=utf8

[client]

# 设置mysql客户端连接服务端时默认使用的端口

port=3306

default-character-set=utf8

关于Sql-Mode必须知道的配置ONLY_FULL_GROUP_BY

对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中

NO_AUTO_VALUE_ON_ZERO

该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。

STRICT_TRANS_TABLES

如果一个值不能插入到一个事务中,则中断当前的操作,对非事务表不做限制

NO_ZERO_IN_DATE

不允许日期和月份为零

NO_ZERO_DATE

mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告

ERROR_FOR_DIVISION_BY_ZERO

在insert或update过程中,如果数据被零除,则产生错误而非警告。如果未给出该模式,那么数据被零除时Mysql返回NULL

NO_AUTO_CREATE_USER

禁止GRANT创建密码为空的用户

NO_ENGINE_SUBSTITUTION

如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常

PIPES_AS_CONCAT

将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样是,也和字符串的拼接函数Concat想类似

ANSI_QUOTES

不能用双引号来引用字符串,因为它被解释为识别符

标签: #mysql的位置