CentOS安装Mysql8

2024-08-03 09:29:18 浏览数 (2)

查看版本

代码语言: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 "�tadir%";

默认路径

代码语言: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>

0 人点赞