CentOS7下安装MySQL8.0.13数据库教程(详细图解演示)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HcJsJqJSSM/article/details/85257305

一:背景介绍.

      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的安装博客,写的非常好.图文描述清晰.链接.

猜你喜欢

转载自blog.csdn.net/HcJsJqJSSM/article/details/85257305