前言:
当前小伙伴们对“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,如下:
配置环境
添加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的位置