1 SQL简介
SQL(Structured Query Language)是一种用于管理和操作关系型数据库的编程语言。它被用于创建、修改和查询数据库,以及执行诸如数据插入、删除和更新等各种任务。SQL在Web开发、数据分析和数据库管理系统中被广泛应用。
SQL具有以下特点:
- 关系型数据库:SQL用于管理关系型数据库,其中数据被组织为表(Table)的形式。表由行(Row)和列(Column)组成,行表示数据记录,列表示数据属性。
- 数据定义语言(DDL):SQL包括数据定义语言,用于创建、修改和删除数据库对象,例如,CREATE TABLE用于创建表,ALTER TABLE用于修改表结构,DROP TABLE用于删除表。
- 数据操作语言(DML):SQL还包括数据操作语言,用于插入、更新和删除表中的数据。例如,INSERT INTO用于插入数据,UPDATE用于更新数据,DELETE用于删除数据。
- 查询语言(SELECT):SQL提供了强大的查询语言,用于从一个或多个表中检索数据。SELECT语句用于指定所需的列和条件,从而获取满足条件的数据。
- 条件和过滤:SQL允许使用条件和过滤器来限制查询结果。WHERE子句用于指定条件,以筛选满足条件的数据。
- 排序和分组:SQL允许对查询结果进行排序和分组。ORDER BY子句用于按照指定的列对结果进行排序,GROUP BY子句用于按照指定的列对结果进行分组。
- 连接和关联:SQL允许通过连接(JOIN)操作将多个表关联起来。通过指定关联条件,可以检索到相关联的数据。
- 聚合函数:SQL提供了各种聚合函数,如SUM、AVG、COUNT等,用于对数据进行统计和计算。
具体的SQL实现可能在不同的数据库管理系统中略有不同,每个系统可能具有自己的附加功能和语法,但基本的SQL概念在不同的实现中基本保持一致。
2环境搭建
安装VMware Workstation
创建一台虚拟机
#系统版本
[root@mrloam ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
#cpu
[root@mrloam ~]# free -h
total used free shared buff/cache available
Mem: 3.7G 233M 2.6G 11M 843M 3.2G
Swap: 3.9G 0B 3.9G
虚拟机配置,由于我们只是针对sql进行学习,所有无需过多配置
2.1配置主机名和ip地址
[root@localhost ~]# hostnamectl set-hostname mrloam
[root@localhost ~]# nmcli connection modify ens33 ipv4.method manual ipv4.addresses "192.168.1.8/24" ipv4.gateway 192.168.1.254 ipv4.dns "8.8.8.8,114.114.114.114" connection.autoconnect yes
[root@localhost ~]# nmcli connection up ens33
2.2配置yum源
#使用本地镜像包挂载
cat >> /etc/fstab << 'EOF'
/media/CentOS-7-x86_64-Everything-2009.iso /mnt iso9660 defaults 0 0
EOF
#让配置生效
mount -a
#编写yum配置文件
cd /etc/yum.repos.d/
mkdir bak
mv * bak/
cat > local.repo << 'EOF'
[dvd]
name=dvd
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF
#查看yum软件包
yum clean all
yum repolist
3安装mysql
3.1下载mysql安装包
MySQL官网: http://www.mysql.com
[root@mrloam ~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.35-el7-x86_64.tar.gz
3.2卸载系统自带的mariadb软件
#检查系统中的Mysql或mariadb,如果存在将其卸载。
[root@mrloam ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.68-1.el7.x86_64
#卸载mariadb
[root@mrloam ~]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
[root@mrloam ~]# rpm -qa | grep mysql
#创建用户,主要的目的是为了统一MySQL的用户。
[root@mrloam ~]# useradd mysql -s /sbin/nologin
#按需安装依赖包
[root@mrloam ~]# yum -y install ncurses-devel ncurses-compat-libs libaio-devel gcc gcc-c++ numactl libaio glibc cmake autoconf
3.3解压mysql安装包并配置环境变量
[root@mrloam ~]# tar -xf mysql-5.7.35-el7-x86_64.tar.gz -C /usr/local/
[root@mrloam ~]# cd /usr/local/
[root@mrloam local]# mv mysql-5.7.35-el7-x86_64/ mysql
#创建mysql数据目录以及配置目录
[root@mrloam local]# mkdir -p /data/mysql/{data,logs,binlog}
#配置mysql环境变量,方便执行
[root@mrloam local]# cat >> /etc/profile << 'EOF'
#MYSQL
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
EOF
[root@mrloam local]# source /etc/profile
3.4配置mysql
#创建mysql配置文件
[root@mrloam local]# cat > /etc/my.cnf << 'EOF'
# MySQL客户端配置
[client]
port = 3306 # 客户端连接端口,默认3306
socket = /usr/local/mysql/mysqld.sock # Unix域套接字文件路径
default-character-set = utf8mb4 # 默认字符集,支持完整的Unicode字符
# MySQL命令行客户端配置
[mysql]
prompt="\u@mysqldb \R:\m:\s [\d]> " # 命令行提示符格式:\u=用户名, \h=主机, \d=数据库
no-auto-rehash # 禁用自动补全功能(0=启用, 1=禁用)
# MySQL服务器配置
[mysqld]
user = mysql # 运行MySQL服务的系统用户
port = 3306 # 服务器监听端口(1024-65535)
socket = /usr/local/mysql/mysqld.sock # Unix域套接字文件路径
skip-name-resolve # 禁用DNS反向解析(ON=禁用, OFF=启用)
# 字符集配置
character-set-server = utf8mb4 # 服务器字符集(utf8mb4支持完整Unicode)
collation-server = utf8mb4_general_ci # 排序规则(general_ci=不区分大小写)
default-time_zone='+8:00' # 默认时区(+8:00=东八区)
# 服务器标识
server_id = 8 # 服务器唯一ID(主从复制时需要, 1-4294967295)
# 目录配置
basedir = /usr/local/mysql # MySQL安装目录
datadir = /data/mysql/data # 数据存储目录
secure_file_priv = /data/mysql/data # 安全文件目录(NULL=禁用导入导出)
pid-file = /usr/local/mysql/mysql.pid # 进程ID文件路径
# 连接配置
max_connections = 1024 # 最大连接数(默认151)
max_connect_errors = 100 # 最大连接错误数(默认100)
wait_timeout = 600 # 非交互连接超时(秒, 默认28800)
interactive_timeout = 600 # 交互连接超时(秒, 应与wait_timeout相同)
max_allowed_packet = 128M # 最大数据包大小(默认4M)
table_open_cache = 2048 # 表缓存数量(默认2000)
back_log = 600 # 连接请求队列长度(默认80)
# 事务与安全
transaction_isolation = READ-COMMITTED # 事务隔离级别(READ-UNCOMMITTED|READ-COMMITTED|REPEATABLE-READ|SERIALIZABLE)
local_infile = OFF # 本地文件加载(OFF=禁用, ON=启用)
performance_schema = ON # 性能监控(ON=启用, OFF=禁用)
skip_symbolic_links = ON # 符号链接(ON=禁用, OFF=启用)
# 存储引擎
default-storage-engine = innodb # 默认引擎(MyISAM|InnoDB|MEMORY)
log_bin_trust_function_creators = 1 # 信任函数创建者(0=不信任, 1=信任)
# 日志配置
general_log = off # 通用查询日志(OFF=关闭, ON=开启)
log-error = /data/mysql/logs/error.log # 错误日志路径
# 二进制日志
log_bin = /data/mysql/binlog/mysql-binlog # binlog路径
binlog_format = mixed # 日志格式(STATEMENT|ROW|MIXED)
binlog_row_image = FULL # 行映像(FULL=完整记录, MINIMAL=最小记录)
expire_logs_days = 30 # 日志过期
binlog_group_commit_sync_delay = 1000 # 组提交延迟(微秒, 0-100000)
# 慢查询日志
slow_query_log = 1 # 慢查询日志(0=关闭, 1=开启)
slow_query_log_file = /data/mysql/logs/slow.log # 慢查询日志路径
long_query_time = 2 # 慢查询阈值(秒, 默认10)
log_output = FILE # 日志输出(FILE|TABLE|NONE)
log_queries_not_using_indexes = 0 # 记录无索引查询(0=不记录, 1=记录)
# InnoDB配置
innodb_buffer_pool_size = 4G # 缓冲池大小(建议内存50-70%)
innodb_log_buffer_size = 16M # 日志缓冲区大小(默认16M)
innodb_flush_log_at_trx_commit = 2 # 日志刷新(0=每秒, 1=每次, 2=折中)
innodb_buffer_pool_instances = 2 # 缓冲池实例数(建议CPU核心数)
innodb_flush_neighbors = 0 # 邻居页刷新(0=禁用[SSD], 1=同区连续页, 2=同区所有页[HDD])
innodb_read_io_threads = 4 # 读IO线程数(默认4)
innodb_write_io_threads = 4 # 写IO线程数(默认4)
innodb_file_per_table = ON # 独立表空间(ON=启用, OFF=禁用)
innodb_log_file_size = 2G # 日志文件大小(默认48M)
innodb_log_files_in_group = 2 # 日志文件组数(默认2)
innodb_data_file_path = ibdata1:12M:autoextend # 系统表空间配置: 文件 ibdata1 大小
# SQL模式
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# mysqldump配置
[mysqldump]
quick # 快速导出模式(ON=启用, OFF=禁用)
max_allowed_packet = 256M # 导出数据包大小(默认24M)
EOF
3.5初始化mysql并启动
#将MySQL目录授权,之所以需要授权,主要的目的是为了让MySQL启动的时候不至于应为权限的问题导致启动报错。
[root@mrloam local]# chown -R mysql.mysql /usr/local/mysql /data
#初始化mysql
[root@mrloam local]# mysqld --initialize --user=mysql --datadir=/data/mysql/data/ --basedir=/usr/local/mysql
#设置mysql快捷启动
[root@mrloam local]# cp mysql/support-files/mysql.server /etc/init.d/mysqld
[root@mrloam local]# vim /etc/init.d/mysqld
...
basedir=/usr/local/mysql
datadir=/data/mysql/data
...
[root@mrloam local]# chmod +x /etc/init.d/mysqld
#启动mysql
[root@mrloam local]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
3.6连接mysql并修改默认密码
[root@mrloam local]# grep password /data/mysql/logs/error.log
2023-09-04T03:11:29.716467Z 1 [Note] A temporary password is generated for root@localhost: asptc;*Au1Dq
[root@mrloam local]# mysql -uroot -p'asptc;*Au1Dq'
root@mysqldb 11:26: [(none)]> set PASSWORD = PASSWORD('123');
Query OK, 0 rows affected, 1 warning (0.00 sec)
root@mysqldb 11:27: [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
root@mysqldb 11:27: [(none)]> grant all privileges on *.* to 'root'@'%' identified by '123' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)
3.7配置systemctl管理mysql
[root@mrloam ~]# cat > /usr/lib/systemd/system/mysql.service << 'EOF'
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
EOF
3.8 重新加载启动文件
#关闭mysql
[root@mrloam ~]# ps -ef | grep mysql
[root@mrloam ~]# kill -9 11957 12497
[root@mrloam ~]# systemctl daemon-reload
[root@mrloam ~]# systemctl enable --now mysql
[root@mrloam ~]# systemctl status mysql
3.9重新进入mysql
[root@mrloam ~]# mysql -uroot -p123
本文介绍了SQL的基本概念,如其在关系型数据库中的应用,以及如何在CentOS环境中通过VMware搭建虚拟机,安装MySQL数据库,包括数据定义、操作和查询语言的使用,以及系统配置和MySQL的安装与安全设置。
181

被折叠的 条评论
为什么被折叠?



