CentOS7下安装MySQL8.0.13数据库教程(详细图解演示)
一:背景介绍.
1.1 项目部署Linux上面,需要安装MySQL数据库.之前也在本地安装过,现在在云服务器上再安装一下,方便下次查看.安装的方式有三种:
①:手动下载rpm依赖安装.
②:使用Linux的宝塔面板安装.
③:拉取Docker镜像安装.
后面两种安装比较简单,这里说一下第一种手动安装的,这里面有一些小坑,报各种各样的错误,安装以前注意一下即可.
1.2 本教程一共包含以下三个部分:
①:MySQL8.0的安装.
②:MySQL8.0的远程登录设置.
③:JDBC连接MySQL8.0.
④:MySQL8.0的完全卸载.
1.3 使用的是CentOS7服务器环境,自己用的一台华为云服务器.
二:安装过程.
2.1 MySQL官网地址.链接
2.2 MySQL官网下载链接.下载链接
可以看到是.tar压缩包的形式.MySQL5.7.24版本的.
rpm包.
2.3.安装前,首先检查一下本地是否有安装过,避免冲突.
rpm -qa | grep mysql.(没有输出就是没有安装过).如果默认安装了,使用yum remove mysql(模糊匹配即可).
2.4 安装依赖.
yum install -y cmake make gcc gcc-c++ libaio ncurses ncurses-devel
2.5 准备工作做完,下载MySQL.
鼠标右键,选择复制链接地址即可.tar.xz格式的下载包更小一些.5.7.24的tar.gz的要600多M的..xz是一种压缩文件格式.压缩效率非常高.
XZ是一种压缩文件格式,采用LZMA SDK压缩,压缩率大,产生的目标文件较gzip压缩文件 ( .gz 或 .tgz )小30%,较 .bz2 小15%.
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz
(wget后面去掉那个/usr/local/src).
2.6 解压压缩包.
tar.xz格式的分两步解压.
①:xz -d mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz.(那个tar.xz的压缩文件不见了,-k参数可以保留这个压缩文件).
2.7 添加系统MySQL系统用户组和mysql用户.
①:系统MySQL组:groupadd mysql
②:添加mysql用户:useradd -r -g mysql mysql
2.8 安装MySQL.
解压: tar xvf mysql-8.0.13-linux-glibc2.12-x86_64.tar(已经不是.gz格式的了,就不用加z参数了).
复制到指定目录
cp -r mysql-8.0.13-linux-glibc2.12-x86_64 /usr/local/mysql
修改当前目录拥有者为mysql用户 chown -R mysql:mysql ./
chown -R mysql:mysql ./(-R:指定目录下以及子目录下的所有文件).
chown [选项] [所有者]:[组] 文件.
安装mysql:(--lower-case-table-names=1:表名以小写形式存储在磁盘上,名称比较不区分大小写,0是区分大小写的,生产环境设置为1)
默认是0,即时在配置文件里面指定为1,但是启动数据库服务的时候设置不一致,会报错.
报错信息如下:
Different lower_case_table_names settings for server ('1') and data dictionary ('0')
bin/mysqld --initialize --user=mysql --lower-case-table-names=1 --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
修改当前data目录拥有者为mysql用户 chown -R mysql:mysql data
2.9 配置MySQL.
vim /etc/my.cnf
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
#不区分大小写 (sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 这个简单来说就是sql语句是否严格)
lower_case_table_names = 1
log-error=/var/log/mysqld.log
pid-file=/usr/local/mysql/data/mysqld.pid
添加开机启动 cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
修改 vim /etc/init.d/mysqld
修改46和47行.添加内容如下图.
对于vim无法显示行号的.这里说一下.有系统全局配置和个人配置两种方式.
vim /etc/vimrc(系统范围内的初始化配置).追加set number.我这里是之前配置过了,查看一下.
2.10 启动MySQL.
service mysqld start
加入开机启动:
chkconfig --add mysqld
登录MySQL服务.发现无法识别mysql命令.
添加软连接.
ln -s /usr/local/mysql/bin/mysql /usr/bin
先重新启动MySQL服务.
service mysqld restart
使用临时密码登录MySQL.临时密码在前面的安装过程中有提到过.
如果不修改默认的密码,直接使用会报错.
修改新密码.然后刷新权限.
版本信息:
状态信息:
当前所有的数据库:
2.11 设置允许远程登录. MySQL默认不容许远程登录的.mysql数据库下.自带一张用户表.user.
Navicat下测试一下不容许的.修改为%可以使任意IP访问的.
skip-grant-tables(MySQL跳过密码验证).可直接登录的,在/etc/my.cnf中添加重新启动MySQL服务即可.
MySQL8.0需要先创建用户,然后才能授权.否则报错:
更新host的默认配置:
MySQL8之前的版本加密规则:mysql_native_password.mysql8之后,加密规则是caching_sha2_password.例如Navicat客户端工具只支持旧的版本.
① 修改加密规则:
② 更新一下用户root的密码:
③ 刷新权限:(更新一下用户密码,和新增用户,都必须刷新一下系统权限相关的表).
Navicat下再次测试连接一下.
新建一个测试数据库.
Linux服务端查看一下结果.
三:JDBC连接MySQL8.0.13.
3.1 首先是准备驱动.这里使用MySQL8.0.13对应的驱动.使用Maven先下载下来.
3.2 工程搭建.我之前在IDEA中下载下来了MySQL8.0.13的驱动,在Maven的本地仓库里面,直接复制到本地的Java工程即可.
一个平凡本分的Java项目,使用了DBCP的数据库连接池.
jdbc.properties的配置文件如下:
JdbcUtil源码如下:
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import org.apache.commons.dbcp.BasicDataSource;
/**
* title: JdbcUtil
* @author:
* date:
* description:基于连接池封装JDBC
*/
public class JdbcUtil {
// 声明数据库连接池变量
private static String driverClass=null;
private static String url=null;
private static String user=null;
private static String password=null;
private static int initSize;
private static int maxActive;
private static int maxWait;
private static BasicDataSource source=new BasicDataSource();
// 读取配置文件
static{
try {
Properties properties=new Properties();
InputStream inputStream=JdbcUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
properties.load(inputStream);
driverClass=properties.getProperty("jdbc.driverClass");
url=properties.getProperty("jdbc.url");
user=properties.getProperty("jdbc.user");
password=properties.getProperty("jdbc.password");
initSize=Integer.parseInt(properties.getProperty("jdbc.initSize"));
maxActive=Integer.parseInt(properties.getProperty("jdbc.maxActive"));
maxWait=Integer.parseInt(properties.getProperty("jdbc.maxWait"));
// 创建数据源
source.setDriverClassName(driverClass);
source.setUrl(url);
source.setUsername(user);
source.setPassword(password);
source.setInitialSize(initSize);
source.setMaxActive(maxActive);
source.setMaxWait(maxWait);
}catch (Exception e) {
e.printStackTrace();
}
}
// 建立连接
public static synchronized Connection getConnection() throws SQLException{
return source.getConnection();
}
// 关闭连接
public static void dbcpClose(Connection connection, Statement statment, ResultSet resultSet) throws SQLException{
if(resultSet!=null){
try {
resultSet.close();
} catch (Exception e) {
e.printStackTrace();
}
resultSet=null;
}
if(statment!=null){
try {
statment.close();
} catch (Exception e) {
e.printStackTrace();
}
statment=null;
}
if(connection!=null){
try {
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
connection=null;
}
}
// 测试连接
public static void main(String[] args) throws SQLException {
System.out.println(JdbcUtil.getConnection().toString());
}
}
运行结果:
修改jdbc.properties中的.
jdbc.driverClass=com.mysql.jdbc.Driver为jdbc.driverClass=com.mysql.cj.jdbc.Driver.
再次运行程序:
完成一次简单的查询:
首先是数据库里面新建一张表test.
编写简单的查询:其他的封装是和上面一致的.main方法里面有些不同.
public static void main(String[] args) throws SQLException {
Connection connection =JdbcUtil.getConnection();
System.out.println(JdbcUtil.getConnection().toString());
String sql="select id,username,age FROM test;";
// 预编译对象
Statement pStatement=connection.prepareStatement(sql);
ResultSet resultSet=pStatement.executeQuery(sql);
while(resultSet.next()){
Integer id=(Integer)resultSet.getObject("id");
String username=resultSet.getString("username");
Integer age=(Integer)resultSet.getObject("age");
System.out.println("查询用户"+id+"信息如下:["+id+","+username+","+age+"]");
}
// 关闭
JdbcUtil.dbcpClose(connection, pStatement, resultSet);
}
运行结果:
整个过程非常简单,①是使用MySQL8.0的驱动;②MySQL驱动使用:com.mysql.cj.jdbc.Driver.其他方面了解一下新特性后在介绍.
四:Linux下完全卸载MySQL.
4.0 MySQL 目录结构:
4.1 由于没有使用rpm的方式安装Mysql,故没有依赖.
service mysql stop
4.2直接删除MYSQL的安装目录.例如这里是/usr/local/mysql.
rm -rf /usr/local/mysql
4.3 删除配置文件.
rm -rf /etc/my.cnf.(配置文件,很关键).
rm -rf /etc/init.d/mysqld.(开机自启动配置).
卸载过程也是自己测试过的,按照这些步骤卸载了,再次重新安装不会有残留的文件,报各种奇怪的错误.是直接卸载干净的.
整个过程,注意一下文中的细节,主要是下载->解压到指定目录->分配目录权限->安装->配置->启动MYSQL服务.尽量避免一些不必要的坑,节约时间嘛. MySQL8的一些新特性和MySQL5.7的安装还是有一些区别的.
这里推荐一篇Linux下MySQL5.7.22的安装博客,写的非常好.图文描述清晰.链接.
更多推荐
所有评论(0)