1 安装
1.1 安装前准备工作
1.1.1 检查网络
检查网络是否连通互联网,以备校准时间时访问互联网校准
ping www.baidu.com
如若不能互联网,检查网关、子网掩码、DNS
[root@10 icourses]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=6C:AE:8B:1D:26:12
TYPE=Ethernet
UUID=0db3fad2-6f71-43bf-96c8-294f69a98aa3
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=10.3.200.158
NETMASK=255.255.255.0
GATEWAY=10.3.200.1
DNS1=114.114.114.114
修改网络配置后,需要重启网络让修改生效,生效方法
service network restart
1.1.2 校准时间
校准时间用来保证所有数据库采用统一时间,避免因时间不一致造成操作错误或主从同步错误。
校准方法:
[root@10 icourses]# date
[root@10 icourses]# ntpdate time.windows.com && hwclock -w
9 Aug 13:50:57 ntpdate[32399]: step time server 13.65.245.138 offset -30147.423864 sec
[root@10 icourses]# date
2017年 08月 09日 星期三 13:51:05 CST
1.1.3 服务器开放3306端口
使用“iptables -I INPUT -p tcp --dport 3306 -j ACCEPT”来开通3306端口,开通端口后要进行保存(service iptables save)以及重启iptables(service iptables restart)。
使用service iptables status来查看防火墙状态:
[root@10 icourses]# service iptables status
表格:filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
6 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:41135
7 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1.1.4 下载MySQL安装包
下载版本为:mysql-5.7.17-linux-glibc2.5-x86_64
下载地址为:
https://downloads.mysql.com/archives/get/file/mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
1.1.5 解压缩安装包
1) 通过sftp上传安装包至/home/icourses
2) 将安装包解压缩至/home/mysql
[root@10 icourses]# cd /home
[root@10 home]# cd icourses
[root@10 icourses]# ls
mysql-5.7.17-linux-glibc2.5-x86_64.tar
[root@10 icourses]# mv mysql-5.7.17-linux-glibc2.5-x86_64.tar ../
[root@10 icourses]# cd ..
[root@10 home]# ls -al
总用量 667268
drwxr-xr-x. 4 root root 4096 8月 9 13:55 .
dr-xr-xr-x. 24 root root 4096 7月 20 23:58 ..
drwx------. 3 icourses icourses 4096 8月 9 13:55 icourses
drwx------. 2 root root 16384 7月 20 23:05 lost+found
-rw-rw-r--. 1 icourses icourses 683233280 2月 10 11:22 mysql-5.7.17-linux-glibc2.5-x86_64.tar
[root@10 home]# chown root:root mysql-5.7.17-linux-glibc2.5-x86_64.tar
[root@10 home]# tar xvf mysql-5.7.17-linux-glibc2.5-x86_64.tar
mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
mysql-test-5.7.17-linux-glibc2.5-x86_64.tar.gz
[root@10 home]# tar xvfz mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
[root@10 home]# mv mysql-5.7.17-linux-glibc2.5-x86_64 mysql
1.2 新增mysql用户、组
[root@10 home]# groupadd mysql
[root@10 home]# useradd -r -g mysql mysql
[root@10 home]# chown -R mysql mysql/
[root@10 home]# chgrp -R mysql mysql/
1.3 初始化MySQL
初始化MySQL时,一定要记下初始化密码,如下所示的初始化密码为“v_pe*8jw+!0V”。
2XOw:qnhj-Tz(初始化过程中默认生成的)
[root@10 home]# cd mysql
[root@10 mysql]# ./bin/mysqld --initialize --user=mysql --basedir=/home/mysql --datadir=/home/mysql/data
2019-03-01T06:03:25.482314Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-03-01T06:03:26.604999Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-03-01T06:03:26.874561Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-03-01T06:03:27.007240Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 75d1bb87-7cc8-11e7-9238-6cae8b1d2612.
2019-03-01T06:03:27.031118Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-03-01T06:03:27.032590Z 1 [Note] A temporary password is generated for root@localhost: v_pe*8jw+!0V
1.4 修改系统配置文件
[root@10 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@10 mysql]# cp support-files/my-default.cnf /etc/my.cnf
1.4.1 修改mysqld
修改46、47、63行:
原始为:
basedir=
datadir=
mysqld_pid_file_path=
修改为:
basedir=/home/mysql
datadir=/home/mysql/data
mysqld_pid_file_path=/home/mysql/data/mysql.pid
修改后的文件:
1.4.2 修改my.cnf
原始为:
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
修改为:
[client]
default-character-set = utf8
port = 3306
socket = /home/mysql/data/mysql.socket
[mysql]
default-character-set = utf8
[mysqld]
general_log
max_connect_errors=3
skip-name-resolve
basedir=/home/mysql
datadir=/home/mysql/data
socket = /home/mysql/data/mysql.socket
pid-file = /home/mysql/data/mysql.pid
max_connections=2000
character-set-server=utf8
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
lower_case_table_names=1
interactive_timeout=21600
wait_timeout=21600
plugin-load=validate_password.so
validate-password=FORCE_PLUS_PERMANENT
default_password_lifetime=365
修改后的文件为:
配置项的含义在参考章节“数据库安全设置”和“其他设置”。
1.5 Link MySQL的执行文件
[root@10 home]# mkdir -p /usr/local/mysql/bin
[root@10 home]# ln -s /home/mysql/bin/mysqld /usr/local/mysql/bin/mysqld
1.6 启动mysqld服务
[root@10 home]# service mysqld start
1.7 首次登陆MySQL
首次登陆MySQL使用章节“初始化MySQL”中的临时密码“v_pe*8jw+!0V”;登陆之后立即修改密码。
[root@10 bin]# ./mysql -uroot -p
Enter password:
mysql> set password=password('iCourses@2017');
Query OK, 0 rows affected, 1 warning (0.00 sec)
1.8 修改root用户名
将root用户名修改为db_root
update user set user="db_root" where user="root";
FLUSH PRIVILEGES;
1.9 新增用于远程访问的DBA用户(db_icourses)
新增DBA用户db_icourses,且限制其host为10.3.200.35,(切换为10.3.200.145)该ip为Linux堡垒机ip,这样可以通过Linux堡垒机转发的形式来操作数据库。
create user 'db_icourses'@'10.3.200.35' identified by '[email protected]';
grant all privileges on *.* to 'db_icourses'@'10.3.200.35';
grant GRANT OPTION on *.* to 'db_icourses'@'10.3.200.35';
FLUSH PRIVILEGES;
2 主从配置
2.1 概况
Master数据库为10.3.200.111,Slave数据库分别为10.3.200.157和10.3.200.158。
2.2 Master数据库
2.2.1 创建Slave数据库进行同步时使用的用户mysqlbackup
create user 'mysqlbackup'@'10.3.200.157' identified by '[email protected]';
create user 'mysqlbackup'@'10.3.200.158' identified by '[email protected]';
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO 'mysqlbackup'@'10.3.200.157' ;
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO 'mysqlbackup'@'10.3.200.158' ;
2.2.2 修改配置文件my.cnf
在配置文件/etc/my.cnf末尾增加如下配置,server-id需要确保唯一,一般使用ip地址最后一段:
log-bin=mysql-bin
server-id=111
innodb_flush_log_at_trx_commit=1
sync_binlog=1
2.2.3 重启mysqld服务
service mysqld start
2.2.4 查看Master状态,并记录执行文件和位置
执行show master status,并记录下File字段和Position字段。
简单说明下mysql-bin.XXXXXX,这是记录数据库所执行的操作的文件,随着时间积累,其后面的数字会增加;Position为当前执行位置。
Mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 664 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
2.3 Slave数据库
2.3.1 修改配置文件my.cnf
在配置文件/etc/my.cnf末尾增加配置,server-id需要确保唯一,一般使用ip地址最后一段。
在Slave数据库10.3.200.157的配置文件中增加:
server-id=157
在Slave数据库10.3.200.158的配置文件中增加:
server-id=158
2.3.2 重启mysqld服务
service mysqld start
2.3.3 连接Master
在Slave数据库中执行:
mysql> change master to master_host='10.3.200.111',
-> master_port=3306,
-> master_user='mysqlbackup',
-> master_password='[email protected]',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=664;
2.3.4 启动Slave
start slave;
2.3.5 查看Slave状态
show slave status;
字段Slave_IO_Running、Slave_SQL_Running为Yes则说明Slave数据库运行正常。
3 用户、权限设置及访问控制
3.1 概况
客户端共有三个,其中10.3.200.35(变为145)为Linux堡垒机,10.3.200.121和10.3.200.171为两台应用服务器。
根据需求,共设置有四种角色,分别为DBA用户、主从同步用户、管理员用户、普通用户。
用户名 可操作数据库 客户端白名单 用途
db_root 所有 localhost DBA用户,只能本机登录,用于本地数据库备份以及本地DBA操作
db_icourses 所有 10.3.200.35(145) DBA用户,可远程登录
mysqlbackup 所有 10.3.200.61
10.3.200.63 主从同步用户,slave数据库使用该用户名密码来进行数据库同步,修改密码后需要重新对从数据库进行配置。
db_hepmanager hep-bbs
hep-cms
hep-file
hep-ttools
hep-user
hep-data
hep-mobile 10.3.200.35(145) 管理员用户,只能操作五个数据库,拥有增删改查及数据表结构操作的权限
db_bbs hep-bbs 10.3.200.22
10.3.200.115
10.3.200.25
10.3.200.148
10.3.200.163
10.3.200.167
10.3.200.171
10.3.200.121
10.3.200.164 普通用户,对hep-bbs数据库拥有增删改查的权限
db_cms hep-cms 10.3.200.22
10.3.200.115
10.3.200.25
10.3.200.148
10.3.200.163
10.3.200.167
10.3.200.171
10.3.200.121
10.3.200.164 普通用户,对hep-cms数据库拥有增删改查的权限
db_file hep-file 10.3.200.22
10.3.200.115
10.3.200.25
10.3.200.148
10.3.200.163
10.3.200.167
10.3.200.171
10.3.200.121
10.3.200.164 普通用户,对hep-file数据库拥有增删改查的权限
db_ttools hep-ttools 10.3.200.22
10.3.200.115
10.3.200.25
10.3.200.148
10.3.200.163
10.3.200.167
10.3.200.171
10.3.200.121
10.3.200.164 普通用户,对hep-ttools数据库拥有增删改查的权限
db_user hep-user 10.3.200.22
10.3.200.115
10.3.200.25
10.3.200.148
10.3.200.163
10.3.200.167
10.3.200.171
10.3.200.121
10.3.200.164 普通用户,对hep-user数据库拥有增删改查的权限
db_data hep-data 10.3.200.22
10.3.200.115
10.3.200.25
10.3.200.148
10.3.200.163
10.3.200.167
10.3.200.171
10.3.200.121
10.3.200.164 普通用户,对hep-user数据库拥有增删改查的权限
db_mobile hep-mobile 10.3.200.22
10.3.200.115
10.3.200.25
10.3.200.148
10.3.200.163
10.3.200.167
10.3.200.171
10.3.200.121
10.3.200.164 普通用户,对hep-user数据库拥有增删改查的权限
3.2 DBA用户
DBA用户拥有的权限为:ALL PRIVILEGES、GRANT OPTION
DBA用户可操作的数据库为:所有
可使用DBA用户登录的客户端范围:localhost(db_root)、10.3.200.35(db_icourses),DBA用户使用者可以通过堡垒机转发来进行远程操作数据库
db_root用户不是新建的,而且修改的root用户名。
新建DBA用户db_icourses的脚本为:
create user 'db_icourses'@'10.3.200.35' identified by '[email protected]';
grant all privileges on *.* to 'db_icourses'@'10.3.200.35';
grant GRANT OPTION on *.* to 'db_icourses'@'10.3.200.35';
3.3 主从同步用户
主从同步用户的权限为:REPLICATION SLAVE、RELOAD、SUPER
主从同步用户可操作的数据库为:所有
可使用主从同步用户登录的客户端范围:10.3.200.157、10.3.200.158,只有两个Slave数据库可以通过主从同步用户访问Master数据库
新建主从同步用户的脚本为:
create user 'mysqlbackup'@'10.3.200.157' identified by '[email protected]';
create user 'mysqlbackup'@'10.3.200.158' identified by '[email protected]';
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO 'mysqlbackup'@'10.3.200.157' ;
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO 'mysqlbackup'@'10.3.200.158' ;
3.4 管理员用户
管理员用户拥有的权限为:REFERENCES、INSERT、DELETE、UPDATE、SELECT、CREATE、ALTER、INDEX、DROP、CREATE TEMPORARY TABLES、SHOW VIEW、CREATE ROUTINE、ALTER ROUTINE、EXECUTE、CREATE VIEW、EVENT、TRIGGER
管理员用户可操作的数据库为:多个指定的业务数据库,不包含mysql库(包含user、host等信息)
可使用管理员用户登录的客户端范围:10.3.200.35,管理员用户使用者可以通过堡垒机转发来进行远程操作,如数据库导入导出操作。
新建管理员用户的脚本为:
create user 'db_hepmanager'@'10.3.200.35' identified by '[email protected]';
grant FILE on *.* to 'db_hepmanager'@'10.3.200.35' ;
grant REFERENCES,INSERT,DELETE,UPDATE,SELECT,CREATE,ALTER,INDEX,DROP,CREATE TEMPORARY TABLES,SHOW VIEW,CREATE ROUTINE,ALTER ROUTINE,EXECUTE,CREATE VIEW,EVENT,TRIGGER on `hep-bbs`.* to 'db_hepmanager'@'10.3.200.35' identified by '[email protected]';
grant REFERENCES,INSERT,DELETE,UPDATE,SELECT,CREATE,ALTER,INDEX,DROP,CREATE TEMPORARY TABLES,SHOW VIEW,CREATE ROUTINE,ALTER ROUTINE,EXECUTE,CREATE VIEW,EVENT,TRIGGER on `hep-cms`.* to 'db_hepmanager'@'10.3.200.35' identified by '[email protected]';
grant REFERENCES,INSERT,DELETE,UPDATE,SELECT,CREATE,ALTER,INDEX,DROP,CREATE TEMPORARY TABLES,SHOW VIEW,CREATE ROUTINE,ALTER ROUTINE,EXECUTE,CREATE VIEW,EVENT,TRIGGER on `hep-file`.* to 'db_hepmanager'@'10.3.200.35' identified by '[email protected]';
grant REFERENCES,INSERT,DELETE,UPDATE,SELECT,CREATE,ALTER,INDEX,DROP,CREATE TEMPORARY TABLES,SHOW VIEW,CREATE ROUTINE,ALTER ROUTINE,EXECUTE,CREATE VIEW,EVENT,TRIGGER on `hep-ttools`.* to 'db_hepmanager'@'10.3.200.35' identified by '[email protected]';
grant REFERENCES,INSERT,DELETE,UPDATE,SELECT,CREATE,ALTER,INDEX,DROP,CREATE TEMPORARY TABLES,SHOW VIEW,CREATE ROUTINE,ALTER ROUTINE,EXECUTE,CREATE VIEW,EVENT,TRIGGER on `hep-user`.* to 'db_hepmanager'@'10.3.200.35' identified by '[email protected]';
3.5 普通用户
普通用户拥有的权限为:INSERT、DELETE、UPDATE、SELECT
普通用户可操作的数据库为:一个指定的业务数据库
可使用普通用户登录的客户端范围:10.3.200.121、10.3.200.171,普通用户只允许两个应用服务器使用
新增普通用户的脚本为:
create user 'db_bbs'@'10.3.200.121' identified by '[email protected]';
create user 'db_cms'@'10.3.200.121' identified by '[email protected]';
create user 'db_file'@'10.3.200.121' identified by '[email protected]';
create user 'db_ttools'@'10.3.200.121' identified by '[email protected]';
create user 'db_user'@'10.3.200.121' identified by '[email protected]';
create user 'db_bbs'@'10.3.200.171' identified by '[email protected]';
create user 'db_cms'@'10.3.200.171' identified by '[email protected]';
create user 'db_file'@'10.3.200.171' identified by '[email protected]';
create user 'db_ttools'@'10.3.200.171' identified by '[email protected]';
create user 'db_user'@'10.3.200.171' identified by '[email protected]';
grant FILE on *.* to 'db_bbs'@'10.3.200.121' ;
grant FILE on *.* to 'db_cms'@'10.3.200.121' ;
grant FILE on *.* to 'db_file'@'10.3.200.121' ;
grant FILE on *.* to 'db_ttools'@'10.3.200.121' ;
grant FILE on *.* to 'db_user'@'10.3.200.121' ;
grant INSERT,DELETE,UPDATE,SELECT on `hep-bbs`.* to 'db_bbs'@'10.3.200.121' ;
grant INSERT,DELETE,UPDATE,SELECT on `hep-cms`.* to 'db_cms'@'10.3.200.121' ;
grant INSERT,DELETE,UPDATE,SELECT on `hep-file`.* to 'db_file'@'10.3.200.121' ;
grant INSERT,DELETE,UPDATE,SELECT on `hep-ttools`.* to 'db_ttools'@'10.3.200.121' ;
grant INSERT,DELETE,UPDATE,SELECT on `hep-user`.* to 'db_user'@'10.3.200.121' ;
grant FILE on *.* to 'db_bbs'@'10.3.200.171' ;
grant FILE on *.* to 'db_cms'@'10.3.200.171' ;
grant FILE on *.* to 'db_file'@'10.3.200.171' ;
grant FILE on *.* to 'db_ttools'@'10.3.200.171' ;
grant FILE on *.* to 'db_user'@'10.3.200.171' ;
grant INSERT,DELETE,UPDATE,SELECT on `hep-bbs`.* to 'db_bbs'@'10.3.200.171' ;
grant INSERT,DELETE,UPDATE,SELECT on `hep-cms`.* to 'db_cms'@'10.3.200.171' ;
grant INSERT,DELETE,UPDATE,SELECT on `hep-file`.* to 'db_file'@'10.3.200.171' ;
grant INSERT,DELETE,UPDATE,SELECT on `hep-ttools`.* to 'db_ttools'@'10.3.200.171' ;
grant INSERT,DELETE,UPDATE,SELECT on `hep-user`.* to 'db_user'@'10.3.200.171' ;
3.6 查看用户及权限
查看用户、用户权限只有DBA才可以操作。
3.6.1 查看用户
select host,user from user;
host(客户端白名单) user
10.3.200.121 db_bbs
10.3.200.121 db_cms
10.3.200.121 db_file
10.3.200.121 db_ttools
10.3.200.121 db_user
10.3.200.157 mysqlbackup
10.3.200.158 mysqlbackup
10.3.200.171 db_bbs
10.3.200.171 db_cms
10.3.200.171 db_file
10.3.200.171 db_ttools
10.3.200.171 db_user
10.3.200.35 db_hepmanager
10.3.200.35 db_icourses
localhost db_root
localhost mysql.sys
3.6.2 查看用户权限
查看用户权限的脚本:
show grants for 'db_root'@'localhost';
show grants for 'db_icourses'@'10.3.200.35';
show grants for 'db_hepmanager'@'10.3.200.35';
show grants for 'db_bbs'@'10.3.200.121';
show grants for 'db_cms'@'10.3.200.121';
show grants for 'db_file'@'10.3.200.121';
show grants for 'db_ttools'@'10.3.200.121';
show grants for 'db_user'@'10.3.200.121';
show grants for 'db_bbs'@'10.3.200.171';
show grants for 'db_cms'@'10.3.200.171';
show grants for 'db_file'@'10.3.200.171';
show grants for 'db_ttools'@'10.3.200.171';
show grants for 'db_user'@'10.3.200.171';
show grants for 'mysqlbackup'@'10.3.200.157';
show grants for 'mysqlbackup'@'10.3.200.158';
3.7 注意事项
1) 因为主从同步默认设置为同步所有数据库,所以只需要在Master数据库新增和删除用户,及相应的权限授予操作,Slave库会自动进行同样设置;
2) 查看用户、用户权限只有DBA才可以操作;
3) 删除用户使用drop user,不要使用delete from user,因为使用delete from user不会删除存在的权限;
4) 使用FLUSH PRIVILEGES;来生效。
4 数据库安全设置
4.1 禁用root用户
禁止使用root用户登录,修改用户名
update user set user="db_root" where user="root";
FLUSH PRIVILEGES;
4.2 设置密码验证策略
在/etc/my.cnf文件中增加开启密码验证的插件
//加载密码验证插件
plugin-load=validate_password.so
//禁止卸载插件,使用UNINSTALL PLUGIN命令也无法卸载插件
validate-password=FORCE_PLUS_PERMANENT
或者可以在命令行中开启、关闭,服务重启后会恢复配置文件中设置
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
UNINSTALL PLUGIN validate_password ;
查看密码验证策略
show variables like 'validate%';
默认如下:
Variable_name Value 含义
validate_password_check_user_name OFF
validate_password_dictionary_file validate_password 插件用来验证密码的目录路径
validate_password_length 8 限制密码的最小长度
validate_password_mixed_case_count 1 限制至少有一个大写和小写的字符
validate_password_number_count 1 限制必须要有一个数字字符
validate_password_policy MEDIUM 密码安全策略LOW, MEDIUM,STRONG ,其中LOW表示只限制长度;MEDIUM 则为长度,字符,数字,大小写,特殊字符;STRONG则在之前的基础上增加字典目录
validate_password_special_char_count 1 限制至少包含一个特殊字符
4.3 设置密码定期更换
在/etc/my.cnf设置密码过期时间为365天,缺省值为0表示永不过期
default_password_lifetime=365
或者可以使用命令设置,服务重启会恢复配置文件中的设置
SET GLOBAL default_password_lifetime = 365;
查看密码过期时间
show variables like 'default_password_lifetime';
4.4 控制用户对资源的访问
在创建用户时,对不同角色的用户所能访问的数据库进行了限制。参考章节“用户、权限设置与访问控制”。
4.5 控制用户合理的登录范围
在创建用户时,对不同角色的用户所允许的登录范围进行了限制。参考章节“用户、权限设置与访问控制”。
4.6 根据角色分配权限,授予用户所需最小权限
在创建用户时,对不同角色的用户所拥有的数据库操作的权限进行了限制。参考章节“用户、权限设置与访问控制”。
4.7 连接失败次数限制
在/etc/my.cnf设置
max_connect_errors=3
在官方文档中解释为:“max_connect_errors:如果中断的与主机的连接超过该数目,该主机则阻塞后面的连接。你可以用 FLUSH HOSTS语句解锁锁定的主机。”
该设置并非对用户名/密码无效的次数限制,MySQL未提供用户名/密码无效次数限制。该设置参数为对连接失败的次数限制。
不可以配置skip-host-cache,否则该配置不起作用。
连接失败次数限制查看
show variables like 'max_connect_errors';
4.8 设置空闲连接超时时间
在/etc/my.cnf中设置
interactive_timeout=21600
wait_timeout=21600
这个参数的单位为秒,这里将超时时间设置为6小时,当一个连接空闲超过6小时,MySQL将其关闭。
或者可以使用命令设置,服务重启会恢复配置文件中的设置
set global INTERACTIVE_TIMEOUT=21600;
set global WAIT_TIMEOUT=21600;
查看空闲连接超时时间
show variables like '%timeout%';
4.9 开启general log日志审计
在/etc/my.cnf中设置
general_log
可查看general log的状态,及日志位置
show variables like '%general_log%';
结果如下
Variable_name Value
general_log ON
general_log_file /home/mysql/data/jgj111.log
general log开启会记录所有操作,会影响性能,但是在由于信息安全等级保护第三级的要求,我们开启它。
默认状态下general log不开启,只有log error用于记录错误日志。
4.10 定期日志备份
定期备份general log和log error日志,log error日志可以通过命令查看日志位置
show variables like 'log_error';
只备份主库上的日志,备份使用的脚本为
datestr=`date '+%Y%m%d'`
backupdir="/home/icourses_nas/fs101_web/log/db/10.3.200.111/${datestr}"
mkdir -p ${backupdir}
cp -r /home/mysql/data/jgj111.log ${backupdir}/log_${datestr}.log
cp -r /home/mysql/data/jgj111.err ${backupdir}/err_${datestr}.err
暂时不清空原日志,如果后期有需求,可在备份日志后,增加如下脚本
cat /dev/null > /home/mysql/data/jgj111.log
cat /dev/null > /home/mysql/data/jgj111.err
4.11 定期数据备份
使用db_root用户定期进行数据备份,脚本为
datestr=`date '+%Y%m%d'`
backupdir="/home/icourses_nas/fs101_web/data_bak/10.3.200.111/${datestr}"
mkdir -p ${backupdir}
cd /home/mysql/bin
./mysqldump --opt -udb_root -piCourses@2017 --databases hep-bbs | gzip > ${backupdir}/hep-bbs_${datestr}.sql.gz
./mysqldump --opt -udb_root -piCourses@2017 --databases hep-cms | gzip > ${backupdir}/hep-cms_${datestr}.sql.gz
./mysqldump --opt -udb_root -piCourses@2017 --databases hep-file | gzip > ${backupdir}/hep-file_${datestr}.sql.gz
./mysqldump --opt -udb_root -piCourses@2017 --databases hep-user | gzip > ${backupdir}/hep-user_${datestr}.sql.gz
./mysqldump --opt -udb_root -piCourses@2017 --databases hep-ttools | gzip > ${backupdir}/hep-ttools_${datestr}.sql.gz
5 其他设置
5.1 最大连接数
在/etc/my.cnf中设置最大连接数为2000,如有其他需求,可更改
max_connections=2000
或者可以使用命令设置,服务重启会恢复配置文件中的设置
SET GLOBAL max_connections = 2000;
查看最大连接数
show variables like '%max_connections%';
5.2 设置数据库名、表名大小写不敏感
在/etc/my.cnf中设置
lower_case_table_names=1
在Linux中默认为0,即大小写敏感;Windows系统因为本身大小写不敏感,不能设置为0,默认为1。开发中习惯使用大小写不敏感。
5.3 禁止MySQL进行域名解析
在/etc/my.cnf中设置
skip-name-resolve
这个参数可以禁止对客户端进行域名解析,在解析时,会影响连接速度,导致建立连接时间非常慢。
5.4 不设置skip-host-cache
不设置skip-host-cache,否则会导致max_connect_errors设置无效。