MySQL之旅

Stitch-Zhang

Stitch-Zhang

An iddle programer

MySQL经验小结

CentOS安装社区版MySQL#

下载#

前往中下载页面链接

其中包含所有版本的Mysql,选择需要的版本和当前的系统类型

如我的是选择5.7.10版本的,在RHEL(CentOS)上食用

image-20210914103916166

下载选的综合包,其中包含页面上显示的所有包

其中包含

包名功能
mysql-community-client提供客户端命令
mysql-community-libs依赖库
mysql-community-common通用依赖
mysql-community-libs-compat客户端的兼容库
mysql-community-server服务器程序和相关工具
mysql-community-devel开发MySQL必备的头文件和库
mysql-community-minimal-debuginfo最小安装调式信息库
mysql-community-embedded嵌入式库
mysql-community-embedded-compat嵌入式共享兼容库
mysql-community-test测试套件
mysql-community-embedded-devel嵌入式开发库和头文件

安装#

使用yum安装#

表格中标注粗体的都为必须安装的包

yum install mysql-community-{client,libs,common,libs-compat,server}*

image-20210914162403614

不建议使用rpm进行安装,包之间依赖关系复杂,安装繁琐

preview

启动服务#

systemctl start mysqld

查看状态#

systemctl status mysqld

image-20210914165611928

配置#

[可选]更改数据库文件夹#

配置文件/etc/my.cnfdatadir字段,如我将把数据库存放改到/dbdata

image-20210914171027868

重启服务#

systemctl restart mysqld

查询密码#

MySQL版本<=5.7,启动服务后会自动生成一个临时密码,其存在在日志文件/var/log/mysqld.log

可通过如下命令查询

cat /var/log/mysqld.log | grep "temporary password" | awk -F ': ' '{print $2}'

image-20210914165020240

初始化#

初始化会要求输入临时密码

mysql_secure_installation

密码策略修改#

使用的MySQL 5.7默认有安装密码强度校验插件validate_password

查询当前策略信息#

密码策略配置在全局变量中,可通过查看其变量值来确定

mysql > show variables like 'validate_password%';

image-20210914171956752

变量值意
validate_password_dictionary_file检查密码的字典文件的路径名
validate_password_length最短密码长度
validate_password_mixed_case_count最少大小写字符对数
validate_password_number_count最少数字数目
validate_password_policy密码策略
validate_password_special_char_count最少特殊字符数

密码策略

策略等级描述
0/LOW只检查长度
1/MEDIUM检查长度、数字、大小写、特殊字符
2/STRONG检查长度、数字、大小写、特殊字符、字典文件。

修改策略#

将修改密码策略LOW

mysql > set global validate_password_policy=LOW;

在修改策略之前创建的用户密码不受影响

修改策略后,再进行创建的用户,将受到影响

简单粗暴#

如果觉得上面繁琐,可直接卸载插件

mysql > uninstall plugin validate_password

卸载后新增用户,其密码没有任何限制

修改密码#

root用户只能修改为本地访问

mysql > alter user 'root'@'localhost' identified by '123456';

设置最大连接数#

查看当前最大连接数#

mysql > show variables like 'max_connections';

设置最大连接数#

如下设置最大连接数为500

mysql > set global max_connections=500;

食用🥢#

建库并配置用户#

如下创建expirement数据库,创建并赋予用户stitch所有权限

所有权限:

select,insert,update,delete ,create,drop,references

index,alter,create temporary tables,lock tables,execute

create view,show view,create routine,alter routine,event,trigger

创建数据库#

mysql > create database expirement;

数据库授权#

创建与用户并授权#

通过该命令创建的用户,其默认允许任意IP连接

mysql > grant all privileges on expirement.* to stitch identified by '123456';
设置限制IP连接#

限制客户端IP为192.168.1.*

mysql > grant all privileges on expirement.* to stitch@'192.168.1.*' identified by '123456';

启用SSL通信#

MySQL在启动时会自动生成SSL相关证书于数据库文件夹,并启用SSL用于加密数据传输

MariaDB中SSL默认未配置,且为关闭状态,需要手动生成证书和新增配置文件

生成CA私钥和CA证书#

证书格式:x509

CA私钥#
openssl genrsa 2048 > ca-key.pem
CA证书#

使用刚刚的私钥进行创建

openssl req -new -x509 -nodes -days 365000 -key ca-key.pem -out ca.pem

因为是自签CA证书,将要求填入CA机构信息

生成私钥和证书生成请求#

openssl req -newkey rsa:2048 -days 365000 -nodes -keyout server-key.pem -out server-req.pem

将生成

  • server-key.pem 证书私钥
  • server-req.pem 证书生成请求
私钥预处理#

删除私钥密码短语

openssl rsa -in server-key.pem -out server-key.pem

证书签名#

使用生成的CA私钥CA证书证书生成请求进行签名生成证书

openssl x509 -req -in server-req.pem -days 365000 \
-CA ca.pem -CAkey ca-key.pem -set_serial 01 \
-out server-cert.pem

写入配置#

MariaDB#

/etc/my.cnf.d/server.cnf

[mariadb]
ssl_cert = <证书路径> -> server-cert.pem
ssl_Key = <私钥路径> -> server-key.pem
ssl_ca = <CA证书路径> -> ca.pem
重启服务#
systemctl restart mysqld/mariadb

用户SSL加密登录#

获取服务器SSL配置信息#

mysql > show variables like '%ssl%';
+---------------+--------------------------------+
| Variable_name | Value |
+---------------+--------------------------------+
| have_openssl | YES 系统是否含有openssl |
| have_ssl | YES 是否启用SSL |
| ssl_ca | /var/lib/mysql/ca.pem CA证书路径 |
| ssl_capath | |
| ssl_cert | /var/lib/mysql/server-cert.pem |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | /var/lib/mysql/server-key.pem |
+---------------+--------------------------------+

have_ssl必须为YES状态才能使用SSL,若未启用请参考

启用并配置SSL#

使用MySQL 5.7内置的命令来完成配置

mysql_ssl_rsa_setup

此工具将会自动生成MySQL需要的相关证书,其存放于数据库文件夹中(默认在/var/lib/mysql

创建用户并设置SSL登录#

mysql > grant all privileges on *.* to stitch@'%' identified by '123456' require SSL;

在配置用户SSL登录后,用户登录时需要

  • CA证书(CA Certificate)
  • 客户端密钥 (Client Key)
  • 客户端证书 (Client Certificate)

可从数据库服务器中数据库文件夹中获取

image-20210923152241041

连接测试#

mysql -u stitch -p -h 0.0.0.0 --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem

https://mariadb.com/kb/en/securing-connections-for-client-and-server/