01.数据库的安装与配置
01.数据库的安装与配置
1.1 安装
linux版,如果无法找到
mysql安装包可以考虑直接从官网下载(可能遇到依赖也无法找到的问题)或改用mariaDBapt-get upgrade apt-get install mysql-server # 查看是否启动成功 netstat -tap | grep mysql # 如果没有,使用这条命令开启mysql服务 service mysql start # 默认没有密码,需要运行安全配置 sudo mysql_secure_installation # 根据提示输入两次数据库密码,之后的确认信息一般都输入Y # 5.7及之前版本需要修改默认字符集(latin1),防止中文乱码 vim /etc/mysql/my.cnf # 在末尾添加: character_set_server=utf8连接数据库命令行
# 如果是windows一定要启动数据库再连接,并且配置环境变量 # mysql80为安装时使用的windows服务名称 net start mysql80 net stop mysql80 # -h为数据库所在ip地址,默认为127.0.0.1 # -P为数据库对应的端口号,默认为3306 # -u为数据库连接的用户名 # -p为带密码登录,之后要输入密码 # 还可以指定登录时所在数据库,默认名称为mysql,直接添加在-p后面即可 # -e直接执行后面的"SQL语句",然后退出服务器命令行 mysql -h 127.0.0.1 -P 3306 -u root -p DBName # 输入exit退出
1.2 配置
远程连接:默认不支持远程访问,需要修改配置文件,使
bind-address=0.0.0.0(也可以是固定ip)- 配置文件位置见1.3数据库文件,修改完成后重启数据库
- 设置
root或其他用户为可远程用户
-- 设置允许root远程访问,密码为123456,如果希望仅允许特定ip访问,可以将%修改为ip grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option; -- 或 update user set host='%' where user='root'; ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'abc123'; -- mysql 8.0 不支持通过授权添加用户 -- 如果是 8.0 可能还会出现密码过于简单报错,需要修改默认密码 create user 'test'@'%' identified by '123456'; grant all privileges on *.* to 'test'@'%' with grant option; -- 更新权限配置 FLUSH PRIVILEGES;同时也应该确保防火墙没有将3306(默认端口)拦截
安全策略:在
MySQL 8.0之前,MySQL使用的是validate_password插件检测、验证账号密码强度,保障账号的安全性;在之后,此插件已经默认安装,只需要启用即可# 可以在参数文件my.cnf中添加配置信息 # [mysqld] # plugin-load-add=validate_password.so # \#ON/OFF/FORCE/FORCE_PLUS_PERMANENT: 是否使用该插件(及强制/永久强制使用) # validate-password=FORCE_PLUS_PERMANENT # 推荐通过安装命令在数据库命令行安装/启用 INSTALL PLUGIN validate_password SONAME 'validate_password.so'; # 卸载方法 UNINSTALL PLUGIN validate_password; # 或 UNINSTALL COMPONENT 'file://component_validate_password';插件作用:
- 添加了一个函数用于查询密码的强度
-- 未安装/启用插件时返回 0 -- 启用后返回密码强度值,只在[0, 25, 50, 75, 100]中 -- 分别表示 -- 0:密码长度小于4 -- 25:密码长度小于配置的最短密码长度 -- 50、75、100:分别对应满足LOW、MEDIUM、STRONG等级 SELECT VALIDATE_PASSWORD_STRENGTH('password');- 添加了下列配置项,可以通过
SET GLOBAL 配置名=值设置,低版本的默认值可能不同
SET GLOBAL是临时变量,如果希望持久生效,在MySQL 8.0版本之后,支持SET PERSIST设置持久变量插件配置项 默认值 作用 validate_password_check_user_nameONON表示能用当前用户名当密码validate_password_dictionary_file空 用于检查密码的字典文件路径 validate_password_length8 最短密码长度 validate_password_mixed_case_count1 对于中等及以上的密码策略,要求密码有的大小写字母数量 validate_password_number_count1 密码中的数字数量 validate_password_policyMEDIUM密码强度等级 validate_password_special_char_count1 密码中的特殊字符数量 密码强度等级:可用符号或数字值来指定。
0/LOW:只检查长度;1/MEDIUM:还检查数字、大小写、特殊字符;2/STRONG还通过字典文件检查
1.3 数据库相关文件
数据目录:MvSQL服务器程序在启动时会到文件系统的桌个自录下加载之后在运行过程中产生的数据也都会存储 到这个目录下的某些文件中,这个目录就称为数据目录
linux环境下,目录默认在/var/lib/mysql/windows环境下,目录默认在C:\ProgramData\MySQL\MySQL Server 版本号\data\
相关命令目录:存放命令的目录,
linux环境下,默认在/usr/bin/和usr/sbin;windows环境下,在软件安装目录的bin目录配置文件:
linux下,配置文件为/etc/mysql/my.cnf;windows环境下默认在C:\ProgramData\MySQL\MySQL Server 版本号\my.ini- 配置文件中包含
[mysqld],[client],[mysql],[mysqld_safe],[server],[mysqladmin]配置组 - 一般会通过
!includedir引用其他目录的配置文件 - 可以通过
mysqld --verbose --help | grep -A 1 "Default options"查看启动命令读取的文件及顺序 - 修改配置文件后需要重启数据库服务
# ubuntu systemctl restart mysql # windows net restart mysql- 配置文件中包含
启动命令
启动命令 类别 读取的组 mysqld 启动服务器 [mysqld]、[server]mysqld_safe 启动服务器 [mysqld]、[server]、[mysqld_safe]mysql.server 启动服务器 [mysqld]、[server]、[mysql.server]mysql 启动客户端 [mysql]、[client]mysqladmin 启动客户端 [mysqladmin]、[client]mysqldump 启动客户端 [mysqldump]、[client]- 可以使用
[mysqld-5.7]设置配置组可被哪个版本读取 - 配置按顺序读取,配置文件读取完毕后再读取启动命令中的配置
- 可以使用
1.4 其他细节
输入规范:
- 在
windows中,命令关键字和表名、列名等大小写不敏感 - 在
linux中,命令关键字大小写不敏感,表名、列名等大小写敏感 - 语句输入必须以
;结尾,作为结束在
MySQL命令行中,可以使用\G结尾,输出格式和;不同,\G是垂直显示 - 在大多数数据库中单双引号
'和"可以混用,但标准规定这两种符号含义是不同的Oracle就不支持引号混用,'用于指定字符串值,"用于指定列、表和别名等标识,如果在字符串中希望使用',需要使用''
- 在
命令行注释:可以使用以下格式注释
# MySQL独有的注释方式 -- 单行注释 /* 多行注释 */命名规则:
- 数据库名、表名、变量名有最大长度限制,比如
MySQL要求不超过30个字符,变量要求不超过29个字符 - 命名支持
A-Z、a-z、0-9和_共63个字符,数据库名、表名、字段名、变量名最好都小写,用_格式命名 - 如果命名与保留字冲突,应该使用反引号`包裹(
MySQL),引号"包裹(Oracle、PostgreSQL) - 在同一软件中数据库不能同名、同一数据库中表不能同名,同一表中字段不能同名
可以通过
数据库名.表名.字段名的方式定位字段阿里巴巴的JAVA开发手册命名规范
- 【强制】表名必须用小写字母或数字,并以字母开头,中间用
_连接,不允许在两个下划线间只出现数字 - 【强制】禁用保留字命名
- 【强制】表必备三个字段:主键
id、数据插入时间gmt_create、数据更新时间gmt_modified - 【推荐】表命名最好遵循
业务名称_表的作用 - 【推荐】库命名与应用命名尽量一致
- 【参考】应该选择合适的字符存储长度,节约数据表空间,节约索引存储,加快查询速度
- 数据库名、表名、变量名有最大长度限制,比如
