- cat /etc/sysconfig/selinux
- sed -i 's/enable/disable/g' /etc/sysconfig/selinux
-
- chkconfig --list|grep iptables
- chkconfig iptables off
- chkconfig --list|grep iptables
查看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
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的值即可。
建议使用xfs文件系统,相比ext4,它更方便管理,支持动态扩容,删除文件也方便
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
关闭numa功能,可以更好分配内存,不需要采取swap方式获取内存。使用swap可能导致数据库性能下降
关闭方式在BIOS、操作系统中关闭,或者在数据库启动过程中关闭
numa --interleave=all /usr/local/mysql/bin/mysqld_safe -defaults-file=/etc/my.cnf &
创建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进程
在my.cnf里的[mysqld]下增加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;
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
超管权限用户和普通用户
超管: 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
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;