安装
检查是否自带Mariadb,如果有先卸载
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.65-1.el7.x86_64
然后下载rpm进行安装
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
rpm -ivh mysql57-community-release-el7-9.noarch.rpm
yum -y install mysql-server
systemctl start mysqld
服务初始化
配置文件:/etc/my.cnf
日志文件:/var/log/mysqld.log
Socket文件:/var/run/mysqld/mysqld.pid
systemctl enable mysqld
systemctl start mysqld
systemctl status mysqld
systemctl stop mysqld
设置 root 密码
grep 'temporary password' /var/log/mysqld.log #获取临时密码
使用临时密码登录,然后修改密码(要求必须是大小写字母数字特殊字母的组合且至少要8位长度)
mysql -uroot -p
ALTER USER USER() IDENTIFIED BY 'Cy#8Js41';
ALTER USER 'root'@'%' IDENTIFIED BY 'Cy#8Js41';
修改密码强度
查看密码的规则:SHOW VARIABLES LIKE 'validate_password%';
PS:validate_password_length=8,表示长度最少为8位;validate_password_policy=MEDIUM,表示密码的安全等级为中。
临时将密码安全等级设置为 low:set global validate_password_policy=0;,长度不变。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Cy#8J&s4';
创建数据库
create database demo;
查看默认的数据库:show databases;
进入到mysql库:use mysql;
查看数据库的用户信息:select host,user from user;
创建用户并允许在任意主机上连接管理 demo 数据库:
GRANT ALL PRIVILEGES ON demo.* TO 'test'@'%' IDENTIFIED BY '12345678' WITH GRANT OPTION;
创建用户并设置权限
CREATE USER 'test'@'%' IDENTIFIED BY '12345678';
GRANT SELECT ON demo.* TO 'test'@'%' IDENTIFIED BY '87654321';#这里只给了查询权限
授权语句分析:GRANT 权限 ON 数据库.数据表 TO '用户'@'主机' IDENTIFIED BY '密码';
权限 | ALL PRIVILEGES、select、insert、update、delete、create、drop、index、alter、grant、references、reload、shutdown、process、file |
---|---|
数据库 | 指定数据库,没有特别规定用* 表示全部 |
数据表 | 指定数据表,没有特别规定用* 表示全部 |
用户 | 创建的用户 |
主机 | 指定主机 IP,没有特别规定用% 表示全部 |
密码 | 可以跟创建命令不一样 |
忘记密码
vim /etc/my.cnf
在 [mysqld] 底下添加语句:skip-grant-tables,然后重启 mysqld 服务;
systemctl restart mysqld
mysql -u root -p #直接回车
mysql> use mysql;
mysql> update user set authentication_string=password("123456") where user="root";
mysql> flush privileges;
mysql> exit
注释或者删除:skip-grant-tables,重启 mysqld 服务。
监控
相应指标如下:
名称 | 说明 | 类别 |
---|---|---|
QPS | 数据库每秒处理的请求数量 | 性能类 |
TPS | 数据库每秒处理的事务数量 | 性能类 |
并发数 | 数据库实例当前并行处理的会话数量 | 性能类 |
连接数 | 连接到数据库会话的数量 | 性能类 |
缓存命中率 | 查询命中缓存的比例 | 性能类 |
可用性 | 数据库是否可以正常对外服务 | 高可用 |
阻塞 | 当前阻塞的会话数 | 高可用 |
慢查询 | 慢查询情况 | 高可用 |
主从延迟 | 主从延迟时间 | 高可用 |
主从状态 | 主从链路是否正常 | 高可用 |
死锁 | 查看死锁信息 | 高可用 |
QPS:show global status where variable_name in ('Queries', 'uptime');
TPS:show global status where variable_name in ('com_insert' , 'com_delete' , 'com_update', 'uptime');
并发数:show global status like 'Threads_running';
连接数 - 生产中配置报警阈值:Threads_connected / max_connections > 0.8
当前连接数:show global status like 'Threads_connected';
最大连接数:show global status like 'max_connections';
innodb 缓冲池查询总数:show global status like 'innodb_buffer_pool_read_requests';
innodb 从磁盘查询数:show global status like 'innodb_buffer_pool_reads';
缓存命中率 - 生产中配置报警阈值:(innodb_buffer_pool_read_requests - innodb_buffer_pool_reads) / innodb_buffer_pool_read_requests > 0.95
慢查询
my.cnf 文件添加一下配置:
long_query_time=1
slow_query_log=ON
slow_query_log_file=/var/log/mysqld-slow.log
实时生效使用命令 set global + 上述配置项
select * from information_schema.'processlist';
主从延迟/状态:show slave status;
死锁:show engine innodb status;