YUM镜像
(1) 备份
1 | mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup |
(2) 查看系统版本
1 | cat /etc/redhat-release |
(3) 下载
下载新的CentOS-Base.repo 到/etc/yum.repos.d/
CentOS 7
1
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
CentOS 6
1
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
CentOS 5
1
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
(4) 生成缓存
1 | yum makecache fast |
安装
1: 检测系统是否自带安装MySQL
1 | yum list installed | grep mysql |
2: 删除系统自带的mysql及其依赖 命令:
1 | yum -y remove mysql-libs.x86_64 |
3: 给CentOS添加rpm源
1 | wget -i http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm |
4:安装mysql 服务器 命令:
1 | yum install -y mysql-community-server |
如果报错
源 “MySQL 5.7 Community Server” 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。
解决方法
1 | rm /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql |
5: 启动mysql 命令:
1 | service mysqld start |
6: 查看mysql是否自启动,并且设置开启自启动 命令:
1 | chkconfig --list | grep mysqld |
或者
1 | systemctl enable mysqld.service |
配置
配置修改
表名/编码/连接数/数据包大小
设置表名不区分大小写/字符编码/连接数
修改 /etc/my.cnf
1 | vi /etc/my.cnf |
添加以下的5行
1 | [mysqld] |
重启
1 | service mysqld restart |
修改密码
默认密码
打开日志文件
1 | vi /var/log/mysqld.log |
找到密码
1 | [Note] A temporary password is generated for root@localhost: pHsgs6o4t4+6 |
修改密码:
MySQL 5.7推荐使用ALTER USER修改密码
MySQL修改用户的密码主要有:ALTER USER 和UPDATE用户表
ALTER USER方式
推荐用此方式
1 | mysql -uroot -p |
连接上以后
1 | set global validate_password_policy=0; |
注意
上面的
user()
为当前Mysql登录的用户 也可以换成其它要修改的用户
Mysql8.0配置
1 | set global validate_password.policy=0; |
UPDATE方式
在MySQL 5.7 password
字段已从mysql.user
表中删除,新的字段名是authenticalion_string
.
1 | use mysql; |
5.1
1 | use mysql; |
允许远程登录
1 | GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; |
设置密码永不过期
1 | ALTER USER 'root'@'%' PASSWORD EXPIRE NEVER; |
密码丢失
按如下处理
1 | vi /etc/my.cnf |
在[mysqld]
的段中加上一句:skip-grant-tables
例如:
1 | [mysqld] |
保存并且退出vi。
重启
1 | service mysqld restart |
这时候重新连接数据库就不用输入密码了。
常见错误
错误1
You must reset your password using ALTER USER statement before executing this statement
1 | SET PASSWORD = PASSWORD('your new password'); |
错误2
Your password does not satisfy the current policy requirements
数据库密码太简单了 复杂点即可
也可以输入以下
1 | set global validate_password_policy=0; |
卸载
1 | chkconfig mysqld off |
防火墙配置
添加信任规则
打开文件
1 | vim /etc/sysconfig/iptables |
添加规则
1 | -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT |
重启防火墙
1 | service iptables restart |
常见问题
默认文件存储位置
数据库文件存储位置
1 | show global variables like "%datadir%"; |
默认路径
1 | cd /var/lib/mysql |
日志文件位置
1 | vi /var/log/mysqld.log |
修改默认位置请参看https://www.psvmc.cn/article/2019-02-13-mysql-datadir.html
启动失败
1 | [root@root ~]# /etc/init.d/mysqld start |
解决方式
1 | mkdir -p /var/run/mysqld/ |
长时间未访问 断开
mysql有一个连接超时时间的概念。。。查询此项目的数据库的连接超时时间为28800秒,即为8小时。。
1 | mysql> show global variables like 'wait_timeout'; |
于是不难得知,肯定是由于项目长时间没有请求数据库,数据库过了8小时和这个连接超时时间之后,就会断开连接。。
而我们的项目使用的是c3p0的连接池,,过了8小时后,连接池中的连接已经被mysql断开了,即连接失效。。
但是c3p0认为此连接却依然有效,此时当我们发请求请求数据库中的数据时,由于连接失效,并不能去连接数据库操纵数据,所以服务器会抛出一个500的错误
问题的原因已经找到,那我们该怎么解决呢??
其实解决起来很简单的。。
先说第一种办法吧,就是将数据库的连接超时时间设置大一点,
1 | msyql> set global wait_timeout=1814400; |
当然这种办法我并不推荐,,这个办法不太好,弊端太多了 比如占用数据库资源,关键是这种办法并不能彻底根治mysql连接断开这种情况
所以我推荐第二种办法:设置c3p0隔多少时间自动检测与数据库的连接,如果断开则自动重连
1 | <bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> |