mysql 数据库安装到 C盘会卡顿吗_MySQL

下载后:

mysql 数据库安装到 C盘会卡顿吗_mysql 数据库安装到 C盘会卡顿吗_02

2.可以把解压的内容随便放到一个目录,我的是如下目录(放到C盘的话,可能在修改ini文件时涉及权限问题,之后我就改放D盘了):

D:\MySQL\MySQL Server 5.7.22

如下图:此时加压后的文件中没有data目录和ini文件

mysql 数据库安装到 C盘会卡顿吗_等保?_03

3.在D:\MySQL\MySQL Server 5.7.22目录下新建my.ini文件,复制如下内容

[mysqld]

port = 3306

basedir=D:\mysql-5.7.23-winx64\mysql-5.7.23-winx64

datadir=D:\mysql-5.7.23-winx64\mysql-5.7.23-winx64\data

max_connections=200

character-set-server=utf8

default-storage-engine=INNODB

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

#设置初始化连接操作
init-connect='Insert into AuditDB.accesslog(ConnectionID, ConnUser, MatchUser, LoginTime) values(connection_id(),user(),current_user(),now());'
#开启binlog
log-bin=E:\abc
binlog-format=Row
#Server ID
server-id=201801
#skip-grant-tables

connection_control_min_connection_delay=60000
[mysql]

default-character-set=utf8

 Note:内容中红色部分是mysql的目录,上一部的那个路径

 

 4.下面配置环境变量:

电脑属性-》高级系统设置-》点击环境变量

在系统变量部分新建一个变量名:MYSQL_HOME, 变量值:D:\MySQL\MySQL Server 5.7.22

5.MySQL安装过程:

管理员身份运行cmd

进入如下目录:D:\MySQL\MySQL Server 5.7.22\bin

运行命令:mysqld  --initialize (此时会生成data目录)

mysql 数据库安装到 C盘会卡顿吗_mysql 数据库安装到 C盘会卡顿吗_04

 运行mysqld -install (安装)

mysql 数据库安装到 C盘会卡顿吗_MySQL_05

运行net start mysql (启动mysql服务)

可以在任务管理器中看到MySQL服务

mysql 数据库安装到 C盘会卡顿吗_SQL_06

6.设置root账户密码:

在my.ini文件(MySQL的配置文件)的[mysqld]下加一行skip-grant-tables

然后在任务管理器中重启MySQL服务

 重启MqSQL服务后,运行mysql -uroot -p,可以成功登入mysql

然后更新root账户的密码为'root'

命令:update mysql.user set authentication_string=password("root") where user="root";

然后输入flush privileges;(刷新账户信息)

执行quit或ctrl+Z退出

然后将my.ini文件中刚才加的skip-grant-tables这一行删掉,保存后再重启MySQL服务

然后运行mysql -uroot -proot就可以用root用户名和root密码登陆了

7.重装的问题:

 

基本步骤包括停掉MySQL服务,删除注册表,删除之前的my.ini文件,运行几个命令进行删除,最后最好再重启一下电脑就可以重新安装了

以上只是为了装一个较完整的mysql服务器。下面进行A问题配置:

mysql> show variables like 'plugin_dir';
 +---------------+------------------------------+
 | Variable_name | Value |
 +---------------+------------------------------+
 | plugin_dir | /usr/local/mysql/lib/plugin/ |
 +---------------+------------------------------+
 1 row in set (0.00 sec)mysql> Install plugin connection_control soname "connection_control.so";
 Query OK, 0 rows affected (0.00 sec)mysql> INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME 'connection_control.so';
 Query OK, 0 rows affected (0.00 sec)mysql> select plugin_name, plugin_library, load_option from information_schema.plugins where plugin_library = 'connection_control.so';
 +------------------------------------------+-----------------------+-------------+
 | plugin_name | plugin_library | load_option |
 +------------------------------------------+-----------------------+-------------+
 | CONNECTION_CONTROL | connection_control.so | ON |
 | CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS | connection_control.so | ON |
 +------------------------------------------+-----------------------+-------------+检查方法:
1、执行SQL语句:
select plugin_name,plugin_library,load_option from information_schema.plugins where plugin_name = 'connection_control';
预期结果:
输出结果不为空,检查是否加载了connection_control插件,且load_option为Force。
2、执行SQL语句:
select plugin_name,plugin_library,load_option from information_schema.plugins where plugin_name = 'connection_control_failed_login_attempts';
预期结果:
输出结果不为空,检查是否加载了connection_control_failed_login_attempts插件,且load_option为Force。
3、执行SQL语句:
show variables where variable_name = 'connection_control_failed_connections_threshold';
预期结果:
输出结果应该不为空,表明登录失败开始延时的阈值为非空。
4、执行SQL语句:
show variables where variable_name = 'connection_control_min_connection_delay';
预期结果:
输出结果应该不为空,表明每次登录失败后登录延时增加的毫秒数非空。
5、执行SQL语句:
show variables where variable_name = 'connection_control_max_connection_delay';

预期结果:

输出结果应该不为空,表明失败后登录延时增加最大毫秒数非空。

修改登录失败延时登录最小时间数   在配置文件my.ini的 mysqld下添加 :connection_control_min_connection_delay=60000

问题B:开启mysql安全审计。

解决B:init-connect是配置文件的一个参数,作用是在每个客户端连接时执行,我们需要有一个表来保存连接客户端的ID,IP和登录时间,ID是连接的session的ID号,是递增的。那么,当我们在binlog查出操作的SQL,并找到该记录的thread_id,然后将thread_id带入我们新建的表,根据ID来查出修改者的IP和时间。

1、创建用于存放连接信息的表

mysql> create database AuditDB default charset utf8;
 mysql> use AuditDB;
 mysql> create table accesslog (
   ID int primary key auto_increment,
   ConnectionID int, 
   ConnUser varchar(30), 
   MatchUser varchar(30), 
   LoginTime datetime
 );
 2、保证所有链接用户对此表有写入权限mysql> insert into mysql.db (Host,Db,User,Insert_priv) values ('%','AuditDB','','Y');
 Query OK, 1 row affected (0.03 sec)mysql> flush privileges;
 Query OK, 0 rows affected (0.00 sec)
 3、设置init-connect在[mysqld]下添加以下设置:my.ini配置文件
 #设置初始化连接操作
 init-connect='Insert into AuditDB.accesslog(ConnectionID, ConnUser, MatchUser, LoginTime) values(connection_id(),user(),current_user(),now());'
 #开启binlog
 log-bin=xxx
 4、重启数据库生效shell> /etc/init.d/mysql restart
连接测试查询
 mysql> select * from AuditDB.accesslog;
 +----+--------------+--------------------+-----------------+---------------------+
 | ID | ConnectionID | ConnUser           | MatchUser       | LoginTime           |
 +----+--------------+--------------------+-----------------+---------------------+
 |  1 |            1 | svoid@localhost    | svoid@localhost | 2015-04-24 14:16:18 |
 |  2 |            3 | svoid@192.168.56.1 | svoid@%         | 2015-04-24 14:16:53 |
 +----+--------------+--------------------+-----------------+---------------------+
 2 rows in set (0.00 sec)查找操作记录
 1、 进行模拟操作,下列操作可由多个连接进行mysql> use test;
 Database changedmysql> create table t (id int ,name varchar(20));
 Query OK, 0 rows affected (0.06 sec)mysql> insert into t values(1,'a');
 Query OK, 1 row affected (0.16 sec)mysql> insert into t values(2,'b');
 Query OK, 1 row affected (0.03 sec)mysql> truncate table t ;
 Query OK, 0 rows affected (0.03 sec)
 2、根据binlog,确认操作truncate的thread_idmysqlbinlog --start-datetime='2015-04-24 14:10:00' --stop-datetime='2015-04-24 14:25:00' /db/mysql/data/mysql_info.000007 | grep -B 5 truncate
 # at 1223
 #150424 14:23:36 server id 1  end_log_pos 1302     Query    thread_id=3    exec_time=0    error_code=0
 SET TIMESTAMP=1429856616/*!*/;
 /*!\C gbk *//*!*/;
 SET @@session.character_set_client=28,@@session.collation_connection=28,@@session.collation_server=33/*!*/;
 truncate table t
 根据上面的提示可以看到操作的thread_id=33、确认操作的用户
mysql> select * from AuditDB.accesslog where ConnectionID=3;
 +----+--------------+--------------------+-----------+---------------------+
 | ID | ConnectionID | ConnUser           | MatchUser | LoginTime           |
 +----+--------------+--------------------+-----------+---------------------+
 |  2 |            3 | svoid@192.168.56.1 | svoid@%   | 2015-04-24 14:16:53 |
 +----+--------------+--------------------+-----------+---------------------+
 1 row in set (0.00 sec)

注意:
init-connect 是不会在super用户登录时执行, 所以不要使用超级用户,不然你看不到任何信息。
理论上,用户每次连接时往数据库里插入一条记录,不会对数据库产生很大影响,考虑降低连接频率及accesslog插入效率优化。
对于所有的普通级别的用户,必须全部都要对日志表具有读写权限, 否则将导致,没有权限的用户无法使用数据库。
建议把记录表的引擎设置为archive,能极大的缩小空间。