当前位置: 首页 > news >正文

[MySQL数据库部署及初始化相关]

一、MySQL安装前系统环境检测

1.selinux和iptables需要关闭

cat /etc/sysconfig/selinux  
sed -i 's/enable/disable/g' /etc/sysconfig/selinux

chkconfig --list|grep iptables  
chkconfig iptables off  
chkconfig --list|grep iptables

2.I/O调度系统默认是cfq模式,这里强烈建议使用deadline模式

查看I/O调度文件

cat /sys/block/sda/queue/scheduler  
输出结果为:  
noop anticipatory deadline [cfq]
或者
noop [deadline] cfq

修改I/O调度器,需要在/etc/grub.conf中加入elevator=deadline,保证永久有效
echo “elevator=deadline” >> /etc/grub.conf

3.swap分区设置

swappiness值大小对如何使用swap分区有很大影响。有0和100两个极限值,0代表最大限度地使用物理内存,然后才使用swap分区,这种行为有可能导致内存溢出,出现OOM错误,从而导致MYSQL被意外kill掉,所以需要谨慎设置。100是积极使用swap分区,并把内存上边的数据及时搬到swap分区里(不建议)
这里建议不分配swap,或者分配4GB就够了

查看swappiness文件:

cat /proc/sys/vm/swappiness

sysctl -a | grepswap  
vm.swap_token_timeout = 300 0  
vm.swappiness = 60

想要修改swappiness的值,编辑/etc/sysctl.conf,加入vm.swappiness的值即可。

4.文件系统选择

建议使用xfs文件系统,相比ext4,它更方便管理,支持动态扩容,删除文件也方便

5.操作系统限制

ulimit -a

注意两个参数

open files max user processes

open files如果设置不合理,而当前服务器的连接数过多或者表过多时,就可能会出现打不开或者访问不了表的现象 。默认情况下,linux的最大句柄数为1024个,表示单个进程最多可以访问1024个文件句柄,如果超过默认值,就会出现文件句柄超限的错误"too many open files"

max user processes

max user processes 参数的用途是,有时候我们可能会跑很多实例,但发现创建不了新的连接,报出"resource temporarily unavailable"错误,表示没有足够的资源

为了防止上述两种报错,修改系统的软硬限制,编辑/etc/security/limits.conf,加入限制的相关内容。并重启操作系统生效。

cat /etc/security/limits.conf 下边有

*   soft nproc 65535
*   hard nproc 65535
*   soft nofile 65535
*   hard nofile 65535

6.numa关闭

关闭numa功能,可以更好分配内存,不需要采取swap方式获取内存。使用swap可能导致数据库性能下降
关闭方式在BIOS、操作系统中关闭,或者在数据库启动过程中关闭

numa --interleave=all /usr/local/mysql/bin/mysqld_safe -defaults-file=/etc/my.cnf &

二、MySQL 5.7版本安装

创建mysql用户,指定mysql所在用户组

groupadd mysql  
useradd -g mysql mysql -s /sbin/nologin

软件包家目录(basedir)统一规格放在/usr/local/下面:

cd /usr/local/  

解压mysql软件包:

tar -zxvf mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz

然后做个软连接,方便日后升级

ln -s mysql-5.7.14-linux-glibc2.5-x86_64 mysql  

给mysql目录授权

chown mysql:mysql -R mysql

创建mysql数据库的数据目录(datadir),可以选择创建在/data/mysql下

mkdir -p /data/mysql  

目录授权

chown mysql:mysql -R /data/mysql

创建/etc/my.cnf文件,修改相关配置
vim /etc/my.cnf //修改相关配置

26 [mysqld]  
27 datadir = /data/mysql 添加这一行,指定数据保存路径

使用mysqld命令初始化数据库

cd /usr/local/mysql/bin/  
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/ --user=mysql --initialize

注:如果在初始化过程中加上–initialize参数,表示会生成一个临时的数据库初始化密码,记录在log-error(错误日志)里边, 如果加上–initialize-insecure参数,代表无密码进入,建议使用生成初始化密码的方式。

启动数据库过程:

cd /usr/local/mysql/bin/  
./mysqld_safe --defaults-file=/etc/my.cnf &  

数据库启动成功后,进入数据库的初始化密码会在/data/mysql/error.log下面:

cat /data/mysql/error.log | grep password

使用初始化密码进入数据库之后,修改数据库root密码,设置为永不过期:

mysql>set password = 'root123';  
mysql>ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;  
mysql>flush privileges;

##update user set password=password(‘root123’) where user=‘root’;

//低于mysql 5.7版本的数据库需要安全加固,只保留数据库中用户为root、host为localhost的账号
语句如下:

delete from user where user!='root' or host!='localhost';

关闭数据库

cd /usr/local/mysql/bin  
./mysqladmin -uroot -proot123 shutdown

非正常关闭,可以kill掉mysql进程

三、information_schema下常用表:

  • tables (记录所有表到的基本信息是,访问该表可收集的统计信息)
  • processlist(查看当前数据库的连接).也可以使用show processlist;
  • GLOBAL_STATUS(查看数据库运行的各种状态值)
  • GLOBAL_VARIABLES(查看数据库中的参数)
  • PARTITIONS(数据库中表分区的情况)
  • INNODB_LOCKS、INNODB_TRX、INNODB_LOCK_WAITS这三张表用来监控数据库中锁的情况
  • user(用于管理数据库中的用户权限信息)

四、mysql密码丢失

1.my.cnf增加一行

在my.cnf里的[mysqld]下增加skip-grant-tables

重启

2.带有–-skip-grant-tables参数启动跳过权限表

登不上
看是否可以强制停库(需要确认),查看mysql进程号,并kill进程

ps -ef | grep mysql  
mysql 5097 3807 2 12:22 pst/0 00:00:00 /usr/local/mysql/bin/mysqld --defaults-file…

kill -9 5097 3807

然后跳过权限表参数,重启数据库

./mysql_safe --defaults-file=/etc/my.cnf --skip-grant-tables &  mysql

或者

service mysqld start --skip-grant-tables

给root用户设置新的密码并刷新权限,mysql 5.7之后,mysql库下的password字段用authentication_string字段代替

use mysql;  
update user set authentication_string=password('root') where user='root';  
flush privileges;

五、mysql数据库连接方式

linux下两种连接方式TCP/IP连接方式和Socket
TCP/IP方式,mysql检查一张权限表,判断发起请求的客户端ip是否允许连接到mysql实例,该表就是mysql库下的user表

mysql -u username -p password -P port -h IP

UNIX Socket连接方式不是网络协议,只能在mysql客户端和数据实例在同体台服务器时使用。可以在配置文件中指定套接字文件的路径

如socket=/tmp/mysql.sock  
mysql -u username -p password -S /tmp/mysq.sock

六、用户权限

超管权限用户和普通用户

1.超户

超管: root和all privileges权限用户

mysql 5.6

use mysql;  
select user,host,password from user;

##root

mysql 5.7

use mysql;  
select user,host,authentication_string from user;

##root  
##mysql.sys


2.普通用户

create user 用户名@主机ip identified by ‘密码’;
为了数据库的安全性,主机IP避免使用%,可以分配IP地址的一个网段 。注意权限问题

给开发人员的权限分配规则,可以只分配只读权限和读写权限
注:不要给用户建表,改表(create,alter)等权限
只读权限只能查询,不能进行DML操作
读写权限包含insert、update、delete、select

例:
只读用户:

create user 'usr_read'@'172.20.10.%' identified by 'mysql123';  
grant select on dbname.* to 'usr_read'@'172.20.10.%'  identified by 'mysql123';  
flush privileges;

读写用户:

create user 'usr_readwrite'@'172.20.10.%' identified by 'mysql123';  
grant select,insert,update,delete on dbname.* to 'usr_read'@'172.20.10.%' identified by 'mysql123';  
flush privileges;

 

相关文章:

  • 0901(044天 集合框架08 树TreeMap)
  • 【数据结构】栈(stack)
  • 【MyBatis笔记09】MyBatis中常用的几个动态SQL标签
  • Apache Geode<1.15.0 不受信任的反序列化漏洞
  • GitLab 中 GitHub 导入 API 存在远程代码执行漏洞
  • 什么是生成器 — 一篇文章让你看懂
  • 国内近五年人工智能教育的研究热点及趋势——基于多维尺度和社会网络分析的方法
  • QGraphicsItem鼠标拖动旋转(五)
  • win7连接打印机0x0000011b错误的解决办法
  • 四、RocketMq本地集群搭建:多master-slaver异步
  • pcan二次开发文档 | PEAK-System Documentation
  • R语言数据分组聚合实战:使用aggregate函数对mtcars数据通过两个分类变量进行数据分组聚合、并计算分组的均值、使用na.rm删除异常值
  • Chapter15 : Artificial Intelligence in Compound Design
  • 前端HTML5 +CSS3 1. 基础认知
  • R语言替换字符串中指定字符的子串:sub函数查找字符串中第一个匹配到的子串并替换、如果要删除指定字符串子串则将替换的子符串设置为空字符串
  • @jsonView过滤属性
  • crontab执行失败的多种原因
  • Effective Java 笔记(一)
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • Fastjson的基本使用方法大全
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • webpack4 一点通
  • 复杂数据处理
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 解析带emoji和链接的聊天系统消息
  • 聚簇索引和非聚簇索引
  • 面试总结JavaScript篇
  • 前端存储 - localStorage
  • 少走弯路,给Java 1~5 年程序员的建议
  • 使用SAX解析XML
  • 通信类
  • 小程序测试方案初探
  • AI算硅基生命吗,为什么?
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #Linux(帮助手册)
  • #控制台大学课堂点名问题_课堂随机点名
  • (02)vite环境变量配置
  • (1)Nginx简介和安装教程
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (2)nginx 安装、启停
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (笔试题)分解质因式
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • .NET简谈设计模式之(单件模式)
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • [ IOS ] iOS-控制器View的创建和生命周期
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [20140403]查询是否产生日志
  • [AIGC] Kong:一个强大的 API 网关和服务平台
  • [android] 请求码和结果码的作用
  • [BIZ] - 1.金融交易系统特点
  • [BJDCTF 2020]easy_md5
  • [c#基础]DataTable的Select方法
  • [codeforces]Recover the String