SELECT VERSION();
添加源
sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
yum list mysql
安装
sudo yum install -y --nogpgcheck mysql-community-server
启动MySQL服务:
sudo systemctl start mysqld
查找临时生成的root密码:
sudo grep 'temporary password' /var/log/mysqld.log
可以看到生成的临时密码
A temporary password is generated for root@localhost: Vd10lgqN5m;G
安全配置MySQL(设置root密码等):
sudo mysql_secure_installation
会让先输入旧密码,再输入两次新密码。
密码要求必须有大小写长度大于8位。
如果想设置简单一点的密码,可以设置密码策略,但是这个密码策略必须修改过一次密码之后才能设置。
设置密码策略
登录
mysql -uroot -p
输入密码登录后
SET GLOBAL validate_password.policy = LOW; -- 设置为较低的密码策略
SET GLOBAL validate_password.length = 6; -- 设置密码长度为6
quit
重启
sudo systemctl restart mysqld
启动MySQL服务,并设置开机自启:
sudo systemctl enable mysqld
sudo systemctl start mysqld
推荐用此方式
mysql -uroot -p
连接上以后
SET GLOBAL validate_password.policy = 0; -- 设置为较低的密码策略
SET GLOBAL validate_password.length = 6; -- 设置密码长度为6
alter user user() identified by "123456";
flush privileges;
注意
上面的
user()
为当前Mysql登录的用户 也可以换成其它要修改的用户
表名/编码/连接数/数据包大小
设置表名不区分大小写/字符编码/连接数
创建文件
mkdir -p /var/log/mysql/
vi /var/log/mysql/mysql-slow.log
修改 /etc/my.cnf
vi /etc/my.cnf
添加以下的几行行
[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
如果报错可以查看错误
vi /var/log/mysqld.log
重启
service mysqld restart
CREATE USER 'root'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
quit
ALTER USER 'root'@'%' PASSWORD EXPIRE NEVER;
flush privileges;
按如下处理
vi /etc/my.cnf
在[mysqld]
的段中加上一句:skip-grant-tables
例如:
[mysqld]
skip-grant-tables
保存并且退出vi。
重启
service mysqld restart
这时候重新连接数据库就不用输入密码了。
chkconfig mysqld off
service mysqld stop
yum remove mysql-community-server
添加信任规则
打开文件
vim /etc/sysconfig/iptables
添加规则
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
重启防火墙
service iptables restart
数据库文件存储位置
show global variables like "%datadir%";
默认路径
cd /var/lib/mysql
日志文件位置
vi /var/log/mysqld.log
修改默认位置请参看https://cloud.tencent.com/developer/article/1524080
[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.
解决方式
mkdir -p /var/run/mysqld/
chown mysql.mysql /var/run/mysqld/
mysql有一个连接超时时间的概念。。。查询此项目的数据库的连接超时时间为28800秒,即为8小时。。
mysql> show global variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 28800 |
+---------------+-------+
1 row in set
于是不难得知,肯定是由于项目长时间没有请求数据库,数据库过了8小时和这个连接超时时间之后,就会断开连接。。
而我们的项目使用的是c3p0的连接池,,过了8小时后,连接池中的连接已经被mysql断开了,即连接失效。。
但是c3p0认为此连接却依然有效,此时当我们发请求请求数据库中的数据时,由于连接失效,并不能去连接数据库操纵数据,所以服务器会抛出一个500的错误
问题的原因已经找到,那我们该怎么解决呢??
其实解决起来很简单的。。
先说第一种办法吧,就是将数据库的连接超时时间设置大一点,
msyql> set global wait_timeout=1814400;
msyql> set global interactive_timeout=1814400;
当然这种办法我并不推荐,,这个办法不太好,弊端太多了 比如占用数据库资源,关键是这种办法并不能彻底根治mysql连接断开这种情况
所以我推荐第二种办法:设置c3p0隔多少时间自动检测与数据库的连接,如果断开则自动重连
<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>