MySQL简介
由瑞典MySQL AB公司开发,目前属于Oracle旗下的关系型数据库
关系型数据库特点
- 数据存储在标准二维表中,在存储数据之前需要先定义好表结构
- 支持事务的ACID特性(原子性、一致性、隔离性、持久性)
- 支持SQL语言操作数据
SQL、DB、DBSM关系
- DB:数据库
- DBSM:数据库管理系统
- SQL:结构化查询语言
- DBSM-->(执行)-->SQL-->(操作)-->DB
MySQL特性
- 使用广泛:可方便获取技术支持
- 可扩展性强:支持基于二进制日志的逻辑复制,存在多种第三方数据库中间层,支持读写分离和分库分表
- 安全且稳定:支持存储数据进行分级安全控制,支持主从复制集群和高可用架构
- 支持多种操作系统:支持Windows和Linux系统
- 开源免费
MySQL使用场景
- 数据之间存在一定关系,需要关联查询数据的场景
- 需要事务支持的业务场景
- 需要使用SQL语言灵活操作数据的场景
MySQL安装
可从MySQL官网获取MySQL所有版本安装包(下载Linux通用版Linux-Generic(glibc-2.12)
,而不是红帽版)
wget -P /opt https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz #下载安装包
xz -d /opt/mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz #解压为tar包
tar -xf /opt/mysql-8.0.21-linux-glibc2.12-x86_64.tar -C /opt/ #解压tar包
ln -s /opt/mysql-8.0.21-linux-glibc2.12-x86_64 /usr/local/mysql #在/usr/local目录下建立软连接
echo "export PATH=\$PATH:/usr/local/mysql/bin" >> /etc/profile #将mysql加入环境变量
source /etc/profile #刷新profile文件
存储引擎(Oracle叫存储方式)
使用show engines;
查看当前数据库系统支持的存储引擎
- MyISAM
- 不支持事务
- 三种文件存储表(frm结构,myd数据,myi索引)
- 可被压缩,可以转换为只读表,提高检索效率
- CSV
- 不支持事务
- 以CSV格式存储进行存储
- 读写时对整个表加锁
- Archive
- 不支持事务
- 只允许查询和新增数据,不允许修改数据
- InnoDB
- 支持事务,行级锁,外键,级联删除和更新,数据更加安全
- frm结构,tablespace数据,log事务日志文件
- 数据按照索引聚集存储(主键变化会导致数据迁移,所以一般使用自增序列当索引),支持BTree和自适应Hash索引
- 不可被压缩,不可转换为只读表
- Memory(HEAP)
- 不支持事务
- 内存数据库
- 仅支持表级锁,不支持大文本数据
- 查询速度快
MySQL常用配置
系统默认MySQL配置文件就是/etc/my.cnf
文件,不管你是否安装过MySQL,修改好配置文件后以及目录的创建后,使用mysqld --initialize
进行MySQL的初始化,初始化后会显示出MySQL中root初始密码,初次登入MySQL后需要进行修改
client
:客户端配置port
:客户端口号默认连接端口号
mysql
:命令行配置auto-rehash
:开启tab自动补全命令default-character-set
:客户端默认字符集max_allowed_packet
: 客户端网络传输的最大数据包,默认为1MB,最大值1GB
mysqld
:服务端配置port
:服务端启动端口user
:启动MySQL进程用户,一般使用非root用户启动basedir
:mysql软件的安装根目录datadir
:数据目录character-set-server
:数据库默认字符集bind-address
:绑定网卡IPtmpdir
:临时文件存放目录log_bin
:二进制日志存放路径max_allowed_packet
:服务端网络传输的最大数据包,默认为1MB,最大1GBmax_connections
:最大连接数default_storage_engine
:默认存储引擎innodb_undo_directory
:undolog日志文件目录innodb_undo_tablespaces
:undolog日志文件个数
[client]
port=3306
[mysqld]
port=3306
user=root #一般不使用root启动,不太安全
basedir=/usr/local/mysql
datadir=/var/lib/mysql
character-set-server=utf8
#下面选项不设置会默认在数据目录下
default_storage_engine=InnoDB
innodb_undo_directory=/var/lib/mysql/undo
log_bin=/var/lib/mysql_log/bin-log
[mysql]
auto-rehash
default-character-set=utf8
MySQL启动与关闭
将MySQL启动脚本拷贝到/etc/init.d/
下,并重命名为mysqld
,之后使用service
服务管理工具方式进行启动和关闭
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld #拷贝MySQL启动脚本
service mysqld start #启动MySQL服务
service mysqld stop #关闭MySQL服务
连接MySQL
mysql
:启动MySQL客户端
u
:用户名p
:密码h
:主机IPP
:端口号
使用随机生成的密码进入MySQL后需要更改密码,使用alter user user() identified by 'MyNewPass';
重置密码即可,如果已经忘记了密码,使用以下方式进行重置root密码(在停止MySQL进程的情况下执行)
service mysqld stop #停止MySQL进程
echo "alter user 'root'@'localhost' identified by 'MyNewPass';" > /tmp/mysql-init #将设置密码的sql命令写入文件
mysqld --init-file=/tmp/mysql-init & #重新初始化
rm -rf /tmp/mysql-init #删除初始化命令文件
service mysqld restart #重启MySQL进程
配置远程访问数据库
首先将配置文件中的bind-address
配置项注释掉(若没有则无视),重启MySQL,进入MySQL执行以下命令
use mysql; --切换到myslq库
select host,user from user; -- 查看当前数据用户的登入主机限制
update user set host='%' where host='localhost' and user='root'; -- 将root用户的在localhost登入设置为%,即所有IP都可登入
flush privileges; --刷新权限
Comments NOTHING