MySQL

MySQL 是一种关系型数据库管理系统DBMS

由瑞典MySQL AB 公司开发,目前属于Oracle旗下产品

能够跨平台,支持分布式,性能也可以,比较适合中小型企业作为 Web 数据库

MySQL Community,社区版,开源免费,没有任何官方技术支持

一、数据库分类

数据库类型:

  • 关系型数据库

数据存储在硬盘;二维表形式存储数据

  • 非关系型数据库

数据存储在内存

基于 key:value 结构实现存储数据

二、数据类型

数据表中的每列都应该使用合适的数据类型,用于限制或允许该列中存储的数据。设置合适的数据类型及合适的长度,对数据库的优化是非常重要的,这样有利于提高查询的效率和节省存储空间。

1.整数类型

又称为数值型数据,主要用于存储数字

类型描述大小
tinyint-128~1271字节
smallint-23768~327672字节
mediumint-8388608〜83886073字节
int-2147483648〜21474836474字节
bigint-9223372036854775808〜92233720368547758078字节

unsigned : 无符号型

2.小数类型

MySQL 中使用浮点数和定点数来表示小数

浮点类型有两种,单精度浮点数FLOAT和双精度浮点数DOUBLE

定点类型使用DECIMAL

浮点类型和定点类型都可以用(M, D)来表示,其中M称为精度,表示总共的位数;D称为标度,表示小数的位数。

浮点数类型的取值范围为 M(1~255)和 D(1~30)

占用空间

类型大小
FLOAT4字节
DOUBLE8字节
DECIMAL(M,D)如果M>D,为M+2否则为D+2

在 MySQL 中,定点数以字符串形式存储,在对精度要求比较高的时候(钱,科学数据),使用 DECIMAL 的类型比较好

3.日期时间

类型名称日期格式日期范围存储需求
YEARYYYY1901 ~ 21551 个字节
TIMEHH:MM:SS-838:59:59 ~ 838:59:593 个字节
DATEYYYY-MM-DD1000-01-01 ~ 9999-12-33 个字节
DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 ~ 9999-12-31 23:59:598 个字节
TIMESTAMPYYYY-MM-DD HH:MM:SS1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC4 个字节

4.字符串类型

  • char(M)

定长类型,M最大值255,当内容不够长度时使用空格填充

  • varchar(M)

变长类型,M最大值65535

4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)

5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个

  • Text

文本类型,一般存储长度大于255的字符

  • Enum

枚举类型,限定值内容

三、安装

四、MySQL 使用

1.安全初始化脚本

mysql_secure_installation

2.设置root密码

① 之前未设置过密码

 mysqladmin -uroot password '密码'

②已经设置过密码

mysqladmin -uroot password '新密码' -p
Enter Password: 旧密码

③使用sql 修改

必须刷新权限列表

mysql> update mysql.user set password=password('新密码') where user='root' and host='localhost';
mysql> flush privileges; #必须刷新权限列表

或者

mysql> set password for 'root'@'localhost'=password('新密码'); #不需要刷新权限列表 

④.忘记密码

(1)跳过授权启动

#1.停止 mysql 服务
service mysql stop 
#2.跳过授权启动
mysqld_safe --skip-grant-tables --user=mysql &
#3.检测是否启动成功
ss -naltp|grep 3307

(2)直接登录MySQL,不需要密码

(3)修改密码

<5.7

mysql> update mysql.user set password=password('新密码') where user='root' and host='localhost';
mysql> flush privileges;

>=5.7

# 方法1
ALTER USER user IDENTIFIED BY '新密码';
# 方法2
set password for 'root'@'localhost'='新密码';

(4)关闭进程并重启服务

pkill myqld
service mysql start

3. mysql

用来连接访问数据库

选项全称作用
-uuser指定登录用户名
-ppassword指定登录密码,必须放到最后
-hhost指定数据库主机地址
-Pport指定数据库端口号
-Ssocket指定socket文件
mysql -S /tmp/mysql31.sock -uroot -p
-eexecute非交互式操作
# mysql -uroot -e "show databases;" -p

①连接远程数据库,端口3307: mysql -h 10.1.1.13 -P 3307 -uroot -p

②终端直接输出SQL执行结果:mysql -uroot -e "show databases;" -p

③本机中有两个MySQL(端口3306,套接字文件/tmp/mysql.sock,端口3307,套接字文件/tmp/mysql2.sock)

mysql -S /tmp/mysql.sock -uroot -p         #连接本机3306的数据库
mysql -S /tmp/mysql2.sock -uroot -p        #连接本机3307的数据库

4. mysqladmin

数据库客户端管理工具,基本使用同mysql一致

选项作用
password更新密码
reload刷新授权表
shutdown关闭服务
status查看数据库状态
version查看数据库版本信息
start-slave启动slave
stop-slave停止slave
variables打印可用变量

①查看数据库状态:# mysqladmin -uroot status -p

②刷新数据库授权表:# mysqladmin -uroot reload -p

③查看mysql版本:# mysqladmin -uroot version -p

五、配置

MySQL在初始化完毕后,会自动在安装目录下生成一个my.cnf的配置文件

[mysqld]
basedir= /usr/local/mysql
datadir= /usr/local/mysql/data
port= 3306
server_id = 10
socket = /tmp/mysql.sock
log-error = /usr/local/mysql/data/mysql.err
character_set_server = utf8mb4
log-error=/usr/local/mysql/data/binlog
参数描述
basedir安装目录
datadir数据目录
port端口
server_id实例编号
socket套接字文件
log-error错误日志,一般放在data目录下
character_set_server数据库编码格式,建议使用utf8或者utf8mb4
log-error错误日志
bin-log二进制日志
relay-log中继日志

六、日志文件

1.错误日志

error log

启动、运行或停止mysqld时遇到的问题。默认为开启状态,默认放在:$datadir/hostname.err

2.二进制日志

binlog ,二进制日志,记录数据库的所有更改操作(增删改)

mysqldump + binlog ,实现增量备份,就是在全量备份基础上,只备份增加的那部分数据

特点

  • 用于主从复制中,master主服务器将二进制日志中的更改操作发送给slave从服务器,
  • 用于数据的恢复
  • 默认二进制日志是关闭的,修改配置文件my.cnf 添加 log-bin=/usr/local/mysql/data/binlog开启
  • mysqlbinlog工具查看文件内容

3.中继日志

用于主从复制,master主服务器将自己的二进制日志发送给slave从服务器,slave先保存在自己的中继日志中,然后再执行自己本地的relay log里的sql达到数据库更改和master保持一致。默认中继日志没有开启,可以使用relay-log=/path/xxxx参数开启

4.一般查询日志

当客户端连接或断开时,服务器会将信息写入该日志,并记录从客户端收到的每一条SQL语句。当您怀疑客户端的错误并想知道客户端发送给mysqld的确切信息时,一般查询日志可能非常有用。

默认情况下,一般查询日志是禁用的。

相关配置:

#开启或关闭日志
general_log[={0|1}
#指定日志保存位置
general_log_file=/path/file.log

5.慢查询日志

慢查询日志记录的是一些需要很长时间才能执行完成的SQL语句,可用于优化。可以使用mysqldumpslow命令处理慢查询日志文件。 默认情况下慢查询日志是关闭的,可以使用以下参数开启,0代表关闭;1代表启用

#打开或关闭慢查询日志
slow_query_log={1|0}
#指定慢查询日志的路径及文件名,默认$datadir/host_name-slow.log
slow_query_log_file=/path/file_name.log        
#表示查询语句超过n秒被记录到slow log里,最小值为0,默认值为10    
long_query_time=n        #单位是秒s

七、其他

1.单机多实例

实现条件:

  1. 两个数据库安装目录不同
  2. 两个数据库端口不同
  3. 两个数据库套接字文件不同

2.MySQL无法启动

查看错误日志

Last modification:September 5th, 2019 at 10:56 pm