数据库mysql主从搭建

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设置无效。

你可能感兴趣的:(数据库mysql主从搭建)