初识MySQL
数据库的基本知识
MySQL是一种开源的数据库
MySQL和Mariadb都是同源的比较流行的关系型数据库
关系型数据库:数据表之间是有关联的
- 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'@'%';