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

11 篇文章 0 订阅

一、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;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小怪兽ysl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值