前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CentOS安装Mysql8

CentOS安装Mysql8

作者头像
码客说
发布2024-08-03 09:29:18
860
发布2024-08-03 09:29:18
举报
文章被收录于专栏:码客

查看版本

代码语言:javascript
复制
SELECT VERSION();

使用Yum安装

添加源

代码语言:javascript
复制
sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
yum list mysql

安装

代码语言:javascript
复制
sudo yum install -y --nogpgcheck mysql-community-server

启动MySQL服务:

代码语言:javascript
复制
sudo systemctl start mysqld

查找临时生成的root密码:

代码语言:javascript
复制
sudo grep 'temporary password' /var/log/mysqld.log

可以看到生成的临时密码

A temporary password is generated for root@localhost: Vd10lgqN5m;G

安全配置MySQL(设置root密码等):

代码语言:javascript
复制
sudo mysql_secure_installation

会让先输入旧密码,再输入两次新密码。

密码要求必须有大小写长度大于8位。

如果想设置简单一点的密码,可以设置密码策略,但是这个密码策略必须修改过一次密码之后才能设置。

设置密码策略

登录

代码语言:javascript
复制
mysql -uroot -p

输入密码登录后

代码语言:javascript
复制
SET GLOBAL validate_password.policy = LOW; -- 设置为较低的密码策略
SET GLOBAL validate_password.length = 6;  -- 设置密码长度为6

quit

重启

代码语言:javascript
复制
sudo systemctl restart mysqld

启动MySQL服务,并设置开机自启:

代码语言:javascript
复制
sudo systemctl enable mysqld
sudo systemctl start mysqld

修改密码

推荐用此方式

代码语言:javascript
复制
mysql -uroot -p

连接上以后

代码语言:javascript
复制
SET GLOBAL validate_password.policy = 0; -- 设置为较低的密码策略
SET GLOBAL validate_password.length = 6;  -- 设置密码长度为6
alter user user() identified by "123456";
flush privileges;

注意

上面的user()为当前Mysql登录的用户 也可以换成其它要修改的用户

配置

配置修改

表名/编码/连接数/数据包大小

设置表名不区分大小写/字符编码/连接数

创建文件

代码语言:javascript
复制
mkdir -p  /var/log/mysql/
vi /var/log/mysql/mysql-slow.log

修改 /etc/my.cnf

代码语言:javascript
复制
vi /etc/my.cnf

添加以下的几行行

代码语言:javascript
复制
[mysqld]
character-set-server=utf8mb4
max_connections = 1000
max_allowed_packet = 256M
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

slow_query_log = ON
slow-query-log-file = /var/log/mysql/mysql-slow.log
long_query_time = 2

如果报错可以查看错误

代码语言:javascript
复制
vi /var/log/mysqld.log

重启

代码语言:javascript
复制
service mysqld restart

允许远程登录

代码语言:javascript
复制
CREATE USER 'root'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES; 
quit

设置密码永不过期

代码语言:javascript
复制
ALTER USER 'root'@'%' PASSWORD EXPIRE NEVER;
flush privileges;

密码丢失

按如下处理

代码语言:javascript
复制
vi /etc/my.cnf

[mysqld]的段中加上一句:skip-grant-tables

例如:

代码语言:javascript
复制
[mysqld]
skip-grant-tables

保存并且退出vi。

重启

代码语言:javascript
复制
service mysqld restart

这时候重新连接数据库就不用输入密码了。

卸载

代码语言:javascript
复制
chkconfig mysqld off
service mysqld stop
yum remove mysql-community-server

防火墙配置

添加信任规则

打开文件

代码语言:javascript
复制
vim /etc/sysconfig/iptables

添加规则

代码语言:javascript
复制
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

重启防火墙

代码语言:javascript
复制
service iptables restart

常见问题

默认文件存储位置

数据库文件存储位置

代码语言:javascript
复制
show global variables like "%datadir%";

默认路径

代码语言:javascript
复制
cd /var/lib/mysql

日志文件位置

代码语言:javascript
复制
vi /var/log/mysqld.log

修改默认位置请参看https://cloud.tencent.com/developer/article/1524080

启动失败

代码语言:javascript
复制
[root@root ~]# /etc/init.d/mysqld start
Starting mysqld (via systemctl):  Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.

解决方式

代码语言:javascript
复制
mkdir -p /var/run/mysqld/
chown mysql.mysql /var/run/mysqld/

长时间未访问 断开

mysql有一个连接超时时间的概念。。。查询此项目的数据库的连接超时时间为28800秒,即为8小时。。

代码语言:javascript
复制
mysql> show global variables like 'wait_timeout';
 +---------------+-------+
 | Variable_name | Value |
 +---------------+-------+
 | wait_timeout  | 28800 |
 +---------------+-------+
 1 row in set

于是不难得知,肯定是由于项目长时间没有请求数据库,数据库过了8小时和这个连接超时时间之后,就会断开连接。。

而我们的项目使用的是c3p0的连接池,,过了8小时后,连接池中的连接已经被mysql断开了,即连接失效。。

但是c3p0认为此连接却依然有效,此时当我们发请求请求数据库中的数据时,由于连接失效,并不能去连接数据库操纵数据,所以服务器会抛出一个500的错误

问题的原因已经找到,那我们该怎么解决呢??

其实解决起来很简单的。。

先说第一种办法吧,就是将数据库的连接超时时间设置大一点,

代码语言:javascript
复制
msyql> set global wait_timeout=1814400;
msyql> set global interactive_timeout=1814400;

当然这种办法我并不推荐,,这个办法不太好,弊端太多了 比如占用数据库资源,关键是这种办法并不能彻底根治mysql连接断开这种情况

所以我推荐第二种办法:设置c3p0隔多少时间自动检测与数据库的连接,如果断开则自动重连

代码语言:javascript
复制
<bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">  
    <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>  
    <property name="driverClass" value="${jdbc.driverClass}"></property>  
    <property name="user" value="${jdbc.user}"></property>  
    <property name="password" value="${jdbc.password}"></property>  
	//下面两个属性就是设置c3p0隔28800秒自动检测与数据库的连接(28800也是mysql的默认的连接超时时间)  
    <property name="testConnectionOnCheckin" value="true"></property>  
    <property name="idleConnectionTestPeriod" value="28800"></property>  
</bean>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-08-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 查看版本
  • 使用Yum安装
  • 修改密码
  • 配置
    • 配置修改
      • 允许远程登录
        • 设置密码永不过期
        • 密码丢失
        • 卸载
        • 防火墙配置
        • 常见问题
          • 默认文件存储位置
            • 启动失败
              • 长时间未访问 断开
              相关产品与服务
              数据库
              云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档