在Linux中安装MySQL

14 阅读5分钟

初识MySQL

数据库的基本知识

MySQL是一种开源的数据库

MySQLMariadb都是同源的比较流行的关系型数据库

关系型数据库:数据表之间是有关联的

  • MySQL 免费开源
  • Oracle 高效好用但是收费
  • SQL Server Windows平台下用的比较多
  • SQLite 轻量级数据库 Django-开发测试阶段

非关系型数据库:

  • Redis key-value型数据(字段)(缓存-提高并发能力)

  • MongoDB 文档型数据库

  • Hbase 分布式存储(大数据存储和分析)

Linux安装MySQL

检查是否安装过MySQL

rpm -qa |grep mysql

yum安装

(一键安装)方便快捷 ,依赖软件可以直接都安装好

# 查看mysql软件包
yum list |grep  mysql

# 下载mysql软件包
yum install mysql8.4-server -y

# 下载完成后启动服务
systemctl start mysqld

# 设置开机自启动
systemctl enable mysqld

# 直接进入mysql(yum安装默认没有密码)
mysql -uroot 

#卸载 yum uninstall mysql

源码安装

可定制, 依赖及编译环境需要手工安装(推荐)

第一步下载wget
yum install wget -y
第二步下载MySQL yum源配置包
wget https://dev.mysql.com/get/mysql80-community-release-el9-4.noarch.rpm

dnf -y install mysql80-community-release-el9-4.noarch.rpm
第三步安装MySQL服务器
dnf -y install mysql-community-server
第四步启动MySQL
systemctl start mysql
第五步登录MySQL
cat /var/log/mysqld/log |grep password
2025-06-27T12:03:14.384762Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: uesWLRt:t7lp
# locathost后面就是密码
一键安装脚本
#!/bin/bash
set -e
yum install wget -y
wget https://dev.mysql.com/get/mysql80-community-release-el9-4.noarch.rpm
dnf -y install mysql80-community-release-el9-4.noarch.rpm
dnf -y install mysql-community-server
systemctl start mysqld
systemctl enable mysqld
origin=$(cat /var/log/mysqld.log |grep password|sed 's/.*host: //')
mysql -uroot -p"$origin" #<<EOF
#alter user 'root'@'localhost'  identified by "@Deng111";
#exit
#EOF

MySQL安装一些排错

systemctl start|stop|disable|enable|restart  mysqld

如果登录不进MySQL可以这样排错

1.查看进程

ps -aux |grep mysql
[root@mysql ~]# ps -aux|grep mysql
mysql       1485  1.1 12.5 1745396 466200 ?      Ssl  09:44   7:43 /usr/sbin/mysqld

2.查看端口

ss -anplut |grep mysql
lsof -i:3306

3.查看客户端和server端之间的网络问题

  • 服务是否启动

    systemctl status mysqld
    
  • 防火墙

    systemctl status firewalld  #  查看防火墙状态
    systemctl stop firewalld # 关闭防火墙
    systemctl disable firewalld # 关闭开机自启动
    
  • selinux

    更改配置文件的时候selinux会阻碍

    getenforce # 查看selinux状态
    
    setenforce 0 # 临时关闭
    
    # 永久关闭
    vim /etc/selinux/config
    # 将selinux=enforce改成selinux=disabled
    
  • 应用内的限制(MySQL没有授权,比如只支持localhost登录)

  • 操作系统的设置(最大连接数/黑名单/白名单)

telnet 192.168.154.129 3306查看机器连通性

更改配置文件

建议安装后就进行更改,因为所有信息全会丢失!

vim /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove the leading "# " to disable binary logging
# Binary logging captures changes between backups and is enabled by
# default. It's default setting is log_bin=binlog
# disable_log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#
# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password
# 数据存放位置
datadir=/data/mysql
# socket文件存放位置
socket=/data/mysql/mysql.sock
# 日志文件存放位置
log-error=/data/mysql/mysqld.err
# 进程号存放位置
pid-file=/var/run/mysqld/mysqld.pid
#general-log=1
# 查询日存放位置
general-log-file=/data/mysql/tom.log
slow-query-log=1
long_query_time=0.01
# 慢查询存放位置
slow-query-log-file=/data/mysql/slow.log
log_bin=/data/mysql/binary.log
server_id = 1


[client]
socket=/data/mysql/mysql.sock
# 登录用户提示符
prompt=\\u@\\d \\R:\\m>

该配置前确保存放位置存在且所属用户和组都是MySQL

更改完之后重启服务即可

systemctl restart mysqld

基础知识

MySQL字符集

字符集的作用:在磁盘数据二进制,无法将中文直接存储到磁盘上,必须先转换为二进制。

一般采用utf8编码方式

MySQL命令不区分大小写,以分号结束

 show character set;

查看当前配置的字符集

root@(none) 22:39>show variables like "%character%";
  • 数据库层面:创建数据库的时候,可以指定他的字符集,如果没有指定就会使用默认的字符集。

  • 数据表层面:创建数据表的时候,可以指定他的字符集,如果没有指定就会继承库的字符集。

  • 数据列层面:创建一个列的时候,可以指定他的字符集,如果没有指定就会继承表的字符集。

如果出现乱码的话需要全部将他修改成正确的

root@(none) 22:44>create database test1;
Query OK, 1 row affected (0.04 sec)

root@(none) 22:44>show create database test1\G
*************************** 1. row ***************************
       Database: test1
Create Database: CREATE DATABASE `test1` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */
1 row in set (0.01 sec)

root@(none) 22:44>create database test2 character set GBK;
Query OK, 1 row affected (0.04 sec)

root@(none) 22:46>show create database test2\G
*************************** 1. row ***************************
       Database: test2
Create Database: CREATE DATABASE `test2` /*!40100 DEFAULT CHARACTER SET gbk */ /*!80016 DEFAULT ENCRYPTION='N' */
1 row in set (0.00 sec)

MySQL的用户由用户名host组成,host表示用户可以在哪个ip登录

创建用户

create user 'Tom'@'%' identified by '@Deng111';

删除用户

drop user 'jack111'@'192.168.100.%';

更改密码mysql

set password for 'Tom'@'%' = '@Deng123';
alter user user() identified by '@Deng111';

用户授权

grant all on *.* to 'Tom'@'%';
grant insert,select on *.* to 'Tom'@'%';

收回权限

revoke insert on *.* from 'Tom'@'%';
revoke all on *.* from 'Tom'@'%';