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密码