MySQL 安装和基本使用

MySQL 介绍

MySQL 的特性

  • MySQL 是基于开源协议发布的,可以免费使用,也可以基于源码进行二次开发。

  • MySQL 使用标准 SQL 语言进行管理。

  • MySQL 可以运行于多个系统上,具有跨平台特性,并且支持多种语言。

  • MySQL 使用插件式存储引擎,不同的存储引擎,有着不同的功能和特性,使用者可以根据需要灵 活选择。

  • MySQL 基于单进程,多线程的模式进行工作。

  • MySQL 提供了大量的测试组件和诸多的扩展

MySQL 安装

MySQL 主流的三种安装方式

安装方式 说明
包管理器进行安装 配置好 MySQL 仓库源,用包管理器进行在线安装
二进制包本地安装 下载己编译完成的压缩包,展开至特定路径,并经过简单配置后即可使用
源码编译安装 下载指定版本源码在本地进行编译安装
包管理器进行安装
bash 复制代码
yum list mysql mysql-server

#安装 mysql-server,会自动安装客户端包
yum install -y mysql-server

#服务状态
systemctl status mysqld.service
 
#启动服务
systemctl enable --now mysqld.service

#自动创建的账户
 getent passwd mysql
mysql:x:27:27:MySQL Server:/var/lib/mysql:/sbin/nologin

#查看家目录
ll /var/lib/mysql
二进制包安装

这里的二进制包是指己经编译完成,以压缩包提供下载的文件,下载到本地之后释放到自定义目录,再进行配置即可

bash 复制代码
#安装依赖
yum -y install libaio numactl-libs ncurses-compat-libs

#创建组和用户
groupadd -r mysql
useradd -r -g mysql -s /sbin/nologin mysql

#下载包
wget https://downloads.mysql.com/archives/get/p/23/file/mysql8.0.20-linux-glibc2.12-x86_64.tar.xz

#解压至指定目录,这个目录只能写 /usr/local/
tar xf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz -C /usr/local/
cd /usr/local/
ln -s mysql-8.0.20-linux-glibc2.12-x86_64/ mysql
chown -R root.root mysql/

#创建环境变量
echo 'PATH=/usr/local/mysql/bin:$PATH' >/etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh

echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

#创建主配置文件
vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
skip_name_resolve=1
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock

#创建数据目录
mkdir -pv /data/mysql

#初始化,本地root用户空密码
#如果使用 --initialize 选项会生成随机密码,要去 /data/mysql/mysql.log中查看

mysqld --initialize-insecure --user=mysql --datadir=/data/mysql

#加启动脚本
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

chkconfig --add mysqld

#启动服务
systemctl start mysqld.service
源码编译安装

源码编译安装与前面的二进制包安装相比较,只多了编译过程

bash 复制代码
#安装依赖
yum -y install gcc gcc-c++ cmake bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel perl-Data-Dumper

#创建用户
useradd -r -s /sbin/nologin -d /data/mysql mysql

#创建目录,修改权限
mkdir -pv /data/mysql
chown mysql.mysql /data/mysql

#下载源码
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.51.tar.gz
tar xf mysql-5.6.51.tar.gz
cd mysql-5.6.51

cmake . -DCMAKE_INSTALL_PREFIX=/apps/mysql -DMYSQL_DATADIR=/data/mysql/ -DSYSCONFDIR=/etc/ -DMYSQL_USER=mysql -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITHOUT_MROONGA_STORAGE_ENGINE=1 -DWITH_DEBUG=0 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DENABLED_LOCAL_INFILE=1 -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

make -j 2 && make install

#配置环境变量
echo 'PATH=/apps/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh

#初始化
cd /apps/mysql/
./scripts/mysql_install_db --datadir=/data/mysql/ --user=mysql

#生成配置文件
cp -b /apps/mysql/support-files/my-default.cnf /etc/my.cnf

#生成服务脚本
cp /apps/mysql/support-files/mysql.server /etc/init.d/mysqld

#加开机启动项
chkconfig --add mysqld

#启动服务
service mysqld start

MySQL 多实例

拿 MySQL 数据库来说明,就是在一台服务器上运行多个 MySQL 服务端进程,每个进程监听一个端口 (3306,3307,3308),维护一套属于其自己的配置和数据,客户端使用不同的端口来连接具体服端 进程,从而实现对不同的实例的操作

多实例的优点

  • 节约硬件资源:在某些场景下(比如说测试,调研,新旧业务并存等),需要配置不同的 MySQL 数据库版本,而又没有足够多的服务器资源,则可以选择在一台服务器上用不同的版本实现多开来 满足需求

  • 便于对比:在一个完全相同的硬件环境中,运行不同的 MySQL 版本,使用相同的参数进行测试, 调研时,可以最大程度的减少外部环境因素的影响,便于得出更准确的结论

  • 便于管理:在一台服务器上运行多个实例,同理,只需要在这一台服务器上配置安全规则,就可以完成对多个实例的访问授权,而且对于数据库的备份,停启等工作,也只需要在这一台服务器上完成

多实例的缺点

  • 资源抢占:一台服务器上运行多个服务实例,资源总量恒定,一个实例占用的资源无法被另一个实 例所使用,在这种情况下,服务性能会受到影响,无法体现 MySQL 服务的实际性能

  • 存在单点风险:一台服务器上部署多个服务实例,如果该服务器当机,则这多个服务实例都会受影响

MySQL 组成和常用工具

MySQL 主要组成

mysql 基于 C/S 模式提供服务,主要有客户端程序和服务端程序组成,另外还有一些管理工具

服务端主要组成 客户端主要组成

程序 功能
mysqld_safe 安全启动脚本
mysqld 服务端程序,是mysql服务的核心程序
mysqld_multi 多实例工具

客户端主要组成

程序 功能
mysql 基于mysql 协议的交互式 CLI 工具
mysqldump 备份工具
mysqladmin 服务端管理工具
mysqlimport 数据导入工具

MyISAM存储引擎的管理工具

程序 功能
myisamchk 检查MyISAM库
myisampack 打包MyISAM表,只读

MySQL 客户端使用

MySQL 服务基于 C/S 架构,用户主要使用客户端工具来与远程服务端进行连接,从而与 MySQL 服务进 行交互

MySQL 客户端常用选项

bash 复制代码
mysql [OPTIONS] [database]

#常用选项
-V|--version #显示客户端版本
-u|--user=name #指定远程连接用户名
-p|--password[=name] #指定密码, 默认为空
-h|--host=host     #指定服务端主机
-P|--port=port #指定端口,默认3306
-S|--socket=name #指定连接时使用的socket文件,该文件在服务端启动后生成
-D|--database=db #指定数据库
-H|--html         #以html格式输出
-X|--xml           #以xml格式输出
-t|--table #以table格式输出,默认项
-E|--vertical #垂直显示执行结果
-v|--verbose #显示详细信息,配合 -t 选项
-C|--compress #启用压缩
-G|--named-commands #启用长命令
-e|--execute=sql #执行完就退出,非交互式运行
--prompt=name #修改命令提示符
--line-numbers     #输出行号
--print-defaults #打印参数列表,放在最前面
--connect-timeout=N #连接超时时长,单位S
--max-allowed-packet=N #一次查交互发送或反回数据的大小,默认16MB,最大值为1GB,最小值为4096字节

MySQL 客户端常用命令

bash 复制代码
MariaDB [(none)]> CMD

#常用命令
?|\? #显示帮助
help|\h #显示帮助
clear|\c #清屏,直接使用无法生效,要配合 system 命令使用
exit|\q #退出客户端
quit|\q #退出客户端
status|\s #显示当前状态
use|\u #切换数据库
system|\! #调用系统命令
prompt|\R #修改提示符
source|\. #执行SQL脚本文件
connect|\r #客户端重新连接,使用之前的参数
tee|\T #设置文件名,将输出结果同时保存一份到指定文件
notee|\t #不保存输出结果至文件
delimiter|\d #自定义SQL语句分隔符
go|\g #将语句送到服务端执行
ego|\G #将语句送到服务端执行,垂直显示
print|\p #输出语句,但不执行
warnings|\W #总是输出告警信息
nowarning|\w #不输出告警信息
charset|\C #设置编码
edit|\e #先编辑SQL语句,再执行


mysql> \s
--------------
mysql  Ver 8.0.39-0ubuntu0.24.04.2 for Linux on x86_64 ((Ubuntu))

Connection id:		8				#连接ID
Current database:					#当前使用的数据库
Current user:		root@localhost	#连接时的用户名
SSL:			Not in use			#是否使用ssl
Current pager:		stdout
Using outfile:		''
Using delimiter:	;
Server version:		8.0.39-0ubuntu0.24.04.2 (Ubuntu)
Protocol version:	10				#协议版本
Connection:		Localhost via UNIX socket
Server characterset:	utf8mb4		#服务器编码
Db     characterset:	utf8mb4		#数据库编码
Client characterset:	utf8mb4		#客户端编码
Conn.  characterset:	utf8mb4
UNIX socket:		/var/run/mysqld/mysqld.sock		#连接使用的socket 文件
Binary data as:		Hexadecimal		
Uptime:			7 hours 3 min 21 sec	#服务器运行时长

Threads: 2  Questions: 5  Slow queries: 0  Opens: 119  Flush tables: 3  Open tables: 38  Queries per second avg: 0.000#性能相关内容

在配置文件中修改提示符

bash 复制代码
vim /etc/my.cnf.d/client.cnf

[client]
prompt=(\\u@\\h) [\\d]>\\

#提示符中可用的变量
\C #计数器
\D #年月日时分秒
\d #当前使用的数据库
\h #服务器主机名
\l #命令分隔符,默认;
\m #当前时间,分钟
\n #换行
\O #月份,以英文显示
\o #月份,数字显示
\P #pm/am
\R #小时,24小时制
\r #小时,12小时制
\S #分号
\s #秒,数字显示
\t #tab键
\U #客户端用户名和主机
\u #客户端用户名
\v #服务端版本
\w #星期几,英文显示
\Y #年份,四位,数字显示
\y #年份,两位,数字显示

执行sql脚本

bash 复制代码
\. /root/test.sql

source /root/test.sql

mysqladmin 工具

mysqladmin 也是用于管理 mysql 服务的本地工具

bash 复制代码
mysqladmin [OPTIONS] command command...

#常用选项
-?|--help         #显示帮助信息
-V|--version       #显示客户端版本
-f|--force         #删库时不确认
-C|--compress     #启用压缩
-h|--host=name     #指定服务器地址
-u|--user=name     #指定用户名
-p|--password[=name] #指定连接服务器的密码
-P|--port=N       #指定连接端口,默认3306
-l|--local         #在本地执行,语句不写入binlog
-b|--no-beep       #执行出错时不发出告警音
-s|--silent       #如果无法连接,则静默退出
-c|--count=N       #总共执行多少次,配合-i选项使用
-i|--sleep=N     #持续执行命令,间隔N秒执行一次
-S|--socket=name #指定连接时使用的socket文件
-w|--wait[=#]     #如果连接失败,是否等待重试,如果指定了具体数字,则表示重试几次
--plugin-dir=name   #客户端查件目录
--print-defaults         #显示运行参数,
--defaults-file=path     #从指定文件中读取选项
--connect-timeout=N #指定连接超时时长
--shutdown-timeout=N #指定关机超时时长
--protocol=name     #指定连接方式 (tcp|socket|pipe|memory)
--ssl                   #使用ssl安全功能


#命令
create databasename #创建新的数据库
debug #开启调试模式,将调试信息写入log
drop databasename #删除指定数据库
extended-status         #显示扩展状态
flush-all-statistics   #刷新所有统计表
flush-all-status       #刷新状态和统计信息
flush-client-statistics #刷新客户端统计信息
flush-hosts           #刷新所有缓存的主机
flush-index-statistics #刷新索引统计信息
flush-logs             #刷新所有日志
flush-privileges       #刷新访问权限
flush-binary-log       #刷新二进制日志
flush-engine-log       #刷新引擎日志
flush-error-log         #刷新错误日志,开一个新日志文件
flush-general-log       #刷新执行日志
flush-relay-log         #刷新中继日志
flush-slow-log         #刷新慢查询日志
flush-status           #清除状态变量
flush-table-statistics #清除表统计信息
flush-tables           #刷新所有表,会强制关闭己打开的表
flush-threads           #刷新线程缓存
flush-user-statistics   #刷新用户统计信息
flush-user-resources   #刷新用户资源
kill id,id,... #关闭指定的线程
password [new-password] #修改密码
old-password [new-password] #修改密码时指定旧密码
ping #心跳检测
processlist #显示活动线程列表
reload #刷新授权信息
refresh #刷新所有数据表,重新打开日志文件
shutdown #关闭服务
status #简短显示服务端状态
start-slave #开启主从同步
stop-slave #停止主从同步
variables             #显示服务端所有变量
version #显示客户端和服务端版本

mycli 工具

MyCLI 是基于 Python 开发的 MySQL 的命令行工具,具有自动完成和语法突出显示功能

bash 复制代码
yum install python38

#使用国内源
pip3.8 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip-3.8 install mycli

mycli -u用户名 -p密码
相关推荐
DEARM LINER12 分钟前
mysql 巧妙的索引
数据库·spring boot·后端·mysql
不惑_1 小时前
Redis与MySQL双写一致性的缓存模式
redis·mysql·缓存
码农幻想梦1 小时前
实验九 视图的使用
前端·数据库·oracle
影子落人间1 小时前
Oracle创建存储过程,创建定时任务
数据库·oracle
大G哥1 小时前
02、Oracle过滤和排序数据
数据库·oracle
代码吐槽菌3 小时前
基于SSM的汽车客运站管理系统【附源码】
java·开发语言·数据库·spring boot·后端·汽车
伏虎山真人3 小时前
开源数据库 - mysql - 组织结构(与oracle的区别)
数据库·mysql·开源
精致先生4 小时前
问题记录01
java·数据库·mybatis
Channing Lewis4 小时前
salesforce developer console 匿名执行是以什么身份执行的
数据库·安全·salesforce
双子座断点4 小时前
QStringList 使用详解
数据库